
ماسح ضوئي للقراءة فقط وسلبي يفحص مضيف REDCap بحثًا عن التعرّض للإصابة بـ **CVE-2026-90817** واختراقه بها — وهو ثغرة تنفيذ التعليمات البرمجية عن بُعد غير المصادَق عليها في نقطة نهاية الاستبيان، والتي استُغلّت في حملة التعدين الخفي XMRig الموثّقة من Palo Alto Unit 42
redcap_cve_2026_90817_scan.py هو ماسح سلبي للقراءة فقط يفحص مضيف
REDCap بحثًا عن التعرّض لثغرة CVE-2026-90817 والاختراق بها — وهي ثغرة
تنفيذ تعليمات برمجية عن بُعد غير المصادَق عليها في نقطة نهاية الاستبيان، والتي
استُغلّت في حملة التعدين الخفي XMRig الموثّقة من Palo Alto Unit 42
(2026-10-07-XMRig-campaign-through-CVE-2026-90817).
يجيب عن سؤالين بخصوص المضيف الذي يعمل عليه:
هذه الأداة للكشف فقط. فهي:
وهي مخصّصة لمسؤول يشغّلها ضد خادم REDCap الخاص به.
pip. ملف واحد؛ انسخه
إلى المضيف وشغّله./var/log/apache2 (Debian) أو /var/log/httpd
(RHEL/CentOS/Rocky/Alma)، وسجلات nginx في /var/log/nginx. على RHEL 8 يكون
python3 الخاص بالنظام إصدار 3.6، لذا استدعِ python3.9 (أو أحدث) هناك؛ أما
RHEL/Rocky/Alma 9 فتأتي مع 3.9+. شغّله بصلاحيات root لإجراء فحص كامل (فجدولا
crontab الخاصان بكل مستخدم، وملفات authorized_keys الخاصة بالمستخدمين الآخرين،
و/proc/<pid>/exe، وبعض السجلات تكون غير قابلة للقراءة بخلاف ذلك). وبدون root
فإنه يعمل مع ذلك ويضع علامة واضحة على النتيجة بأنها فحص جزئي.# Simplest: defaults to /var/www/html/redcap, auto-detects the mitigation date
sudo python3 -I redcap_cve_2026_90817_scan.py
# Point at a non-default install, pin the mitigation date, list every attack entry
sudo python3 -I redcap_cve_2026_90817_scan.py \
--redcap-root /var/https/redcap \
--mitigation-date 2026-09-21 \
--max-log-matches all
# Machine-readable output for monitoring / ticketing
sudo python3 -I redcap_cve_2026_90817_scan.py --json
على Windows، شغّل من موجّه أوامر مرفوع الصلاحيات ووجّه --redcap-root إلى
مجلد التثبيت (تُكتشف المنصة ومجلدات السجلات الافتراضية تلقائيًا):
# IIS or Apache/XAMPP; logs under C:\inetpub\logs\LogFiles or the Apache logs dir
python -I redcap_cve_2026_90817_scan.py --redcap-root C:\redcap --json
-I يشغّل Python في الوضع المعزول (يتجاهل $PYTHONPATH ومجلد العمل الحالي CWD) — ممارسة جيدة
عند فحص مضيف قد يكون قد عُبث به.
| العلم | الافتراضي | الغرض |
|---|---|---|
--redcap-root PATH | /var/www/html/redcap | جذر تثبيت REDCap. |
--log-dir DIR (قابل للتكرار) | خاص بالمنصة (Apache/nginx على Linux؛ IIS LogFiles + Apache على Windows) | مجلدات سجلات خادم الويب المراد فحصها (تتعامل مع ملفات .gz المُدوّرة وسجلات IIS W3C). |
--home-dir DIR (قابل للتكرار) | /root + كل /home/* (Linux)؛ كل C:\Users\* (Windows) | مجلدات home إضافية للبحث فيها عن مفاتيح SSH / ملفات shell/profile. |
--platform auto|linux|windows | auto | منصة المضيف المفترضة. تُكتشف تلقائيًا من نظام التشغيل؛ فرضها لاختيار مزوّد (تظل فحوص المضيف الخاصة بنظام التشغيل تعمل فقط على نظام التشغيل المطابق الفعلي). |
--mitigation-date YYYY-MM-DD | يُكتشف تلقائيًا | التاريخ الذي أُغلقت فيه الثغرة عبر الترقية. راجع توقيت الهجوم. |
--since YYYY-MM-DD | — | فحص إدخالات سجل الويب في هذا التاريخ أو بعده فقط (شاملًا). لا تُفتح ملفات السجل المعدّلة قبل ذلك. ينطبق على مرورَي السجل؛ فحوص حالة المضيف غير متأثرة. راجع توقيت الهجوم. |
--until YYYY-MM-DD | — | فحص إدخالات سجل الويب في هذا التاريخ أو قبله فقط (شاملًا). |
--full-hash-scan | معطّل | حساب تجزئة الملفات بشكل تكراري تحت temp/cache ومجلدات التجهيز (أبطأ). |
--max-log-matches N | all | 100 | عدد إدخالات سجل الهجوم المراد سردها لكل فئة، تُحفظ حرفيًا. |
--attacker-ip IP (قابل للتكرار) | — | عنوان IP إضافي معروف للمهاجم (مثلًا من فحص مضيف آخر). يُعامل مثل عنوان IOC الموثّق. راجع المرور الثاني. |
--json | معطّل | إخراج JSON بدلًا من التقرير النصي. |
--quiet | معطّل | كتم أسطر OK/INFO في الإخراج النصي. |
| الرمز | المعنى |
|---|---|
0 | نظيف ومُرقّع، واكتمل الفحص بالكامل. |
1 | نتيجة أو أكثر (إصدار مصاب و/أو IOC/هجوم) — يجب التحقيق. |
2 | تعذّر إكمال الفحص بالكامل (أخطاء، أو بدون صلاحيات ونظيف بخلاف ذلك — تعذّر تأكيد نتيجة نظيفة بالكامل). |
كل IOC موثّق يقابل فحصًا محليًا سلبيًا:
redcap_vX.Y.Z
ويقارنه بالإصدارات المُرقّعة
(16.0.49 LTS / 17.3.10 LTS / 17.4.4 Standard؛ الحد الأدنى المتأثر 13.3.0).temp/cache — تُحسب تجزئة كل ملف هناك (وفي مجلدات
التجهيز) ومقارنتها بـ SHA-256 الخاص ببرنامج الإسقاط من Unit 42. ملاحظة: الأداة لا
تضع علامة على الملفات حسب امتداد .bladec. يستخدم نواة REDCap محرك قوالب BladeOne، الذي يكتب
قوالب .bladec المُجمّعة بأسماء تجزئة إلى temp/cache كمخرجات طبيعية، لذا فليس الامتداد
مؤشرًا على الاختراق؛ يُكتشف الملف الخبيث المُسقَط فعليًا عبر تجزئة محتواه، بغض النظر عن الامتداد..syslog-*، وأرشيفات xmrig*، والمجلدات المنافسة
(/dev/shm/duet، /var/tmp/.bin) التي تُثبّت الحملة صلاحياتها على 000./var/tmp و/dev/shm و/tmp، وعمليات syslog-ng-* المتنكّرة.127.0.0.1:50001، والاتصالات
الحية بعناوين IP المصدر للمهاجم — الموثّق منها، والمرصود منها، وأي --attacker-ip، وكل IP
اكتشفه فحص سجل الويب.authorized_keys الخاصة بـ SSH — المفاتيح المطابقة لبصمة الباب الخلفي للمهاجم.
(لا تُدرج عمدًا مفاتيح غير ذات صلة "للمراجعة" — على مضيف عادي
تنتمي تلك إلى حسابات حقيقية ولا يمكن التحقق منها بشكل مستقل.)~/.profile — شيفرة بدء التشغيل المحقونة وHISTFILE لمكافحة التحقيق الجنائي.تُعد __passthru وroute= بمفردهما معاملات REDCap مشروعة —
إذ تمرّ الوحدات الخارجية (External Modules) عبر __passthru، ويستخدم حركة المرور العادية للاستبيانات
__passthru=index.php العادي للوصول إلى وحدات تحكم حميدة مثل PdfController و
SendItController. لذلك لا يطابق الماسح الضوئي هذين المعاملين بمفردهما أبدًا. يُعامَل سطر السجل
باعتباره على شكل استغلال فقط عندما يُظهر:
__passthru إلى DataImportController (المصبّ
الموثّق في التقرير)، بأي ترميز؛ أو__passthru مزدوج الترميز يصل إلى أي …Controller داخلي — مثل
__passthru=%2569ndex.php&route=ParcelController:show. هذا هو التوقيع
القابل للتعميم الخاص بالحملة: فالعملاء الشرعيون يرسلون index.php حرفيًا وعاديًا،
وليس مزدوج الترميز أبدًا، لذا فإن التعتيم (وليس اسم وحدة التحكم، وليس
حالة HTTP) هو ما يميّز الهجوم. هذا هو ما يلتقط مضيفي المهاجمين
غير عنوان IP الخاص بمؤشر الاختراق (IOC) الموثّق؛ أوتُصنَّف بعض الطلبات بشكل منفصل على أنها استطلاع (MEDIUM)، وليس كطلبات على شكل استغلال: