CVE: CVE-2026-74746
Продукт: Linux Kernel
Дата публикации: 26.08.2026
Критичность: CRITICAL
CVSS: 9.8 (3.1)
EPSS: 0,54%; процентиль 43,34%
CISA KEV: нет подтверждения в каталоге CISA KEV
Краткое описание
В подсистеме netfilter flowtable ядра Linux обнаружена уязвимость, приводящая к обращению к освобожденной памяти. Ошибка возникает из-за неправильного порядка публикации узлов в rhashtable, что позволяет сборщику мусора освободить память до завершения установки потока. В материале разобран механизм атаки, затронутые версии и порядок применения исправлений.
Основные характеристики
Уязвимость представляет собой гонку состояний (race condition) в ядре Linux, которая приводит к обращению к освобожденной памяти (use-after-free). Это может вызвать падение ядра или выполнение кода с привилегиями root.
- Тип ошибки: Use-after-free (CWE-416) в подсистеме netfilter.
- CVSS 3.1: 9.8 (CRITICAL). Вектор:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H.
- Условия атаки: Сетевой доступ, низкая сложность, отсутствие необходимости в привилегиях или взаимодействии пользователя.
- Эксплуатация: Публичный PoC отсутствует, но техническое описание и патч доступны.
- EPSS: 0,54% (процентиль 43,35%).
Какие продукты и версии затронуты
Уязвимость затрагивает подсистему netfilter flowtable в ядре Linux. Ошибка была введена в коммите
ac2a66665e23 ("netfilter: add generic flow table infrastructure") и присутствует в версиях, содержащих этот код.Исправление было опубликовано в stable-ветках ядра. Ниже приведены идентификаторы коммитов, содержащих патч для различных веток:
0a00254585827f1695aa2700114af622ea754cfa
2014ac62df9d45bb9a004a043e85df7be09ed780
211ee5d998d92a7d548811939c65942d06c146e4
972fdf7c4f5c282a239c88fea614b056c33dc025
be345dcbddb4643a54252b954af974b16eda8f91
d16b71231e65cb05daea2b45701fcf09cef041e7
d37917e7bebe078f3c17e47fd6fc1c9f6e8497b2
d9d3050a70efe217e73a0751e55fdae6a7092620
Точные номера версий пакетов для конкретных дистрибутивов (Debian, Ubuntu, RHEL и др.) необходимо проверять в официальных базах безопасности вашего поставщика.
Причина уязвимости
Причина уязвимости кроется в логике функции
flow_offload_add() в файле net/netfilter/nf_flow_table_core.c. При добавлении нового потока в таблицу flowtable ядро должно вставить два узла в хеш-таблицу rhashtable: один для исходного направления (original) и один для ответного (reply).Функция
nf_flow_table_iterate(), используемая сборщиком мусора (GC), рассматривает только узлы исходного направления как «владеющие» записью. Если узел исходного направления публикуется в хеш-таблицу первым, GC может обнаружить его и освободить память потока, пока flow_offload_add() еще не закончил вставку узла ответного направления. Это приводит к ситуации, когда указатель на освобожденную память остается в структуре, и последующее обращение к ней вызывает use-after-free.Как работает атака
Атакующий может инициировать сетевой трафик, который заставляет ядро создавать новые записи в flowtable. В момент, когда
flow_offload_add() вставляет первый узел (original), возникает временное окно, в котором запись видна для GC, но еще не полностью установлена.Если в этот момент сработает сборка мусора (например, по таймауту или из-за давления на память), память потока будет освобождена. Однако функция
flow_offload_add() продолжает выполнение и пытается вставить второй узел (reply) или обращаться к уже освобожденной структуре. Это приводит к записи в освобожденную память (slab-use-after-free write) или чтению из нее (slab-use-after-free read).Контроль над содержимым освобожденной памяти может позволить атакующему изменить указатели или данные, что в перспективе ведет к выполнению кода в контексте ядра.
Условия успешной эксплуатации
Для успешной эксплуатации уязвимости атакующему необходимо:
- Сетевой доступ: Возможность отправлять пакеты на уязвимый хост, чтобы инициировать создание записей в flowtable.
- Активная подсистема netfilter flowtable: Функциональность flow offload должна быть включена в ядре.
- Точное попадание в гонку: Атакующему нужно синхронизировать момент создания потока с запуском сборщика мусора. Это требует точного тайминга, но не требует привилегий или взаимодействия пользователя.
Возможный сценарий атаки
Сценарий атаки начинается с отправки атакующим пакета, который соответствует правилам netfilter и должен быть добавлен в flowtable. Ядро начинает выполнение
flow_offload_add().В этот момент атакующий может создать нагрузку или использовать специфические паттерны трафика, чтобы спровоцировать запуск GC. Когда GC находит только что опубликованный узел original, он освобождает память потока. Функция
flow_offload_add() продолжает работу и обращается к освобожденной памяти при вставке узла reply.Если атакующий заранее «захватил» освобожденную память (через heap spraying или другие техники), он может контролировать данные, которые ядро записывает или читает. Это может привести к перезаписи критических структур ядра и получению привилегий root.
Есть ли публичный эксплойт
На момент публикации CVE-2026-74746 публичный эксплойт (PoC) в открытом доступе не зафиксирован. Однако техническое описание уязвимости и патч доступны в репозитории ядра Linux.
Отсутствие публичного PoC не означает, что уязвимость не может быть эксплуатирована. Учитывая критический уровень CVSS и простоту сетевой атаки, вероятность разработки эксплойта высока. Рекомендуется относиться к этой уязвимости как к активно эксплуатируемой.
Признаки эксплуатации
Специфичные индикаторы компрометации (IOC) для CVE-2026-74746 не опубликованы. Однако можно использовать общие признаки аномальной активности в ядре:
- Сегфолты ядра (Kernel Panics): Частые падения системы с сообщениями об ошибках в
rhashtable,flow_offloadилиnetfilter.
- Аномальные сетевые паттерны: Потоки, которые вызывают создание множества записей в flowtable, особенно если они совпадают по времени с пиками нагрузки на память.
- KASAN отчеты: Если ядро собрано с KASAN, в логах могут появляться отчеты о
slab-use-after-freeв функцияхflow_offload_del,flow_offload_lookupиrht_deferred_worker.
Как обнаружить атаку
Для обнаружения атаки или эксплуатации уязвимости рекомендуется:
- Мониторинг логов ядра: Отслеживать сообщения об ошибках в подсистеме netfilter, особенно связанные с
flowtableиrhashtable.
- Использование eBPF: Развернуть eBPF-агенты для мониторинга вызовов
flow_offload_addиnf_flow_table_iterateна предмет аномального поведения.
- Анализ сетевых потоков: Идентифицировать источники трафика, которые генерируют аномальное количество новых потоков, особенно если они не соответствуют легитимной нагрузке.
- Проверка целостности ядра: Использовать инструменты для проверки целостности модулей ядра и выявления несанкционированных изменений.
Как проверить свою версию
Для проверки версии ядра и наличия уязвимости используйте следующие команды:
Bash:
uname -r
uname -a
cat /proc/version
Сравните полученную версию с официальными списками исправленных версий вашего дистрибутива. Если ваша версия не содержит коммиты, перечисленные в разделе «Какие продукты и версии затронуты», система уязвима.
Исправление
Единственный надежный способ устранения уязвимости — обновление ядра Linux до версии, содержащей исправление.
- Обновите ядро: Установите последнюю доступную версию ядра из репозитория вашего дистрибутива.
- Перезагрузите систему: После обновления ядра требуется перезагрузка для применения изменений.
- Проверьте патчи: Убедитесь, что в вашем ядре присутствуют коммиты, перечисленные в разделе «Какие продукты и версии затронуты».
Не откладывайте обновление, так как уязвимость имеет критический уровень и может быть эксплуатирована удаленно.
Временные меры защиты
Пока обновление не применено, можно рассмотреть следующие временные меры:
- Отключение flow offload: Если возможно, отключите функциональность flow offload в netfilter. Это снизит вероятность срабатывания уязвимости, но может ухудшить производительность сети.
- Ограничение трафика: Ограничьте входящий трафик, который может вызывать создание новых записей в flowtable, если это не нарушает бизнес-процессы.
- Мониторинг: Усиленный мониторинг логов ядра и сетевой активности для раннего обнаружения аномалий.
Эти меры не заменяют обновление и должны использоваться только как временная защита.
Как проверить устранение уязвимости
После обновления ядра проверьте, что исправление применено:
- Проверьте версию ядра:
uname -r.
- Убедитесь, что версия соответствует исправленной.
- Проверьте логи загрузки ядра на наличие ошибок.
- Проведите функциональное тестирование сетевых сервисов, чтобы убедиться, что flow offload работает корректно.
Если после обновления система стабильна и ошибки в логах отсутствуют, уязвимость устранена.
Вывод
CVE-2026-74746 — критическая уязвимость в Linux Kernel, требующая немедленного внимания. Ошибка в netfilter flowtable может привести к удаленному выполнению кода с привилегиями root.
Обновление ядра до исправленной версии является обязательным. Временные меры могут снизить риск, но не заменяют патч.
Администраторы должны проверить свои системы и применить обновления в кратчайшие сроки.
Официальные источники
- NVD — CVE-2026-74746
- FIRST EPSS — CVE-2026-74746
- netfilter: flowtable: publish GC-visible tuple last - kernel/git/stable/linux.git - Linux kernel stable tree
- netfilter: flowtable: publish GC-visible tuple last - kernel/git/stable/linux.git - Linux kernel stable tree
- netfilter: flowtable: publish GC-visible tuple last - kernel/git/stable/linux.git - Linux kernel stable tree
- netfilter: flowtable: publish GC-visible tuple last - kernel/git/stable/linux.git - Linux kernel stable tree
- netfilter: flowtable: publish GC-visible tuple last - kernel/git/stable/linux.git - Linux kernel stable tree
- netfilter: flowtable: publish GC-visible tuple last - kernel/git/stable/linux.git - Linux kernel stable tree
- netfilter: flowtable: publish GC-visible tuple last - kernel/git/stable/linux.git - Linux kernel stable tree
- netfilter: flowtable: publish GC-visible tuple last - kernel/git/stable/linux.git - Linux kernel stable tree
История обновлений статьи
- 28.08.2026 — Опубликована первая версия материала.
