
Уязвимость BDU:2024-04369 (CVE-2024-26925) в netfilter Linux
Уязвимость BDU:2024-04369 (CVE-2024-26925) связана с некорректной обработкой блокировок в функции nf_tables_abort()
модуля net/netfilter/nf_tables_api.c
ядра Linux. Эта ошибка возникает при откате транзакций в подсистеме nf_tables, что приводит к состоянию гонки (race condition) и возможности эксплуатации для получения контроля над системой. Эксплуатация уязвимости позволяет злоумышленнику нарушить конфиденциальность, целостность и доступность данных.
CVSS 3.0: AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
Технические детали уязвимости
Модуль nf_tables предоставляет инфраструктуру для фильтрации сетевых пакетов. При откате транзакций (например, из-за ошибки загрузки модуля) функция nf_tables_abort()
не обеспечивает корректной синхронизации между сборщиком мусора (GC) и операциями изменения наборов (set). Это приводит к двойному освобождению памяти (double-free) или использованию после освобождения (use-after-free) в структурах данных ядра. Эксплоит фокусируется на работе с rhash-наборами, где некорректное управление таймаутами элементов позволяет перезаписать освобожденную память.
Механизм работы эксплоита
Эксплоит из общего доступа состоит из нескольких этапов:
-
Подготовка окружения: Создание изолированного сетевого пространства (user namespace) и выделение ресурсов для манипуляций с Netlink-сокетами.
-
Синхронизация времени: Настройка параметров гонки (таймауты элементов наборов и интервалы GC) для повышения вероятности успешной эксплуатации.
-
Триггеринг уязвимости:
-
Создание множества анонимных наборов с элементами, блокирующими выполнение транзакций.
-
Инициирование отката транзакции с параллельным вызовом сборщика мусора, что приводит к двойному освобождению памяти.
-
-
Обход KASLR: Использование утечки данных через поддельные объекты nftables для получения базового адреса ядра.
-
Выполнение кода: Построение ROP-цепочки для перехвата управления и модификации
core_pattern
, что позволяет выполнить произвольный скрипт при аварийном завершении процесса.
Ключевые особенности эксплоита
-
Использование Netlink API для манипуляций с nftables.
-
Подмена виртуальных методов объектов (
obj->ops
) для контроля потока выполнения. -
Перехват управления через поддельный
ops->dump
и стековый пивот. -
Запись в
/proc/sys/kernel/core_pattern
для выполнения payload с правами root.
Условия эксплуатации
-
Доступ к системе: Злоумышленник должен иметь возможность выполнять код на целевой системе (локально или через удаленную уязвимость).
-
Версия ядра: Уязвимы ядра Linux версий 4.19.316–6.8.4, включая дистрибутивы Astra Linux, Альт и ОС Основа Оnyx.
-
Конфигурация: Требуется активный модуль
nf_tables
(стандартно включен в большинстве дистрибутивов). -
Привилегии: Эксплуатация возможна из-под непривилегированного пользователя благодаря работе в user namespace.
Рекомендации по защите
-
Обновление ядра: Установить патчи для ядра (фикс включен в версии 6.8.5+ и стабильные ветки 6.1.86, 5.15.155).
-
Отключение ненужных модулей: Выгрузить модуль
nf_tables
при отсутствии потребности в фильтрации пакетов (rmmod nf_tables
). -
Изоляция пользователей: Ограничить использование user namespace через
sysctl kernel.unprivileged_userns_clone=0
. -
Защита памяти: Активировать механизмы вроде
CONFIG_SLAB_FREELIST_HARDENED
иCONFIG_SLAB_FREELIST_RANDOM
. -
Мониторинг: Отслеживать подозрительные операции с nftables через аудит ядра.
