CVE-2026-74744 в Linux Kernel: некорректное наследование headroom в ipvlan

CVE: CVE-2026-74744
Продукт: Linux Kernel
Дата публикации: 26.08.2026
Критичность: CRITICAL
CVSS: 9.8 (3.1)
EPSS: 0,52%; процентиль 41,84%
CISA KEV: нет подтверждения в каталоге CISA KEV

Краткое описание​


В драйвере ipvlan ядра Linux выявлена ошибка инициализации, при которой параметры needed_headroom и needed_tailroom не наследуются от нижележащего устройства. Это приводит к недостаточному резервированию памяти для сетевых заголовков, что может вызвать повреждение памяти и отказ в обслуживании. Описаны технические причины, условия срабатывания и порядок применения исправлений.

Основные характеристики​


Риск связан с нарушением целостности памяти в сетевом стеке при обработке пакетов через ipvlan-интерфейсы, настроенные поверх устройств с дополнительными заголовками. Ошибка приводит к переполнению буфера или обращению к освобожденной памяти, что может вызвать панику ядра.

  • CVSS: 9.8 (CRITICAL). Вектор: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H. Оценка указывает на возможность удаленной атаки без аутентификации и взаимодействия пользователя.
  • EPSS: 0,52% (процентиль 41,84%). Вероятность эксплуатации в ближайшие 30 дней оценивается как низкая, однако критичность уязвимости остается высокой.
  • Тип ошибки: Memory corruption (slab-use-after-free, skb headroom underflow) в компоненте drivers/net/ipvlan.
  • Статус: Исправление внесено в mainline и портировано в стабильные ветки ядра. Эксплуатация в реальных атаках не подтверждена.

Какие продукты и версии затронуты​


Уязвимость затрагивает драйвер ipvlan в ядре Linux. Ошибка присутствовала с момента первоначального добавления драйвера (коммит 2ad7bf363841) и была исправлена в следующих версиях:

  • Mainline: коммит e16e960d55a40d36bd7c2494cc005e757dc9a1ef.
  • Stable 6.15: коммит 5c2ca77212eb38559b0353b8363b7a84f4b019dd.
  • Stable 6.12: коммит 5f33188457bbcc1b11ca87084037963c516ed3d9.
  • Stable 6.6: коммит af602c4d0ee548da18e2409b4b4da1079625a372.
  • Stable 5.15: коммит c0fbe31f6b20ade0465130685859faa5c86fda59.
  • Stable 5.10: коммит f3c17ff65f54781cde696e16a6c577615ed735aa.

Точные номера версий пакетов для конкретных дистрибутивов (Debian, Ubuntu, RHEL) в предоставленных источниках не указаны. Необходимо сверяться с официальными базами данных безопасности вашего провайдера.

Причина уязвимости​


Причина ошибки заключается в функции ipvlan_init(). При инициализации ipvlan-устройства драйвер копирует от физического устройства (phy_dev) параметр hard_header_len, но оставляет поля needed_headroom и needed_tailroom равными нулю.

Эти параметры определяют, сколько дополнительного пространства в начале и конце буфера пакета (skb) необходимо зарезервировать для заголовков и трейлеров нижележащих протоколов. Если нижележащее устройство (например, MACsec, IPsec, WireGuard или туннель) требует дополнительного места, а ipvlan не учитывает это, верхние слои стека не резервируют достаточный объем памяти.

В результате, при попытке добавить заголовки или трейлеры, происходит переполнение буфера или обращение к памяти, которая уже была освобождена (use-after-free). Это приводит к повреждению памяти и потенциальному падению ядра.

Как работает атака​


Атака эксплуатирует несоответствие между фактическими требованиями нижележащих сетевых протоколов и параметрами, которые видит драйвер ipvlan. Когда пакет проходит через ipvlan-интерфейс, ядро рассчитывает необходимый размер буфера на основе needed_headroom и needed_tailroom. Поскольку эти значения в ipvlan равны нулю, ядро выделяет буфер минимального размера.

Если на нижележащем уровне (например, в MACsec или IPsec) требуется добавить заголовок, функция dev_hard_header() или ipvlan_hard_header() пытается записать данные в область, которая не была зарезервирована. Это приводит к переполнению буфера (skb headroom underflow). В некоторых случаях это вызывает срабатывание KASAN (Kernel Address Sanitizer) с ошибкой slab-use-after-free, что приводит к панике ядра.

Атакующий может использовать этот сценарий для удаленного отказа в обслуживании (DoS), отправляя специально сформированные пакеты через ipvlan-интерфейс, настроенный поверх защищенного канала.

Условия успешной эксплуатации​


Для успешной эксплуатации уязвимости необходимо соблюдение следующих условий:

  • В системе настроен ipvlan-интерфейс.
  • ipvlan-интерфейс привязан к физическому устройству, которое требует дополнительного пространства для заголовков или трейлеров (например, MACsec, IPsec, WireGuard, туннели или veth с rx headroom).
  • Атакующий имеет возможность отправлять сетевой трафик через данный ipvlan-интерфейс.
  • В ядре не применено исправление, устраняющее некорректное наследование параметров needed_headroom и needed_tailroom.

Возможный сценарий атаки​


Сценарий атаки начинается с настройки ipvlan-интерфейса поверх защищенного канала (например, IPsec или MACsec). Атакующий отправляет пакет, который проходит через ipvlan. Ядро, не зная о необходимости дополнительного пространства для заголовков нижележащего протокола, выделяет буфер недостаточного размера.

При обработке пакета функция dev_hard_header() пытается добавить заголовок, что приводит к переполнению буфера. Это вызывает повреждение памяти, срабатывание KASAN и, в конечном итоге, панику ядра. Система перезагружается или становится недоступной, что приводит к отказу в обслуживании.

