CVE-2020-11978

Apache Airflow

ВЫСОКАЯ ВЕРОЯТНОСТЬ

Дата обнаружения

2022-01-18

Официальное описание

A remote code/command injection vulnerability was discovered in one of the example DAGs shipped with Airflow.

🛡️
Технический анализ и план устранения

Суть уязвимости

Уязвимость (RCE) находится в примере DAG example_trigger_target_dag.py. Атакующий может отправить специально сформированный HTTP-запрос к веб-серверу Airflow, который передаст недоверенные данные в команду операционной системы через параметр execution_date. Это позволяет выполнить произвольные команды на сервере с правами пользователя, под которым работает Airflow Worker/Scheduler.

Как исправить

Основное решение — обновить Apache Airflow до исправленной версии.

  1. Определите текущую версию Airflow: bash airflow version

  2. Обновите Airflow, используя pip, до одной из безопасных версий:

    • Для ветки 1.10.x: обновитесь до версии 1.10.12 или выше.
    • Для ветки 2.0.x (alpha): обновитесь до версии 2.0.0b2 или выше.

    Команда для обновления через pip: bash pip install --upgrade "apache-airflow==1.10.12" или bash pip install --upgrade "apache-airflow==2.0.0b2"

  3. Удалите уязвимый пример DAG (обязательный шаг после обновления): Удалите или переместите файл example_trigger_target_dag.py из директории с примерами DAG (AIRFLOW_HOME/dags). Обычно путь: bash rm /path/to/airflow/dags/example_trigger_target_dag.py

Временное решение

Если немедленное обновление невозможно, выполните следующие действия:

  1. Немедленно удалите уязвимый DAG: Найдите и удалите файл example_trigger_target_dag.py из всех директорий, указанных в AIRFLOW_HOME и dags_folder в конфигурации Airflow. bash find /path/to/airflow -name "example_trigger_target_dag.py" -delete

  2. Ограничьте сетевой доступ: Настройте брандмауэр (например, iptables или облачные Security Groups), чтобы разрешить доступ к веб-интерфейсу Airflow (порт по умолчанию 8080) только с доверенных IP-адресов (администраторов, CI/CD систем). bash # Пример для iptables (разрешить только с IP 192.168.1.100) iptables -A INPUT -p tcp --dport 8080 -s 192.168.1.100 -j ACCEPT iptables -A INPUT -p tcp --dport 8080 -j DROP

  3. Проверьте настройки аутентификации: Убедитесь, что для веб-интерфейса Airflow включена аутентификация (например, [webserver] authenticate = True в airflow.cfg) и используются строгие пароли.