CVE-2026-80590 в Linux Kernel: паника ядра при реконструкции IP-фрагментов с GSO-метаданными

CVE: CVE-2026-80590
Продукт: Linux Kernel
Дата публикации: 28.08.2026
Критичность: HIGH
CVSS: 8.6 (3.1)
EPSS: 0,59%; процентиль 45,68%
CISA KEV: нет подтверждения в каталоге CISA KEV

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


В стеке обработки сетевых пакетов ядра Linux обнаружена логическая ошибка, позволяющая вызвать панику ядра (kernel panic). Атакующий с минимальными привилегиями может отправить IP-фрагменты, несущие некорректные метаданные GSO, через TUN/TAP или AF_PACKET. При реконструкции пакет сохраняет эти метаданные, что приводит к срабатыванию внутренних проверок в функции skb_segment().

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


Уязвимость позволяет неуправляемому пользователю вызвать отказ в обслуживании (DoS) на уровне ядра, заставляя систему перезагрузиться. Риск связан с обработкой сетевых пакетов, где нарушается инвариант: IP-фрагменты не должны нести метаданные GSO.

  • CVSS: 8.6 (HIGH). Вектор: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:N/A:H. Высокая оценка обусловлена удаленным вектором и полным отказом в обслуживании.
  • EPSS: 0,59% (процентиль 45,68%). Вероятность эксплуатации в ближайшие 30 дня оценивается как низкая.
  • Тип атаки: Denial of Service (DoS) через панику ядра.
  • Статус в CISA KEV: Не подтверждено наличие в каталоге.
  • Публичный PoC: Описан в коммитах ядра, готовый эксплойт-код в источниках не опубликован.

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


Уязвимость затрагивает ядро Linux, начиная с версии, содержащей commit f43798c27684 ("tun: Allow GSO using virtio_net_hdr"). Точные номера версий дистрибутивов в предоставленных источниках не указаны.

  • Linux Kernel: Все версии, где функция inet_frag_queue_insert() не сбрасывает GSO-метаданные перед добавлением фрагмента в очередь.
  • Виртуализация: Гостевые системы, где VMM пробрасывает virtio_net_hdr в tap-интерфейсы.
  • Контейнеризация: Системы, где контейнеры имеют доступ к созданию TUN/TAP устройств или используют AF_PACKET с PACKET_VNET_HDR.

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


Причина ошибки — отсутствие сброса полей GSO (gso_size, gso_type, gso_segs) в структуре sk_buff при добавлении IP-фрагмента в очередь реконструкции. Функция inet_frag_queue_insert() не нормализовала эти метаданные.

При завершении реконструкции (inet_frag_reasm_finish) первый фрагмент становится заголовком итогового пакета, сохраняя свои shinfo (socket buffer info). Остальные фрагменты добавляются в frag_list без проверки их структуры. В результате реконструированный пакет помечается как GSO, хотя по определению IP-фрагменты не могут быть GSO-пакетами.

Последующая обработка таким пакетом в функции skb_segment() нарушает предположения о структуре данных (GRO-shaped input), что вызывает срабатывание BUG_ON() и панику ядра.

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


Атакующий отправляет IP-фрагменты через TUN/TAP интерфейс или с использованием AF_PACKET с флагом PACKET_VNET_HDR. В заголовке virtio_net_hdr устанавливаются значения, помечающие фрагмент как GSO.

Ядро принимает фрагменты и помещает их в очередь реконструкции. При завершении реконструкции первый фрагмент становится головой пакета, а остальные — элементами списка frag_list. Пакет сохраняет метку GSO.

При дальнейшей обработке (например, в udp_rcv_segment или ip_finish_output_gso) пакет передается в skb_segment(). Функция ожидает, что frag_list имеет определенную структуру (GRO), но получает данные, сформированные из произвольных фрагментов. Это приводит к срабатыванию внутренних проверок и панике ядра.

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


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

  • Доступ к созданию или использованию TUN/TAP интерфейсов в своей пользовательской среде (user namespace).
  • Возможность отправки IP-фрагментов с заголовком virtio_net_hdr.
  • Наличие в ядре уязвимой версии кода обработки фрагментов.
  • Отсутствие дополнительных механизмов защиты, блокирующих передачу GSO-метаданных на уровне VMM или сетевых фильтров.

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


Атакующий создает пользовательское пространство (user namespace) и виртуальный сетевой интерфейс (TUN/TAP). Через этот интерфейс он отправляет два IP-фрагмента, в заголовках которых через virtio_net_hdr заданы параметры GSO.

Ядро Linux принимает пакеты и начинает процесс реконструкции IP-пакета. После сборки полного пакета он попадает в стек обработки UDP или IP. При попытке сегментации пакета функция skb_segment() обнаруживает несоответствие структуры данных ожиданиям и вызывает BUG_ON().

