CVE-2026-74579 в Linux Kernel: ошибка в nftables offload, уязвимые версии и защита

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:

  1. Проверка логов ядра на наличие сообщений UBSAN:

    Bash:
    dmesg | grep -i "shift-out-of-bounds"
    dmesg | grep -i "nft_payload"
  2. Анализ правил nftables на наличие частичных совпадений полей, которые могут вызывать некорректное формирование маски.
  3. Мониторинг сетевой активности на аномальные паттерны, не соответствующие заданной политике фильтрации.

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


Для проверки версии ядра и наличия исправления:

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

Сверьте полученную версию с официальными релизами ядра Linux. Убедитесь, что в истории сборки ядра присутствует коммит 39e88f28fb32bf02bd4b525c24c842c9cff5663d или более поздний. Если вы используете дистрибутив, проверьте наличие обновлений в репозитории пакетов.

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


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

  • Исправляющий коммит: 39e88f28fb32bf02bd4b525c24c842c9cff5663d.
  • Файл: net/netfilter/nft_payload.c.

Обновите ядро через штатные средства дистрибутива. После обновления перезагрузите систему, чтобы загрузить новое ядро. Проверьте, что offload для nftables работает корректно.

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


Пока обновление ядра не установлено, можно временно отключить offload для nftables, если это поддерживается вашей конфигурацией. Это заставит ядро обрабатывать правила в программном режиме, где логика построения маски может отличаться. Однако это снизит производительность сетевой фильтрации. Также можно ограничить создание правил nftables с частичными совпадениями полей заголовков, если это возможно в вашей политике безопасности.

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


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

  1. Убедитесь, что загружено новое ядро:

    Bash:
    uname -r
  2. Проверьте, что в ядре присутствует исправляющий коммит (через git log в исходниках ядра, если вы компилируете его самостоятельно, или через документацию дистрибутива).
  3. Создайте тестовое правило nftables с частичным совпадением поля заголовка и убедитесь, что оно работает корректно, без сообщений UBSAN в логах.

Вывод​


CVE-2026-74579 представляет собой уязвимость в модуле nftables ядра 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 — Уточнены сведения об уязвимых версиях, оценке риска или исправлении.
  • 26.08.2026 — Уточнены сведения об уязвимых версиях, оценке риска или исправлении.
 
Последнее редактирование:
Назад
Верх Низ