
مدقق Python وخطاف استغلال لـ CVE-2026-90817، وهو RCE حرج غير مصادق عليه في REDCap عبر توجيه __passthru في الاستبيان، مع فحص جماعي واستيراد أهداف FOFA.
أداة فحص بلغة Python 3 (وخطاف استغلال قابل للتكوين) لـ CVE-2026-90817 (Securifera / Ryan Wincey).
| المنتج | REDCap (Vanderbilt) |
| المتأثر | ≥ 13.3.0 (حتى تصحيح الفرع) |
| المُصلَح | 16.0.49 LTS، 17.3.10 LTS، 17.4.4 Standard+ |
| CVSS 3.1 | 9.8 حرج |
| المصادقة | لا شيء — يلزم hash استبيان عام صالح (s=) للسلسلة الكاملة |
| CWE | CWE-73، CWE-94 |
من سياق استبيان عام، يمكن للمهاجمين استغلال توجيه __passthru (تمرير الاستبيان) للوصول إلى وحدات تحكم غير مقصودة (مثل Data Import)، ثم إثارة معالجة غير آمنة لـ مسار الملف / التدفق → RCE.
لم تنشر Securifera بعد سلسلة HTTP الكاملة (لا يوجد PoC عام على GitHub / Exploit-DB وقت نشر المستودع).
| الوضع | ما يفعله |
|---|---|
check | بصمة REDCap، استدلالات الإصدار، استبيان s= صالح (إذا أُعطي hash)، فحوصات __passthru → DataImport |
exploit | يعمل فقط مع exploit_chain.json مُتحقَّق منه (وليس مثال العنصر النائب) |
exploit_chain.example.json هو عنصر نائب فقط (مسارات/معاملات مُخمَّنة). لن ينفذ RCE.
تشغيل بحثي تجريبي: --allow-placeholder-chain (يرسل الطلبات؛ توقّع الفشل).
pip install -r requirements.txtpip install -r requirements.txt
# Single target (survey hash required for survey + passthru tests)
python poc.py -u https://redcap.example.edu/redcap --hash Ab12Xy34Zq --mode check
# Shorthand: base|hash
python poc.py -u "https://redcap.example.edu/redcap|Ab12Xy34Zq" --mode check
# Mass check (one URL per line, optional |hash)
python poc.py --list targets.example.txt --mode check -j 20 -q
# Live stream: every host + test summary (recommended for long lists)
python poc.py --list targets.example.txt --mode check -j 20 -q --flow
# Exploit (after advisory → real exploit_chain.json)
cp exploit_chain.example.json exploit_chain.json # edit with real values
python poc.py -u https://redcap.example.edu/redcap --hash XXX --mode exploit -c id \
--chain exploit_chain.json
# Place export as fofa_csv_7561.csv (or any fofa*.csv), then:
python fofa_to_list.py
# Writes list.txt (gitignored) and normalizes the CSV with a url column
python poc.py --list list.txt --mode check -j 20 -q --flow
https://uni.edu/redcap|SurveyHash10
https://uni.edu/redcap?s=SurveyHash10
https://uni.edu/redcap
بدون hash، لا يزال الفحص قادرًا على أخذ بصمة REDCap وتمييز نوافذ الإصدارات، لكنه لا يستطيع التحقق من الاستبيان أو تشغيل فحوصات passthru.
--flow فحص جماعي)
| الخيار | الوصف |
|---|---|
-u, --url | عنوان URL أساسي واحد (أو URL|hash) |
--hash | hash استبيان عام (قيمة s=) |
--list | ملف الأهداف (عنوان URL واحد أو URL|hash لكل سطر) |
--mode | check أو exploit |
--chain | سلسلة JSON لوضع الاستغلال (افتراضيًا exploit_chain.json) |
--allow-placeholder-chain | السماح بـ JSON المثال في وضع الاستغلال (بدون RCE حقيقي) |
-c, --command | أمر shell (وضع الاستغلال؛ يحتاج سلسلة عاملة) |
--threads, -j | التزامن الجماعي (افتراضيًا 15) |
--timeout | مهلة HTTP بالثواني (افتراضيًا 25) |
--proxy | عنوان URL لوكيل HTTP(S) |
--output | نتائج JSONL (افتراضيًا cve_2026_90817_results.jsonl) |
--vuln-list | فحص → hits.txt؛ استغلال → exploited.txt |
--quiet, -q | كتم علامات التقدم الدورية |
--flow, -f | سطر واحد لكل هدف مكتمل (الموقع + ملخص الاختبار) |
| الملف | المحتوى |
|---|---|
cve_2026_90817_results.jsonl | JSON لكل هدف |
hits.txt | المرشحون (exploitable_candidate) |
status الشائعة (فحص)| الحالة | المعنى |
|---|---|
passthru_dataimport_reachable | استبيان صالح + مسار passthru يبدو كـ Data Import |
passthru_probe_reachable | أعاد passthru استجابة HTTP غير محظورة |
likely_vulnerable_version | الإصدار ضمن النافذة المتأثرة (الاستبيان جيد، الفحوصات غير حاسمة) |
redcap_version_hot_no_hash | استدلالات إصدار متأثر، لم يُقدَّم hash استبيان |
redcap_no_survey_hash | REDCap جيد، لا hash، الإصدار غير معروف |
patched / patched_no_survey | عند الإصدار المُصلَح أو أعلى للفرع |
no_valid_survey | hash غير صالح أو الاستبيان غير عام |
no_redcap | المضيف لا يبدو REDCap |
survey_ok_version_unknown | الاستبيان جيد، لم يُعثر على سلسلة الإصدار |
__passthru الدقيق وأسماء المعاملات من Securifera/المورّد؛ الإعدادات الافتراضية عناصر نائبة.vulnerable_version بقيمة null.title="REDCap" غالبًا ما تفتقر إلى hashes الاستبيان — تتطلب شروط CVE المسبقة s= من روابط عامة.title="REDCap"
body="redcap_version"
body="/surveys/?s="
.
├── poc.py
├── fofa_to_list.py
├── exploit_chain.example.json
├── poc.png # example --flow terminal output
├── requirements.txt
├── targets.example.txt
├── README.md
├── LICENSE
└── .gitignore
لـ اختبار الأمان المصرّح به فقط. أنت مسؤول عن الامتثال للقوانين المعمول بها وقواعد البرنامج.