
PoC di come sfruttare una vulnerabilità RCE dei DAG di esempio in Apache Airflow <1.10.11
Descrizione: Questa vulnerabilità consente RCE quando i DAG di esempio di Airflow vengono caricati, potenzialmente senza autenticazione con CVE-2020-13927
Credito CVE: xuxiang di DtDream security
Versioni interessate: <1.10.11
Link di divulgazione: https://lists.apache.org/thread.html/r7255cf0be3566f23a768e2a04b40fb09e52fcd1872695428ba9afe91%40%3Cusers.airflow.apache.org%3E
Link CVE NIST: https://nvd.nist.gov/vuln/detail/CVE-2020-11978
Questo exploit sfrutta il DAG di esempio vulnerabile all'iniezione di comandi, utilizzando l'API REST sperimentale che è pubblica per impostazione predefinita, anche se l'interfaccia web ha l'autenticazione impostata.
python CVE-2020-11978.py <url> <command>
Se example_trigger_target_dag non è caricato e conosci il DAG specifico che vuoi attivare, puoi usare CVE-2020-11978-min.py come modello su come attivare quel determinato DAG.
Se hai già disabilitato gli esempi impostando load_examples=False nella configurazione, non sei vulnerabile.
Puoi aggiornare a >=1.10.11 oppure rimuovere il DAG vulnerabile, cioè example_trigger_target_dag, per le versioni <1.10.11
Se avvii una nuova istanza di Airflow usando >=1.10.11, deny_all è già impostato per auth_backend per impostazione predefinita in airflow.cfg.
[api]
auth_backend = airflow.api.auth.backend.deny_all
Nota che airflow.api.auth.backend.default consente ancora richieste non autenticate all'API anche per >=1.10.11. Quindi, se hai un'istanza Airflow esistente con auth_backend = airflow.api.auth.backend.default, anche dopo l'aggiornamento a >=1.10.11, l'API REST è ancora pubblica.
Per >=2.0.0, l'API sperimentale è disabilitata, ma è disponibile un'API stabile più potente.