
PoC эксплуатации RCE-уязвимости в примерах DAG в Apache Airflow <1.10.11
Описание: Эта уязвимость позволяет выполнить произвольный код (RCE) при загрузке примеров DAG в Airflow, потенциально без аутентификации, в сочетании с CVE-2020-13927
Автор CVE: xuxiang of DtDream security
Затронутые версии: <1.10.11
Ссылка на раскрытие: https://lists.apache.org/thread.html/r7255cf0be3566f23a768e2a04b40fb09e52fcd1872695428ba9afe91%40%3Cusers.airflow.apache.org%3E
Ссылка на CVE NIST: https://nvd.nist.gov/vuln/detail/CVE-2020-11978
Этот эксплойт использует пример DAG, уязвимый к внедрению команд, вместе с экспериментальным REST API, который доступен публично по умолчанию, даже если в веб-интерфейсе включена аутентификация.
python CVE-2020-11978.py <url> <command>
Если example_trigger_target_dag не загружен и вы знаете конкретный DAG, который хотите запустить, вы можете использовать CVE-2020-11978-min.py как шаблон для запуска этого конкретного DAG.
Если у вас уже отключены примеры путём установки load_examples=False в конфигурации, то вы не уязвимы.
Вы можете обновиться до >=1.10.11 или удалить уязвимый DAG — example_trigger_target_dag для <1.10.11
Если вы запускаете новый экземпляр Airflow с версией >=1.10.11, то для auth_backend по умолчанию уже установлено значение deny_all в airflow.cfg.
[api]
auth_backend = airflow.api.auth.backend.deny_all
Обратите внимание, что airflow.api.auth.backend.default по-прежнему разрешает неаутентифицированные запросы к API даже для >=1.10.11. Поэтому если у вас есть существующий экземпляр Airflow, в котором auth_backend = airflow.api.auth.backend.default, то даже после обновления до >=1.10.11 REST API останется публичным.
Для >=2.0.0 экспериментальный API отключён, но имеется более мощный стабильный API.