CVE-2026-74579 в Linux Kernel: ошибка маскирования в netfilter

CVE: CVE-2026-74579
Продукт: Linux Kernel
Дата публикации: 17.08.2026
Критичность: не определена
CVSS: нет данных
EPSS: 0,16%; процентиль 5,37%
CISA KEV: нет подтверждения в каталоге CISA KEV

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


Уязвимость CVE-2026-74579 затрагивает подсистему netfilter ядра Linux, а именно модуль nft_payload. Ошибка возникает при построении маски для частичного сопоставления полей заголовков (например, IPv6) при offload-обработке. Неправильный расчет сдвига приводит к неопределенному поведению (shift-out-of-bounds) и формированию маски, покрывающей больше байтов, чем задумано правилом. Это может нарушить логику фильтрации трафика.

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


Ошибка локализована в функции nft_payload_offload_mask() в файле net/netfilter/nft_payload.c. Проблема проявляется при обработке выражений payload, которые охватывают только часть поля заголовка. При попытке вычислить маску для частичного совпадения (например, 1 байт из 16 байт IPv6-адреса) код выполняет сдвиг 1 << 120 над 32-битным целым, что является неопределенным поведением в C. Кроме того, алгоритм обрезки маски работает некорректно: он очищает только одно слово, оставляя остальные заполненными 0xffffffff, либо пропускает обрезку, если длина приватной части кратна 4. В результате маска охватывает байты за пределами целевого поля.

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


Linux Kernel. Уязвимость присутствует в версиях ядра, содержащих коммит a5d45bc0dc50 ("netfilter: nftables_offload: build mask based from the matching bytes") и не имеющих исправления 39e88f28fb32bf02bd4b525c24c842c9cff5663d. Точные версии дистрибутивов зависят от того, какие ветки stable были собраны в конкретные релизы. Исправление было портировано в несколько веток stable.

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


Корневая причина — логическая ошибка в алгоритме построения битовой маски для offload-сопоставления. Функция nft_payload_offload_mask() использует арифметический сдвиг для вычисления маски остатка. Когда длина поля (field_len) значительно превышает длину проверяемой части (priv_len), например, при частичном совпадении IPv6-адреса, вычисляемый сдвиг превышает размер типа int (32 бита). Это вызывает undefined behavior (UBSAN: shift-out-of-bounds). Дополнительно, логика очистки неиспользуемых слов маски неполная: она не обнуляет все слова за пределами priv_len, что приводит к «перемаскированию» (over-masking) — маска включает байты, которые не должны участвовать в сравнении.

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


Механика уязвимости связана с некорректной работой сетевого фильтра nftables при использовании offload-функций (перенос обработки на сетевую карту или аппаратный ускоритель). При создании правила, которое проверяет только часть поля заголовка (например, первые байты IPv6-адреса), ядро строит маску для этого сравнения. Из-за ошибки в коде маска получается слишком широкой: она включает байты, следующие за целевым полем. Это означает, что правило может случайно совпадать с трафиком, который не должен попадать под его действие, или, наоборот, пропускать трафик, который должен быть отфильтрован, если логика сравнения зависит от нулевых значений в «лишних» байтах. В случае срабатывания UBSAN (UndefinedBehaviorSanitizer) ядро может выдать ошибку и, в худшем случае, привести к нестабильности модуля или падению процесса, хотя в production-сборках UBSAN обычно отключен.

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


Для проявления эффекта требуется: 1. Использование nftables с поддержкой offload (hw offload). 2. Создание правила, которое использует выражение payload для частичного сопоставления поля заголовка (например, IPv6 адрес), где длина проверяемой части (priv_len) меньше длины всего поля (field_len) и не является кратной 4 (или приводит к специфическим условиям обрезки). 3. Наличие прав на конфигурирование netfilter (обычно root или CAP_NET_ADMIN).

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


