CVE-2020-13927
Apache Airflow's Experimental API
2022-01-18
The previous default setting for Airflow's Experimental API was to allow all API requests without authentication.
Технический анализ и план устранения
Суть уязвимости
Злоумышленник может отправлять запросы к экспериментальному API Apache Airflow без какой-либо аутентификации. Это позволяет выполнять любые операции, доступные через этот API (например, запуск и остановка DAG, управление соединениями, переменными), что ведет к полному компрометированию оркестратора задач.
Как исправить
Основное решение — обновление Apache Airflow до версии, в которой исправлена уязвимость.
-
Обновите Apache Airflow до безопасной версии:
- Минимальная версия с исправлением:
1.10.12 - Рекомендуемая версия:
1.10.13или выше (актуальную стабильную версию смотрите на официальном сайте)
Способ обновления (пример для pip): ```bash
Остановите все сервисы Airflow (webserver, scheduler и т.д.)
pip install --upgrade "apache-airflow==1.10.13"
Запустите обновление базы данных (если требуется)
airflow upgradedb
Перезапустите сервисы Airflow
```
- Минимальная версия с исправлением:
-
Включите и настройте аутентификацию в API: После обновления убедитесь, что в конфигурационном файле
airflow.cfgдля раздела[api]установлены корректные настройки аутентификации. По умолчанию аутентификация должна быть включена.ini [api] auth_backend = airflow.api.auth.backend.default
Временное решение
Если немедленное обновление невозможно, выполните следующие шаги:
-
Немедленно отключите экспериментальный API. В конфигурационном файле
airflow.cfgустановите:ini [api] enable_experimental_api = FalseПосле изменения конфигурации полностью перезапустите веб-сервер Airflow. -
Ограничьте сетевой доступ. Настройте брандмауэр (например,
iptablesили облачные Security Groups) так, чтобы доступ к порту веб-сервера Airflow (по умолчанию8080) был разрешен только с доверенных IP-адресов (например, с адресов администраторов или внутренних систем).bash # Пример для iptables (разрешить только с сети 192.168.1.0/24) iptables -A INPUT -p tcp --dport 8080 -s 192.168.1.0/24 -j ACCEPT iptables -A INPUT -p tcp --dport 8080 -j DROP -
Рассмотрите использование обратного прокси. Разместите Airflow за веб-сервером (например, Nginx или Apache HTTP Server), на котором можно настроить дополнительный уровень аутентификации (например, базовую HTTP-аутентификацию) или ограничение по IP.