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 до версии, в которой исправлена уязвимость.

  1. Обновите Apache Airflow до безопасной версии:

    • Минимальная версия с исправлением: 1.10.12
    • Рекомендуемая версия: 1.10.13 или выше (актуальную стабильную версию смотрите на официальном сайте)

    Способ обновления (пример для pip): ```bash

    Остановите все сервисы Airflow (webserver, scheduler и т.д.)

    pip install --upgrade "apache-airflow==1.10.13"

    Запустите обновление базы данных (если требуется)

    airflow upgradedb

    Перезапустите сервисы Airflow

    ```

  2. Включите и настройте аутентификацию в API: После обновления убедитесь, что в конфигурационном файле airflow.cfg для раздела [api] установлены корректные настройки аутентификации. По умолчанию аутентификация должна быть включена. ini [api] auth_backend = airflow.api.auth.backend.default

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

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

  1. Немедленно отключите экспериментальный API. В конфигурационном файле airflow.cfg установите: ini [api] enable_experimental_api = False После изменения конфигурации полностью перезапустите веб-сервер Airflow.

  2. Ограничьте сетевой доступ. Настройте брандмауэр (например, 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

  3. Рассмотрите использование обратного прокси. Разместите Airflow за веб-сервером (например, Nginx или Apache HTTP Server), на котором можно настроить дополнительный уровень аутентификации (например, базовую HTTP-аутентификацию) или ограничение по IP.