Ядро переходит в состояние паники (kernel panic), что приводит к немедленному завершению работы системы. Все активные сессии и процессы прерываются, требуется перезагрузка для восстановления работоспособности.

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


В описании CVE и коммитах ядра Linux предоставлен технический анализ и описание воспроизведения (reproducer). Указано, что два записи в tap-интерфейс от неуправляемого пользователя достаточно для вызова паники.

Публичный PoC (Proof of Concept) описан в тексте коммита, но готовый эксплойт-код или подтвержденная эксплуатация в реальных атаках в предоставленных источниках не указаны. Отсутствие сведений о массовом использовании не означает, что эксплойт не существует, но подтвержденных данных о его распространении нет.

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


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

  • Записи в системном журнале (syslog, journalctl) о панике ядра с упоминанием skb_segment или net/core/skbuff.c.
  • Необъяснимые перезагрузки серверов, особенно тех, где активно используются виртуальные сетевые интерфейсы.
  • Аномальная активность процессов, создающих TUN/TAP устройства в изолированных пространствах.

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


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

  • Мониторинг системных журналов на наличие сообщений о панике ядра (kernel panic) с трассировкой стека, включающей skb_segment.
  • Контроль создания TUN/TAP устройств в контейнерах и виртуальных машинах.
  • Анализ сетевых пакетов на наличие аномальных заголовков virtio_net_hdr с GSO-флагами в IP-фрагментах (если возможно на уровне сетевых фильтров).

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


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

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

Сравните полученную версию с релизами, содержащими commit d5dc1e69fd7258ea605c9952e5d5947539159ae3 или его порты в stable-ветки. Если версия ядра старше даты публикации исправления (28.08.2026) и не содержит патча, система уязвима.

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


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

  • Обновите ядро до последней доступной версии в вашем дистрибутиве.
  • Убедитесь, что в ядре присутствует commit d5dc1e69fd7258ea605c9952e5d5947539159ae3 или его эквивалент в stable-ветках.
  • Перезагрузите систему после обновления ядра, чтобы изменения вступили в силу.

Исправление добавляет вызов skb_gso_reset(skb) в функцию inet_frag_queue_insert(), что сбрасывает GSO-метаданные перед добавлением фрагмента в очередь реконструкции.

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


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

  • Ограничьте доступ к созданию TUN/TAP устройств для неуправляемых пользователей и контейнеров.
  • Отключите проброс virtio_net_hdr в виртуальных машинах, если это не критично для производительности.
  • Используйте сетевые фильтры (iptables/nftables) для блокировки подозрительных IP-фрагментов, если возможно идентифицировать их.
  • Изолируйте критические системы от сетей, где могут находиться потенциальные атакующие с доступом к виртуальным интерфейсам.

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


После обновления ядра проверьте наличие исправления:

Bash:
uname -r

Убедитесь, что версия ядра соответствует релизу с патчем. Для дополнительной проверки можно использовать git log в исходниках ядра (если доступно) или проверить наличие строки skb_gso_reset в функции inet_frag_queue_insert в исходном коде ядра.

Также можно провести функциональное тестирование: создать TUN/TAP интерфейс и отправить тестовые IP-фрагменты с GSO-метаданными. Если ядро не переходит в состояние паники, исправление работает.

Вывод​


CVE-2026-80590 представляет собой серьезную угрозу для систем с доступом к виртуальным сетевым интерфейсам. Уязвимость позволяет вызвать панику ядра с минимальными привилегиями.

Администраторам необходимо срочно обновить ядро Linux до версии с исправлением. Временные меры по ограничению доступа к TUN/TAP могут снизить риск, но не заменяют патч.

Мониторинг журналов на признаки паники ядра поможет обнаружить попытки эксплуатации.

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


  1. NVD — CVE-2026-80590
  2. FIRST EPSS — CVE-2026-80590
  3. inet: frags: strip GSO state from fragments before reassembly - kernel/git/stable/linux.git - Linux kernel stable tree
  4. inet: frags: strip GSO state from fragments before reassembly - kernel/git/stable/linux.git - Linux kernel stable tree
  5. inet: frags: strip GSO state from fragments before reassembly - kernel/git/stable/linux.git - Linux kernel stable tree
  6. inet: frags: strip GSO state from fragments before reassembly - kernel/git/stable/linux.git - Linux kernel stable tree
  7. inet: frags: strip GSO state from fragments before reassembly - kernel/git/stable/linux.git - Linux kernel stable tree
  8. inet: frags: strip GSO state from fragments before reassembly - kernel/git/stable/linux.git - Linux kernel stable tree
  9. inet: frags: strip GSO state from fragments before reassembly - kernel/git/stable/linux.git - Linux kernel stable tree
  10. inet: frags: strip GSO state from fragments before reassembly - kernel/git/stable/linux.git - Linux kernel stable tree

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


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