CVE-2026-80646 в Linux Kernel: NULL-указатель в IPv6, уязвимые версии и защита

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

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


В ядре Linux обнаружена уязвимость, позволяющая вызвать сбой системы (DoS) через обращение к NULL-указателю в функции статистики IPv6. Исправление уже включено в стабильные ветки ядра. Статья описывает механику ошибки, условия срабатывания и методы проверки актуальности системы.

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


Уязвимость представляет собой риск отказа в обслуживании (DoS) для систем, использующих VRF и IPv6. Атакующий может вызвать панику ядра, отправив пакет на устройство, которое было отключено в момент обработки статистики.

  • Тип ошибки: Обращение к NULL-указателю (NULL pointer dereference) в функции __in6_dev_stats_get().
  • CVSS 3.1: 7.5 (HIGH). Вектор: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H. Оценивается как высокий риск из-за удаленного доступа и отсутствия необходимости в привилегиях.
  • Условия атаки: Требуется наличие конфигурации VRF (Virtual Routing and Forwarding) и активный трафик IPv6.
  • Эксплуатация: Публичные данные о подтвержденной эксплуатации в реальных атаках отсутствуют.
  • EPSS: 0,51% (процентиль 41,34%). Вероятность эксплуатации в ближайшие 30 дней оценивается как низкая.

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


Уязвимость затрагивает ядра Linux, в которых присутствует функция __in6_dev_stats_get() без проверки на NULL после вызова dev_get_by_index_rcu(). Ошибка была введена в коммите e1ae5c2ea478.

Исправление (коммит 507541c2a8eeb76c02bd2511958f73a8cfa3e1bc) было интегрировано в следующие стабильные ветки ядра:

  • 6.15.y
  • 6.12.y
  • 6.6.y
  • 6.1.y
  • 5.15.y
  • 5.10.y

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

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


Причина ошибки кроется в логике обработки статистики IPv6 для устройств, являющихся L3-мастерами (например, VRF).

Функция __in6_dev_stats_get() пытается получить указатель на исходное физическое устройство, используя индекс из заголовка пакета (inet6_iif(skb)). Для этого вызывается dev_get_by_index_rcu(). Если исходное физическое устройство было отключено (unregistered) в момент обработки пакета, эта функция возвращает NULL.

В исходном коде отсутствовала проверка возвращаемого значения. Функция передавала NULL в __in6_dev_get(), что приводило к обращению к нулевому указателю и последующему падению ядра.

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


Атакующий направляет IPv6-пакет (например, ICMPv6) на интерфейс, который является частью VRF-конфигурации.

При обработке пакета ядро вызывает функцию статистики. Если в этот момент физическое устройство, ассоциированное с VRF, было отключено администратором или из-за сбоя, dev_get_by_index_rcu() возвращает NULL. Без проверки на NULL ядро пытается прочитать память по нулевому адресу, что вызывает kernel panic и перезагрузку системы.

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


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

  • Система использует VRF (Virtual Routing and Forwarding) для сегментации сети.
  • На интерфейсе VRF активен трафик IPv6.
  • Физическое устройство, связанное с VRF, находится в состоянии отключения (unregistered) в момент обработки пакета.
  • Атакующий имеет сетевой доступ для отправки IPv6-пакетов на целевой интерфейс.

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


Сценарий атаки предполагает, что атакующий знает о наличии VRF на целевой системе. Он отправляет IPv6-пакет на интерфейс VRF. В момент обработки пакета администратор отключает физический порт или происходит сбой, ведущий к deregister устройства.

Ядро пытается обновить статистику ICMPv6 для исходного устройства. Функция dev_get_by_index_rcu() не находит устройство и возвращает NULL. Из-за отсутствия проверки код продолжает выполнение, обращаясь к NULL. Это приводит к срабатыванию обработчика исключений и остановке работы ядра.

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


Публичные данные о готовых эксплоитах или подтвержденной эксплуатации в реальных атаках отсутствуют. Уязвимость была обнаружена инструментом Sashiko и исправлена в ядре. Отсутствие сведений о PoC не означает, что эксплойт невозможен, но текущая вероятность активной эксплуатации оценивается как низкая.

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


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

  • Внезапные перезагрузки системы или kernel panic с сообщениями об обращении к NULL-указателю в стеке ipv6.
  • Аномальные всплески ICMPv6-трафика на интерфейсах VRF.
  • Журналы, фиксирующие отключение физических устройств в момент сбоев.

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


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

  • Мониторинг журналов ядра (dmesg, journalctl) на наличие сообщений BUG: unable to handle page fault или kernel panic в контексте функций ipv6.
  • Анализ сетевых логов на предмет аномального IPv6-трафика, направленного на интерфейсы VRF.
  • Проверка стабильности систем с VRF-конфигурациями после обновлений ядра.

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


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

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

Сравните полученную версию с перечнем исправленных веток (6.15.y, 6.12.y, 6.6.y, 6.1.y, 5.15.y, 5.10.y). Если ваша версия не входит в эти ветки или не содержит патч 507541c2a8eeb76c02bd2511958f73a8cfa3e1bc, система уязвима.

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


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

  • Для дистрибутивов с автоматическим обновлением ядра: выполните стандартную процедуру обновления пакетов.
  • Для кастомных сборок: пересоберите ядро с включением коммита 507541c2a8eeb76c02bd2511958f73a8cfa3e1bc.
  • Проверьте, что после обновления функция __in6_dev_stats_get() содержит проверку if (!dev) return NULL;.

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


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

  • Ограничьте доступ к интерфейсам VRF, если это позволяет бизнес-процесс.
  • Отключите IPv6 на интерфейсах VRF, если он не используется.
  • Избегайте частого отключения физических устройств, связанных с VRF, во время активного трафика.
  • Настройте мониторинг для быстрого обнаружения сбоев.

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


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

  1. Убедитесь, что версия ядра соответствует одной из исправленных веток.
  2. Проверьте наличие коммита 507541c2a8eeb76c02bd2511958f73a8cfa3e1bc в истории ядра (если доступно).
  3. Проведите нагрузочное тестирование с VRF и IPv6-трафиком, имитируя отключение устройств, чтобы убедиться в отсутствии паник.

Вывод​


CVE-2026-80646 представляет собой серьезный риск для систем, использующих VRF и IPv6. Уязвимость позволяет вызвать отказ в обслуживании через обращение к NULL-указателю.

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

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


  1. NVD — CVE-2026-80646
  2. FIRST EPSS — CVE-2026-80646
  3. ipv6: guard against possible NULL deref in __in6_dev_stats_get() - kernel/git/stable/linux.git - Linux kernel stable tree
  4. ipv6: guard against possible NULL deref in __in6_dev_stats_get() - kernel/git/stable/linux.git - Linux kernel stable tree
  5. ipv6: guard against possible NULL deref in __in6_dev_stats_get() - kernel/git/stable/linux.git - Linux kernel stable tree
  6. ipv6: guard against possible NULL deref in __in6_dev_stats_get() - kernel/git/stable/linux.git - Linux kernel stable tree
  7. ipv6: guard against possible NULL deref in __in6_dev_stats_get() - kernel/git/stable/linux.git - Linux kernel stable tree
  8. ipv6: guard against possible NULL deref in __in6_dev_stats_get() - kernel/git/stable/linux.git - Linux kernel stable tree
  9. ipv6: guard against possible NULL deref in __in6_dev_stats_get() - kernel/git/stable/linux.git - Linux kernel stable tree
  10. ipv6: guard against possible NULL deref in __in6_dev_stats_get() - kernel/git/stable/linux.git - Linux kernel stable tree

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


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