
PoC zur Ausnutzung einer RCE-Sicherheitslücke in den Beispiel-DAGs von Apache Airflow <1.10.11
Beschreibung: Diese Schwachstelle ermöglicht RCE, wenn Airflows Beispiel-DAGs geladen werden, möglicherweise ohne Authentifizierung mit CVE-2020-13927
CVE-Credit: xuxiang of DtDream security
Betroffene Versionen: <1.10.11
Offenlegungslink: https://lists.apache.org/thread.html/r7255cf0be3566f23a768e2a04b40fb09e52fcd1872695428ba9afe91%40%3Cusers.airflow.apache.org%3E
NIST CVE-Link: https://nvd.nist.gov/vuln/detail/CVE-2020-11978
Dieser Exploit nutzt das Beispiel-DAG aus, das anfällig für Befehlseinschleusung ist, zusammen mit der experimentellen REST-API, die standardmäßig öffentlich ist, selbst wenn die Weboberfläche eine Authentifizierung eingerichtet hat.
python CVE-2020-11978.py <url> <command>
Wenn example_trigger_target_dag nicht geladen ist und Sie Kenntnis des spezifischen DAG haben, das Sie auslösen möchten, können Sie CVE-2020-11978-min.py als Vorlage verwenden, um dieses DAG auszulösen.
Wenn Sie Beispiele bereits deaktiviert haben, indem Sie load_examples=False in der Konfiguration gesetzt haben, sind Sie nicht anfällig.
Sie können auf >=1.10.11 aktualisieren oder das anfällige DAG example_trigger_target_dag für <1.10.11 entfernen.
Wenn Sie eine neue Airflow-Instanz mit >=1.10.11 starten, ist deny_all standardmäßig für auth_backend in airflow.cfg gesetzt.
[api]
auth_backend = airflow.api.auth.backend.deny_all
Beachten Sie, dass airflow.api.auth.backend.default auch für >=1.10.11 weiterhin unauthentifizierte Anfragen an die API erlaubt. Wenn Sie also eine bestehende Airflow-Instanz mit auth_backend = airflow.api.auth.backend.default haben, ist die REST-API selbst nach einem Upgrade auf >=1.10.11 immer noch öffentlich.
Für >=2.0.0 ist die experimentelle API deaktiviert, es gibt jedoch eine leistungsfähigere stabile API.