CVE: CVE-2026-74579
Продукт: Linux Kernel
Дата публикации: 17.08.2026
Критичность: HIGH
CVSS: 7.1 (3.1)
EPSS: 0,12%; процентиль 2,03%
CISA KEV: нет подтверждения в каталоге CISA KEV
Краткое описание
В ядре Linux обнаружена ошибка в функции nft_payload_offload_mask() модуля netfilter. При обработке частичных совпадений полей заголовков (например, фрагментов IPv6-адресов) формируется некорректная маска offload. Это приводит к неопределённому поведению (shift-out-of-bounds) и расширению области совпадения правил nftables, что нарушает логику фильтрации трафика. Статья описывает механику ошибки, условия её проявления и методы проверки исправления.
Основные характеристики
Риск связан с нарушением логики построения масок в nftables при offload, что может привести к некорректной фильтрации пакетов и неопределённому поведению ядра.
- Тип ошибки: Неопределённое поведение (Undefined Behavior) и логическая ошибка в построении маски.
- CVSS 3.1: 7.1 (HIGH). Вектор:
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H. Оценивается как локальная атака с низким порогом сложности, требующая прав пользователя, с высоким влиянием на целостность и доступность.
- Условия атаки: Локальный доступ, отсутствие необходимости в пользовательском взаимодействии.
- Факт эксплуатации: В каталоге CISA KEV не подтверждена.
- EPSS: 0,12% (процентиль 2,03%). Вероятность эксплуатации в ближайшие 30 дней оценивается как низкая.
Какие продукты и версии затронуты
Уязвимость затрагивает ядро Linux, в котором реализован модуль netfilter (nftables) с поддержкой offload.
- Компонент:
net/netfilter/nft_payload.c.
- Функция:
nft_payload_offload_mask().
- Версии: Точные диапазоны версий ядра, в которых присутствует уязвимость, не раскрыты в переданных источниках. Ошибка была введена в коммите
a5d45bc0dc50и исправлена в коммите39e88f28fb32bf02bd4b525c24c842c9cff5663d.
Для определения подверженности системы необходимо сверить версию ядра с наличием исправляющего коммита в истории сборки.
Причина уязвимости
Причина ошибки заключается в некорректной логике построения маски совпадения (match mask) для частичных полей заголовков при offload.
Функция
nft_payload_offload_mask() принимает параметры priv_len (длина совпадающей части) и field_len (полная длина поля). При попытке сместить биты для создания маски используется выражение 1 << (delta * BITS_PER_BYTE), где delta может быть большим числом. Для 32-битного типа int сдвиг на 120 и более бит является неопределённым поведением (undefined behavior).Дополнительная проблема: алгоритм обрезает маску только на одном слове (word). Если
priv_len является кратным 4, обрезка пропускается полностью, а остальные слова маски остаются заполненными 0xffffffff. В результате маска покрывает больше байтов, чем должно соответствовать правилу, что нарушает точность фильтрации.Как работает атака
Атакующий с локальным доступом и правами на создание правил nftables может сформировать правило, использующее частичное совпадение поля заголовка (например, 1 байт из 16-байтного IPv6-адреса) с включённым offload.
При компиляции такого правила ядро вызывает
nft_payload_offload_mask(). Из-за неопределённого поведения при сдвиге битов и некорректной обрезки маски, offload-движок получает маску, которая совпадает с большим диапазоном значений, чем задано в правиле. Это приводит к тому, что пакеты, которые должны были быть отфильтрованы, проходят через правило, или наоборот. В худшем случае неопределённое поведение может привести к сбою ядра или непредсказуемому состоянию сети.Условия успешной эксплуатации
Для успешной эксплуатации уязвимости необходимо:
- Локальный доступ к системе.
- Права на создание или модификацию правил nftables (обычно root или пользователь с CAP_NET_ADMIN).
- Наличие в ядре поддержки offload для nftables.
- Создание правила с частичным совпадением поля заголовка, вызывающим некорректный сдвиг битов (например,
field_len = 16,priv_len = 1).
Возможный сценарий атаки
Администратор или атакующий создаёт правило nftables для фильтрации IPv6-трафика, используя частичное совпадение адреса. Правило компилируется в offload-режим. При обработке первого пакета, соответствующего этому правилу, ядро формирует некорректную маску. В результате фильтр начинает пропускать пакеты, которые должны были быть заблокированы, или блокирует легитимный трафик. Это нарушает сетевую политику безопасности и может привести к компрометации или отказу в обслуживании.
Есть ли публичный эксплойт
Публичный эксплойт или PoC в доступных источниках не указан. Ошибка была обнаружена автономной системой безопасности Microsoft ([email protected]) и исправлена в ядре. Отсутствие сведений о публичном эксплойте не означает, что он не существует, но в официальных базах данных (NVD, CISA KEV) подтверждённых фактов эксплуатации в реальных атаках на данный момент нет.
Признаки эксплуатации
Специфичных индикаторов компрометации (IOC) для этой уязвимости в источниках не приведено. Общие неспецифичные точки контроля:
- Аномальные правила nftables с частичными совпадениями полей заголовков.
- Сообщения UBSAN в логах ядра (dmesg) о shift-out-of-bounds в
net/netfilter/nft_payload.c.
- Непредсказуемое поведение сетевых фильтров (пропуск/блокировка нецелевого трафика).
Как обнаружить атаку
Для обнаружения признаков эксплуатации или некорректной работы nftables offload:
- Проверка логов ядра на наличие сообщений UBSAN:
Bash:dmesg | grep -i "shift-out-of-bounds" dmesg | grep -i "nft_payload" - Анализ правил nftables на наличие частичных совпадений полей, которые могут вызывать некорректное формирование маски.
- Мониторинг сетевой активности на аномальные паттерны, не соответствующие заданной политике фильтрации.
Как проверить свою версию
Для проверки версии ядра и наличия исправления:
Bash:
uname -r
uname -a
cat /proc/version
Сверьте полученную версию с официальными релизами ядра Linux. Убедитесь, что в истории сборки ядра присутствует коммит
39e88f28fb32bf02bd4b525c24c842c9cff5663d или более поздний. Если вы используете дистрибутив, проверьте наличие обновлений в репозитории пакетов.Исправление
Единственный подтверждённый способ устранения уязвимости — обновление ядра Linux до версии, содержащей исправление.
- Исправляющий коммит:
39e88f28fb32bf02bd4b525c24c842c9cff5663d.
- Файл:
net/netfilter/nft_payload.c.
Обновите ядро через штатные средства дистрибутива. После обновления перезагрузите систему, чтобы загрузить новое ядро. Проверьте, что offload для nftables работает корректно.
Временные меры защиты
Пока обновление ядра не установлено, можно временно отключить offload для nftables, если это поддерживается вашей конфигурацией. Это заставит ядро обрабатывать правила в программном режиме, где логика построения маски может отличаться. Однако это снизит производительность сетевой фильтрации. Также можно ограничить создание правил nftables с частичными совпадениями полей заголовков, если это возможно в вашей политике безопасности.
Как проверить устранение уязвимости
После обновления ядра проверьте, что уязвимость устранена:
- Убедитесь, что загружено новое ядро:
Bash:uname -r - Проверьте, что в ядре присутствует исправляющий коммит (через
git logв исходниках ядра, если вы компилируете его самостоятельно, или через документацию дистрибутива).
- Создайте тестовое правило nftables с частичным совпадением поля заголовка и убедитесь, что оно работает корректно, без сообщений UBSAN в логах.
Вывод
CVE-2026-74579 представляет собой уязвимость в модуле nftables ядра Linux, связанную с некорректным построением масок при offload. Она может привести к нарушению логики фильтрации трафика и неопределённому поведению ядра. Администраторам рекомендуется обновить ядро до версии, содержащей исправление, и проверить корректность работы сетевых фильтров после обновления.
Официальные источники
- NVD — CVE-2026-74579
- FIRST EPSS — CVE-2026-74579
- netfilter: nft_payload: fix mask build for partial field offload - kernel/git/stable/linux.git - Linux kernel stable tree
- netfilter: nft_payload: fix mask build for partial field offload - kernel/git/stable/linux.git - Linux kernel stable tree
- netfilter: nft_payload: fix mask build for partial field offload - kernel/git/stable/linux.git - Linux kernel stable tree
- netfilter: nft_payload: fix mask build for partial field offload - kernel/git/stable/linux.git - Linux kernel stable tree
- netfilter: nft_payload: fix mask build for partial field offload - kernel/git/stable/linux.git - Linux kernel stable tree
- netfilter: nft_payload: fix mask build for partial field offload - kernel/git/stable/linux.git - Linux kernel stable tree
- netfilter: nft_payload: fix mask build for partial field offload - kernel/git/stable/linux.git - Linux kernel stable tree
- netfilter: nft_payload: fix mask build for partial field offload - kernel/git/stable/linux.git - Linux kernel stable tree
История обновлений статьи
- 18.08.2026 — Опубликована первая версия материала.
- 20.08.2026 — Уточнены сведения об уязвимых версиях, оценке риска или исправлении.
- 26.08.2026 — Уточнены сведения об уязвимых версиях, оценке риска или исправлении.
Последнее редактирование:
