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 до исправленной версии.
-
Определите текущую версию Airflow:
bash airflow version -
Обновите 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" -
Удалите уязвимый пример DAG (обязательный шаг после обновления): Удалите или переместите файл
example_trigger_target_dag.pyиз директории с примерами DAG (AIRFLOW_HOME/dags). Обычно путь:bash rm /path/to/airflow/dags/example_trigger_target_dag.py
Временное решение
Если немедленное обновление невозможно, выполните следующие действия:
-
Немедленно удалите уязвимый DAG: Найдите и удалите файл
example_trigger_target_dag.pyиз всех директорий, указанных вAIRFLOW_HOMEиdags_folderв конфигурации Airflow.bash find /path/to/airflow -name "example_trigger_target_dag.py" -delete -
Ограничьте сетевой доступ: Настройте брандмауэр (например,
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 -
Проверьте настройки аутентификации: Убедитесь, что для веб-интерфейса Airflow включена аутентификация (например,
[webserver] authenticate = Trueвairflow.cfg) и используются строгие пароли.