Уязвимость в netfilter Linux
Уязвимость в netfilter Linux
Категория: Программы Теги: Уязвимости Опубликовано: 14 апреля 2025

Уязвимость 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-наборами, где некорректное управление таймаутами элементов позволяет перезаписать освобожденную память.

Механизм работы эксплоита

Эксплоит из общего доступа состоит из нескольких этапов:

  1. Подготовка окружения: Создание изолированного сетевого пространства (user namespace) и выделение ресурсов для манипуляций с Netlink-сокетами.

  2. Синхронизация времени: Настройка параметров гонки (таймауты элементов наборов и интервалы GC) для повышения вероятности успешной эксплуатации.

  3. Триггеринг уязвимости:

    • Создание множества анонимных наборов с элементами, блокирующими выполнение транзакций.

    • Инициирование отката транзакции с параллельным вызовом сборщика мусора, что приводит к двойному освобождению памяти.

  4. Обход KASLR: Использование утечки данных через поддельные объекты nftables для получения базового адреса ядра.

  5. Выполнение кода: Построение ROP-цепочки для перехвата управления и модификации core_pattern, что позволяет выполнить произвольный скрипт при аварийном завершении процесса.

Ключевые особенности эксплоита

  • Использование Netlink API для манипуляций с nftables.

  • Подмена виртуальных методов объектов (obj->ops) для контроля потока выполнения.

  • Перехват управления через поддельный ops->dump и стековый пивот.

  • Запись в /proc/sys/kernel/core_pattern для выполнения payload с правами root.

Условия эксплуатации

  1. Доступ к системе: Злоумышленник должен иметь возможность выполнять код на целевой системе (локально или через удаленную уязвимость).

  2. Версия ядра: Уязвимы ядра Linux версий 4.19.316–6.8.4, включая дистрибутивы Astra Linux, Альт и ОС Основа Оnyx.

  3. Конфигурация: Требуется активный модуль nf_tables (стандартно включен в большинстве дистрибутивов).

  4. Привилегии: Эксплуатация возможна из-под непривилегированного пользователя благодаря работе в user namespace.

Рекомендации по защите

  1. Обновление ядра: Установить патчи для ядра (фикс включен в версии 6.8.5+ и стабильные ветки 6.1.86, 5.15.155).

  2. Отключение ненужных модулей: Выгрузить модуль nf_tables при отсутствии потребности в фильтрации пакетов (rmmod nf_tables).

  3. Изоляция пользователей: Ограничить использование user namespace через sysctl kernel.unprivileged_userns_clone=0.

  4. Защита памяти: Активировать механизмы вроде CONFIG_SLAB_FREELIST_HARDENED и CONFIG_SLAB_FREELIST_RANDOM.

  5. Мониторинг: Отслеживать подозрительные операции с nftables через аудит ядра.

Алексей Черемных Алексей Черемных
62