CVE-2026-80731 в Linux Kernel: OOB write в dev_validate_header и порядок устранения

CVE: CVE-2026-80731
Продукт: Linux Kernel
Дата публикации: 03.09.2026
Критичность: HIGH
CVSS: 7.8 (3.1)
EPSS: 0,18%; процентиль 7,56%
CISA KEV: нет подтверждения в каталоге CISA KEV

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


В сетевом стеке ядра Linux обнаружена ошибка, позволяющая локальному процессу с правом CAP_SYS_RAWIO вызвать запись за границами буфера. Дефект связан с несогласованностью между размером выделенного headroom и актуальным значением dev->hard_header_len при валидации заголовков L2. Материал описывает механику срабатывания, условия эксплуатации и методы проверки исправления.

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


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

  • Тип ошибки: Out-of-bounds write в функции dev_validate_header().
  • CVSS 3.1: 7.8 (HIGH). Вектор: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H.
  • Условия: Локальный доступ, наличие CAP_SYS_RAWIO, использование протоколов с переменной длиной L2-заголовка.
  • Эксплуатация: Публичные PoC или подтвержденные атаки в источниках не указаны.
  • EPSS: 0,18% (процентиль 7,56%).

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


Уязвимость затрагивает ядра Linux, в которых функция dev_validate_header() содержит ветку обработки CAP_SYS_RAWIO с вызовом memset. Точные номера версий, в которых ошибка присутствует, в переданных источниках не детализированы.

Исправление внесено в следующие ветки (коммиты, содержащие патч):

  • 3b9a324e646d3657a8d9806dfbfe4f3e4066e882 (mainline)
  • 74e035f07f53feca09e2352e77fccb09cad5e208 (stable)
  • 8fc9816404166a90ed8d544dc52482fafffb6d9f (stable)
  • 99df6b7a713f96eda206680d100b76e15f9d9b69 (stable)
  • b0f92a5731dc82556a9ae005cc35f71ab136307b (stable)
  • dbb30dc943a93e083f1e531bfdc6779e57de40d0 (stable)
  • fa6d98dd925e72fc028b26a0cbbff9d2f0601ff6 (stable)

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

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


Причина ошибки кроется в несогласованности данных при валидации заголовков L2. Функция dev_validate_header() использует текущее значение dev->hard_header_len для определения размера буфера, который нужно заполнить нулями.

Однако headroom в структуре sk_buff выделяется на основе значения hard_header_len, прочитанного ранее. Если сетевой интерфейс реконфигурируется и hard_header_len увеличивается до момента вызова валидации, memset попытается записать данные за пределы выделенного headroom, что приводит к out-of-bounds write.

В некоторых путях SOCK_RAW эта ошибка маскировалась тем, что skb_push() срабатывал раньше и вызывал skb_under_panic(). Удаление ветки CAP_SYS_RAWIO устраняет саму возможность такой записи.

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


Атакующий должен иметь локальный доступ и право CAP_SYS_RAWIO. Механизм атаки строится на гонке (race condition) между отправкой пакета и изменением конфигурации сетевого интерфейса.

  • Атакующий открывает сокет и начинает отправку пакета через протокол с переменной длиной заголовка L2.
  • В момент, когда ядро выделяет headroom для sk_buff, оно использует старое значение hard_header_len.
  • До вызова dev_validate_header() атакующий (или другая часть системы) изменяет конфигурацию интерфейса, увеличивая hard_header_len.
  • При валидации dev_validate_header() читает новое, увеличенное значение hard_header_len и вызывает memset с размером, превышающим выделенный headroom.
  • Происходит запись за границами буфера, что может привести к повреждению памяти ядра.

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


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

  • Локальный доступ к системе.
  • Наличие у процесса права CAP_SYS_RAWIO.
  • Использование сетевого протокола с переменной длиной заголовка L2 (variable length L2 protocol).
  • Возможность одновременного изменения конфигурации сетевого интерфейса (увеличения hard_header_len) в момент отправки пакета.
  • Отсутствие в ядре патча, удаляющего ветку CAP_SYS_RAWIO из dev_validate_header().

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


Сценарий атаки предполагает работу в среде, где атакующий контролирует процесс с CAP_SYS_RAWIO и имеет возможность влиять на конфигурацию сетевого интерфейса.

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

