CVE-2026-80925 в Linux Kernel: гонка данных при переключении VLAN offload

CVE: CVE-2026-80925
Продукт: Linux Kernel
Дата публикации: 09.09.2026
Критичность: не определена
CVSS: нет данных
EPSS: нет данных; процентиль нет данных
CISA KEV: нет подтверждения в каталоге CISA KEV

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


В Linux Kernel устранена уязвимость, вызывающая сбой ядра (skb_under_panic) при динамическом изменении конфигурации аппаратного offload VLAN. Проблема возникает из-за гонки данных при модификации hard_header_len без блокировки RTNL. Материал описывает механику дефекта, затронутые компоненты и методы проверки исправления.

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


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

  • Тип ошибки: Гонка данных (Data Race) и нарушение целостности буфера.
  • CVSS: Официальная оценка NVD на момент публикации отсутствует.
  • Условия атаки: Требуется наличие VLAN-интерфейсов и возможность переключения флага NETIF_F_HW_VLAN_CTAG_TX.
  • Факт эксплуатации: Публичные отчеты о реальной эксплуатации в дикой природе отсутствуют.
  • EPSS: Данные по вероятности эксплуатации в ближайшие 30 дня не предоставлены.

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


Уязвимость затрагивает ядра Linux, в которых функция vlan_transfer_features() динамически изменяет hard_header_len при переключении offload. Согласно метаданным исправления, проблема существует с версии 2.6.12-rc2.

  • Версии: Все ядра Linux, содержащие код net/8021q/vlan_dev.c с уязвимой логикой.
  • Компоненты: Подсистема 802.1Q VLAN, модули ipvlan и macvlan.
  • Исправление: Включено в стабильные ветки начиная с 3.19, а также в актуальные mainline-сборки.

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


Причина кроется в динамическом изменении поля dev->hard_header_len в функции vlan_transfer_features() при переключении аппаратного offload VLAN. Это изменение выполняется под блокировкой RTNL, однако чтение этого поля в других частях ядра происходит без блокировки.

Такой подход создает гонку данных: верхние слои могут прочитать устаревшее значение hard_header_len и выделить недостаточно места в буфере sk_buff. Когда затем вызывается vlan_dev_hard_header(), происходит выход за границы выделенной области, что приводит к срабатыванию skb_under_panic и падению ядра.

Дополнительной проблемой было несоответствие между выделенным headroom и функцией создания заголовка, так как header_ops не обновлялся синхронно с изменением длины заголовка.

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


Атакующий или администратор, имеющий привилегии, может инициировать переключение флага NETIF_F_HW_VLAN_CTAG_TX на нижележащем сетевом устройстве. Это вызывает выполнение vlan_transfer_features(), которое меняет hard_header_len у VLAN-устройства.

В этот момент, если в других потоках выполняются функции отправки пакетов (например, packet_snd в af_packet.c или ip6_finish_output2), они читают hard_header_len без блокировки RTNL. Если поток читает значение до его изменения, он выделит буфер с недостаточным запасом (headroom).

При последующей попытке вставить VLAN-тег в этот буфер функция vlan_dev_hard_header() обнаруживает, что свободного места недостаточно, и вызывает skb_under_panic. Это приводит к аварийному завершению работы ядра (kernel panic) или сбоев в сетевом стеке.

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


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

  • Наличие настроенных VLAN-интерфейсов (802.1Q) в системе.
  • Возможность изменения флага NETIF_F_HW_VLAN_CTAG_TX или NETIF_F_HW_VLAN_STAG_TX на физическом сетевом интерфейсе.
  • Активная передача трафика через VLAN-интерфейсы в момент переключения флага.
  • Наличие в ядре уязвимой версии кода net/8021q/vlan_dev.c.

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


Сценарий предполагает, что злоумышленник с правами root или администратора сети выполняет команду ip link set <device> hw-vlan offload on (или аналогичную) для переключения режима обработки VLAN.

В этот же момент на системе выполняется интенсивная передача пакетов через VLAN-интерфейсы. Потоки ядра, отвечающие за отправку, читают hard_header_len и выделяют буферы. Из-за гонки данных часть потоков использует старое значение длины заголовка.

При попытке формирования заголовка VLAN в этих буферах происходит переполнение, что вызывает skb_under_panic. Система теряет сетевое соединение и может перезагрузиться, что приводит к отказу в обслуживании критических сервисов.

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


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

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


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

  • Записи в dmesg или системном журнале с сообщениями skb_under_panic.
  • Аварийное завершение работы ядра (kernel panic) с трассировкой, указывающей на vlan_dev_hard_header.
  • Резкое прекращение работы сетевых сервисов на хостах с VLAN-конфигурацией.

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


Для обнаружения потенциального срабатывания уязвимости рекомендуется мониторинг журналов ядра. Ищите сообщения, содержащие skb_under_panic и упоминание функций VLAN-подсистемы.

Также полезно отслеживать изменения конфигурации сетевых интерфейсов. Если на хостах с VLAN-интерфейсами фиксируются частые переключения флага hw-vlan offload в сочетании с сетевыми сбоями, это может указывать на эксплуатацию уязвимости или нестабильную конфигурацию.

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


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

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

Сравните полученную версию с релизами, содержащими коммиты 447cbe95ebb9 и a29f3b884ba5. Если вы используете дистрибутив, проверьте наличие обновлений через пакетный менеджер (например, apt list --upgradable или dnf check-update).

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


Единственным надежным способом устранения уязвимости является обновление ядра Linux до версии, содержащей исправление. Коммит 447cbe95ebb9 был принят в mainline, а a29f3b884ba5 — в стабильные ветки.

  • Обновите ядро до последней доступной стабильной версии.
  • Перезагрузите систему после установки нового ядра, чтобы активировать исправления.
  • Убедитесь, что все зависимые модули (ipvlan, macvlan) загружаются из новой версии ядра.

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


Пока обновление не установлено, можно снизить риск срабатывания, избегая динамического переключения флага NETIF_F_HW_VLAN_CTAG_TX на активных интерфейсах. Если возможно, переведите VLAN-интерфейсы в режим, не требующий аппаратного offload, или отключите его на время обслуживания.

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

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


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

Bash:
uname -r

Проверьте, что в ядре присутствуют изменения в файле net/8021q/vlan_dev.c. Вы можете использовать git log в исходниках ядра (если доступны) или проверить наличие коммитов через grep в конфигурации ядра, если это поддерживается дистрибутивом. В большинстве случаев достаточно убедиться, что установлена последняя стабильная версия, рекомендованная вендором.

Вывод​


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

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

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


  1. NVD — CVE-2026-80925
  2. vlan: fix skb_under_panic and races when toggling HW VLAN offload - kernel/git/stable/linux.git - Linux kernel stable tree
  3. vlan: fix skb_under_panic and races when toggling HW VLAN offload - kernel/git/stable/linux.git - Linux kernel stable tree
  4. CVEs — The Linux Kernel documentation

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


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