Администратор сети или атакующий с доступом к конфигурации firewall создает правило nftables, которое проверяет, например, первые 1-3 байта IPv6-адреса источника. При попытке перенести это правило на аппаратный offload (если сетевая карта поддерживает nftables offload), ядро вызывает nft_payload_offload_mask(). Из-за ошибки маска формируется некорректно: она включает дополнительные байты IPv6-адреса. В результате правило может начать блокировать легитимный трафик, если в этих дополнительных байтах случайно совпадут значения, или пропускать вредоносный трафик, если логика сравнения искажается. В системах с включенным UBSAN это может привести к логированию ошибки shift-out-of-bounds.

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


Публичный эксплойт или PoC для эксплуатации CVE-2026-74579 в целях удаленного выполнения кода или повышения привилегий не опубликован. Уязвимость была обнаружена и сообщена командой AutonomousCodeSecurity (Microsoft). Доступны только патчи в репозитории ядра Linux. Эксплуатация в дикой природе не подтверждена.

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


Специфичных IOC для этой уязвимости нет. Возможные косвенные признаки: 1. Сообщения UBSAN в dmesg или журналах ядра: "shift-out-of-bounds in net/netfilter/nft_payload.c". 2. Нелогичное поведение firewall: блокировка или пропуск трафика, который не должен попадать под действие правил nftables, особенно при использовании offload. 3. Ошибки при применении правил nftables с частичным сопоставлением полей.

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


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

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


Проверьте версию ядра:

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

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

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


Установите последние обновления ядра Linux от вашего дистрибутива. Исправление заменяет сложный алгоритм сдвига и обрезки на простую установку байтов 0xff для первых priv_len байтов маски. Это устраняет undefined behavior и гарантирует корректное формирование маски. Обновите систему:

Bash:
# Для Debian/Ubuntu
sudo apt update && sudo apt upgrade linux-image-generic

# Для RHEL/CentOS
sudo dnf update kernel

Перезагрузите систему для загрузки нового ядра.

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


Если немедленное обновление невозможно: 1. Отключите offload для nftables, если он используется. Это предотвратит вызов уязвимой функции nft_payload_offload_mask(). 2. Избегайте создания правил nftables, которые используют частичное сопоставление полей заголовков (например, частичные IPv6 адреса) в сочетании с offload. Используйте полные поля или программную обработку (без offload).

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


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

Bash:
uname -r

Убедитесь, что она соответствует исправленной версии. Проверьте, что правила nftables применяются корректно и не вызывают ошибок в dmesg:

Bash:
dmesg | grep -i nft_payload
dmesg | grep -i ubsan

Отсутствие сообщений об ошибках shift-out-of-bounds и корректная работа firewall подтверждают успешное исправление.

Вывод​


CVE-2026-74579 представляет собой ошибку в реализации offload-функционала netfilter, которая может привести к некорректной фильтрации трафика. Хотя прямая эксплуатация для взлома маловероятна, ошибка нарушает целостность сетевой защиты. Обновление ядра Linux до версии, содержащей исправление, является обязательным шагом. Временное отключение offload может снизить риски до момента обновления.

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


  1. NVD — CVE-2026-74579
  2. FIRST EPSS — CVE-2026-74579
  3. netfilter: nft_payload: fix mask build for partial field offload - kernel/git/stable/linux.git - Linux kernel stable tree
  4. netfilter: nft_payload: fix mask build for partial field offload - kernel/git/stable/linux.git - Linux kernel stable tree
  5. netfilter: nft_payload: fix mask build for partial field offload - kernel/git/stable/linux.git - Linux kernel stable tree
  6. netfilter: nft_payload: fix mask build for partial field offload - kernel/git/stable/linux.git - Linux kernel stable tree
  7. netfilter: nft_payload: fix mask build for partial field offload - kernel/git/stable/linux.git - Linux kernel stable tree
  8. netfilter: nft_payload: fix mask build for partial field offload - kernel/git/stable/linux.git - Linux kernel stable tree
  9. netfilter: nft_payload: fix mask build for partial field offload - kernel/git/stable/linux.git - Linux kernel stable tree
  10. 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 — Уточнены сведения об уязвимых версиях, оценке риска или исправлении.
 
Последнее редактирование:
Назад
Верх Низ