Когда ядро переходит к валидации заголовка, оно обнаруживает несоответствие между выделенным headroom и текущим hard_header_len. Функция dev_validate_header() выполняет memset, выходя за границы буфера.

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

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


В предоставленных источниках отсутствуют сведения о публичных PoC, готовых эксплоитах или подтвержденных случаях эксплуатации CVE-2026-80731 в реальных атаках.

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

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


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

  • Записи в dmesg или syslog о skb_under_panic или BUG: unable to handle kernel paging request в контексте сетевых функций.
  • Аномальные изменения конфигурации сетевых интерфейсов (например, через ip link set) в момент интенсивной отправки raw-пакетов.
  • Необъяснимые сбои ядра (kernel panic) при работе с сетевыми сокетами, имеющими CAP_SYS_RAWIO.

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


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

  • Мониторинг журналов ядра (dmesg, journalctl -k) на наличие сообщений об ошибках памяти в сетевом стеке.
  • Контроль за процессами, имеющими право CAP_SYS_RAWIO, и их сетевую активность.
  • Использование инструментов аудита (auditd) для отслеживания вызовов ioctl на сетевых интерфейсах, изменяющих параметры заголовков.
  • Проверка целостности ядра и наличие патчей через средства управления обновлениями.

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


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

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

Полученную версию ядра необходимо сверить с официальными списками исправленных версий вашего дистрибутива Linux. Если ваша версия содержит коммиты, перечисленные в разделе «Какие продукты и версии затронуты», уязвимость исправлена.

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


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

  • Обновите ядро до последней доступной версии для вашего дистрибутива.
  • Убедитесь, что в ядре присутствует коммит 3b9a324e646d3657a8d9806dfbfe4f3e4066e882 или его backport в stable-ветки.
  • После обновления перезагрузите систему для применения нового ядра.

Не используйте устаревшие ядра, не прошедшие проверку на наличие данного патча.

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


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

  • Ограничьте выдачу права CAP_SYS_RAWIO только тем процессам, которым это право действительно необходимо.
  • Избегайте одновременного изменения конфигурации сетевых интерфейсов (увеличения hard_header_len) и отправки raw-пакетов.
  • Используйте сетевые протоколы с фиксированной длиной заголовка L2, если это возможно в вашей инфраструктуре.
  • Рассмотрите возможность изоляции процессов, работающих с raw-сокетами, в контейнеры или песочницы с ограниченным набором capabilities.

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


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

  • Проверьте версию ядра: uname -r.
  • Убедитесь, что версия соответствует списку исправленных релизов вашего дистрибутива.
  • Проверьте наличие патча в исходном коде ядра (если доступно): git log --all --oneline | grep 3b9a324e646d3657a8d9806dfbfe4f3e4066e882.
  • Проведите функциональное тестирование сетевых интерфейсов, чтобы убедиться в отсутствии регрессий.

Если патч присутствует, уязвимость CVE-2026-80731 устранена.

Вывод​


CVE-2026-80731 представляет собой серьезную уязвимость в сетевом стеке Linux, позволяющую локальному атакующему с CAP_SYS_RAWIO вызвать out-of-bounds write. Механизм атаки основан на гонке между выделением headroom и валидацией заголовка.

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

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


  1. NVD — CVE-2026-80731
  2. FIRST EPSS — CVE-2026-80731
  3. net: remove CAP_SYS_RAWIO zero-padding in dev_validate_header - kernel/git/stable/linux.git - Linux kernel stable tree
  4. Revert "net: validate variable length ll headers" - kernel/git/stable/linux.git - Linux kernel stable tree
  5. net: remove CAP_SYS_RAWIO zero-padding in dev_validate_header - kernel/git/stable/linux.git - Linux kernel stable tree
  6. net: remove CAP_SYS_RAWIO zero-padding in dev_validate_header - kernel/git/stable/linux.git - Linux kernel stable tree
  7. net: remove CAP_SYS_RAWIO zero-padding in dev_validate_header - kernel/git/stable/linux.git - Linux kernel stable tree
  8. net: remove CAP_SYS_RAWIO zero-padding in dev_validate_header - kernel/git/stable/linux.git - Linux kernel stable tree
  9. net: remove CAP_SYS_RAWIO zero-padding in dev_validate_header - kernel/git/stable/linux.git - Linux kernel stable tree
  10. net: remove CAP_SYS_RAWIO zero-padding in dev_validate_header - kernel/git/stable/linux.git - Linux kernel stable tree

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


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