Есть ли публичный эксплойт​


Уязвимость была обнаружена с помощью syzbot (автоматизированный фаззер ядра Linux). В коммитах с исправлением указаны ссылки на отчеты syzbot, что подтверждает наличие Proof of Concept (PoC).

В предоставленных источниках нет информации о публичном эксплойте, используемом в реальных атаках, или о подтвержденной эксплуатации в дикой природе.

Отсутствие сведений о реальной эксплуатации не означает, что эксплойт не существует, но подтвержденный факт атак пока не зафиксирован.

Признаки эксплуатации​


Специфические индикаторы компрометации (IOC) для этой уязвимости не раскрыты в официальных источниках. Однако можно использовать следующие неспецифичные признаки для мониторинга:

  • Паника ядра (kernel panic) с сообщениями, связанными с ipvlan, dev_hard_header или slab-use-after-free.
  • Внезапные перезагрузки системы или потеря сетевой доступности на хостах с настроенными ipvlan-интерфейсами.
  • Аномальные сетевые пакеты, проходящие через ipvlan-интерфейсы, настроенные поверх защищенных каналов (IPsec, MACsec).

Как обнаружить атаку​


Для обнаружения потенциальной эксплуатации уязвимости рекомендуется:

  • Мониторинг журналов ядра (dmesg, journalctl) на наличие сообщений об ошибках KASAN, связанных с ipvlan или slab-use-after-free.
  • Анализ сетевых журналов на предмет аномального трафика через ipvlan-интерфейсы, особенно если они используются в связке с IPsec, MACsec или WireGuard.
  • Проверка конфигурации ipvlan-интерфейсов и их привязки к нижележащим устройствам, требующим дополнительного пространства для заголовков.

Как проверить свою версию​


Для проверки версии ядра и определения, затронуто ли оно уязвимостью, используйте следующие команды:

Bash:
uname -r
uname -a
cat /proc/version

Сравните полученную версию ядра с версиями, содержащими исправление. Исправление было внесено в коммит e16e960d55a40d36bd7c2494cc005e757dc9a1ef и портировано в стабильные ветки. Точные номера версий пакетов для дистрибутивов не указаны в источниках, поэтому рекомендуется сверяться с официальными базами данных безопасности вашего дистрибутива.

Исправление​


Единственным надежным способом устранения уязвимости является обновление ядра Linux до версии, содержащей исправление. Ниже перечислены идентификаторы коммитов, содержащих исправление:

  • Mainline: e16e960d55a40d36bd7c2494cc005e757dc9a1ef
  • Stable 6.15: 5c2ca77212eb38559b0353b8363b7a84f4b019dd
  • Stable 6.12: 5f33188457bbcc1b11ca87084037963c516ed3d9
  • Stable 6.6: af602c4d0ee548da18e2409b4b4da1079625a372
  • Stable 5.15: c0fbe31f6b20ade0465130685859faa5c86fda59
  • Stable 5.10: f3c17ff65f54781cde696e16a6c577615ed735aa

Обновите ядро через пакетный менеджер вашего дистрибутива. После обновления перезагрузите систему, чтобы применить новое ядро.

Временные меры защиты​


Пока обновление ядра не применено, можно рассмотреть следующие временные меры:

  • Отключите ipvlan-интерфейсы, если они не критичны для работы системы.
  • Избегайте использования ipvlan-интерфейсов поверх устройств, требующих дополнительного пространства для заголовков (MACsec, IPsec, WireGuard, туннели).
  • Ограничьте сетевой доступ к ipvlan-интерфейсам, если это возможно, чтобы снизить риск удаленной атаки.

Как проверить устранение уязвимости​


Для проверки, что исправление применено, выполните следующие шаги:

  1. Проверьте версию ядра с помощью uname -r и убедитесь, что она соответствует версии, содержащей исправление.
  2. Проверьте наличие коммита с исправлением в истории ядра (если доступно): git log --oneline | grep e16e960d55a40d36bd7c2494cc005e757dc9a1ef.
  3. Убедитесь, что ipvlan-интерфейсы работают корректно и не вызывают ошибок в журналах ядра.

Вывод​


CVE-2026-74744 представляет собой критическую уязвимость в драйвере ipvlan Linux Kernel, которая может привести к отказу в обслуживании. Уязвимость была обнаружена с помощью syzbot и исправлена в последних версиях ядра. Рекомендуется как можно скорее обновить ядро до версии, содержащей исправление, и проверить конфигурацию ipvlan-интерфейсов для минимизации риска.

Официальные источники​


  1. NVD — CVE-2026-74744
  2. FIRST EPSS — CVE-2026-74744
  3. ipvlan: inherit needed_headroom and needed_tailroom from phy_dev - kernel/git/stable/linux.git - Linux kernel stable tree
  4. ipvlan: inherit needed_headroom and needed_tailroom from phy_dev - kernel/git/stable/linux.git - Linux kernel stable tree
  5. ipvlan: inherit needed_headroom and needed_tailroom from phy_dev - kernel/git/stable/linux.git - Linux kernel stable tree
  6. ipvlan: inherit needed_headroom and needed_tailroom from phy_dev - kernel/git/stable/linux.git - Linux kernel stable tree
  7. ipvlan: inherit needed_headroom and needed_tailroom from phy_dev - kernel/git/stable/linux.git - Linux kernel stable tree
  8. ipvlan: inherit needed_headroom and needed_tailroom from phy_dev - kernel/git/stable/linux.git - Linux kernel stable tree
  9. CVEs — The Linux Kernel documentation

История обновлений статьи​


  • 29.08.2026 — Опубликована первая версия материала.
 
Назад
Верх Низ