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 и валидацией заголовка.Единственным надежным способом защиты является обновление ядра до версии, содержащей соответствующий патч. Администраторам рекомендуется проверить свои системы на наличие уязвимости и своевременно применить обновления.
Официальные источники
- NVD — CVE-2026-80731
- FIRST EPSS — CVE-2026-80731
- net: remove CAP_SYS_RAWIO zero-padding in dev_validate_header - kernel/git/stable/linux.git - Linux kernel stable tree
- Revert "net: validate variable length ll headers" - kernel/git/stable/linux.git - Linux kernel stable tree
- net: remove CAP_SYS_RAWIO zero-padding in dev_validate_header - kernel/git/stable/linux.git - Linux kernel stable tree
- net: remove CAP_SYS_RAWIO zero-padding in dev_validate_header - kernel/git/stable/linux.git - Linux kernel stable tree
- net: remove CAP_SYS_RAWIO zero-padding in dev_validate_header - kernel/git/stable/linux.git - Linux kernel stable tree
- net: remove CAP_SYS_RAWIO zero-padding in dev_validate_header - kernel/git/stable/linux.git - Linux kernel stable tree
- net: remove CAP_SYS_RAWIO zero-padding in dev_validate_header - kernel/git/stable/linux.git - Linux kernel stable tree
- net: remove CAP_SYS_RAWIO zero-padding in dev_validate_header - kernel/git/stable/linux.git - Linux kernel stable tree
История обновлений статьи
- 05.09.2026 — Опубликована первая версия материала.
