
PoC de como explorar uma vulnerabilidade de RCE nos DAGs de exemplo no Apache Airflow <1.10.11
Descrição: Esta vulnerabilidade permite RCE quando os DAGs de exemplo do Airflow são carregados, potencialmente sem autenticação com CVE-2020-13927
Crédito do CVE: xuxiang da DtDream security
Versões Afetadas: <1.10.11
Link de Divulgação: https://lists.apache.org/thread.html/r7255cf0be3566f23a768e2a04b40fb09e52fcd1872695428ba9afe91%40%3Cusers.airflow.apache.org%3E
Link NIST do CVE: https://nvd.nist.gov/vuln/detail/CVE-2020-11978
Este exploit explora o DAG de exemplo vulnerável a injeção de comandos, usando a API REST experimental que é pública por padrão, mesmo que a interface web tenha autenticação definida.
python CVE-2020-11978.py <url> <command>
Se o example_trigger_target_dag não estiver carregado e você tiver conhecimento do DAG específico que deseja acionar, você pode usar CVE-2020-11978-min.py como modelo de como acionar esse DAG específico.
Se você já desativou os exemplos definindo load_examples=False na configuração, então você não está vulnerável.
Você pode atualizar para >=1.10.11 ou remover o DAG vulnerável example_trigger_target_dag para <1.10.11.
Se você iniciar uma nova instância do Airflow usando >=1.10.11, então deny_all já está definido para auth_backend por padrão em airflow.cfg.
[api]
auth_backend = airflow.api.auth.backend.deny_all
Observe que airflow.api.auth.backend.default ainda permite solicitações não autenticadas à API mesmo para >=1.10.11. Portanto, se você tiver uma instância existente do Airflow na qual auth_backend = airflow.api.auth.backend.default, mesmo após atualizar para >=1.10.11, a API REST continua pública.
Para >=2.0.0, a API experimental está desativada, mas possui uma API estável mais poderosa.