
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
⚠️ यह PoC दुर्भावनापूर्ण कोड निष्पादित किए बिना हमले की सतह को मान्य करने के लिए एक हानिरहित JSP फ़ाइल ("Hello World") का उपयोग करता है। केवल अधिकृत वातावरण में पेंटेस्टिंग और डिटेक्शन विकास उद्देश्यों के लिए उपयोग करें।
Developed by: HKK$ cat ./vulnerability_summary.txtCVE-2025-31324 भेद्यता SAP NetWeaver AS Java के Visual Composer Metadata Uploader घटक में निहित है — एक missing authorization check दोष जो किसी भी अनधिकृत हमलावर को /developmentserver/metadatauploader एंडपॉइंट पर POST अनुरोध भेजने की अनुमति देता है, जिसके परिणामस्वरूप मनमानी फ़ाइलों का अप्रतिबंधित अपलोड होता है।
यह CVE विशेष रूप से SAP NetWeaver Visual Composer Framework संस्करण 7.50 को प्रभावित करता है, जिसका CVSS स्कोर 10.0 है — अधिकतम संभव।
थ्रेट एक्टर्स ने जनवरी से मई 2025 तक इस भेद्यता का सक्रिय रूप से शोषण किया, जिससे दुनिया भर के सैकड़ों सिस्टम में लगातार वेबशेल तैनात किए गए।
$ cat ./impact.txtउच्च विशेषाधिकारों के साथ संचालित होने और ERP डेटा के करीब होने के कारण, शोषण के बाद SAP ABAP स्टैक या कनेक्टेड डेटाबेस तक पार्श्विक गति (lateral movement) तुच्छ है।
वास्तविक हमलों में पूरी शोषण श्रृंखला:
Upload JSP (CVE-2025-31324)
→ Webshell persistente no servidor
→ RCE como processo SAP (alta privilégio)
→ Acesso a dados ERP (Finance, HR, Supply Chain)
→ Lateral movement para ABAP / DB
→ Deploy de frameworks C2 (ex: Brute Ratel)
$ cat ./architecture.txt┌─────────────────────────────────────────────────────────────────────────┐
│ CVE-2025-31324 — EXPLOIT FLOW │
│ │
│ ATACANTE SAP NETWEAVER AS JAVA │
│ │
│ POST /developmentserver/metadatauploader │
│ Content-Type: multipart/form-data ┌─────────────────────┐ │
│ Body: arquivo JSP/WAR/qualquer ──────────► │ Metadata Uploader │ │
│ (sem autenticação) │ │ │
│ │ ❌ Sem verificação │ │
│ │ de auth │ │
│ │ ❌ Sem validação │ │
│ │ de extensão │ │
│ │ ❌ Sem sanitização │ │
│ │ de conteúdo │ │
│ └────────┬────────────┘ │
│ │ │
│ Arquivo salvo em: │
│ /irj/root/ ou similar │
│ │ │
│ GET /irj/hello_world.jsp ◄──────────────────────────┘ │
│ → Hello World (PoC benigno) │
│ → Webshell (exploit real) │
└─────────────────────────────────────────────────────────────────────────┘
/developmentserver/metadatauploader SAP Visual Composer का हिस्सा है — व्यावसायिक विश्लेषकों के लिए बिना Java कोड के SAP एप्लिकेशन बनाने हेतु एक लो-कोड विकास उपकरण। एंडपॉइंट को विकास के दौरान मेटाडेटा मॉडल प्राप्त करने के लिए डिज़ाइन किया गया था। हालाँकि यह घटक 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 फ़ाइलों की व्याख्या सर्वलेट कंटेनर (एम्बेडेड Apache Tomcat) द्वारा बिना पूर्व संकलन के सीधे की जाती है। यह JSP को Java वातावरण में वेबशेल के लिए आदर्श प्रारूप बनाता है।
हानिरहित सामग्री ("Hello World") का चयन PoC के लिए जानबूझकर किया गया है:
वास्तविक शोषण में, सामग्री कमांड निष्पादन के साथ एक JSP वेबशेल होगी, उदा:
<%
String cmd = request.getParameter("cmd");
Runtime.getRuntime().exec(cmd);
%>
multipart/form-data — यह Content-Type क्यों?files = {'file': (file_name, open(file_name, 'rb'), 'application/octet-stream')}
एंडपॉइंट एक multipart/form-data अनुरोध की अपेक्षा करता है — वही प्रारूप जो फ़ाइल अपलोड के HTML फ़ॉर्म द्वारा उपयोग किया जाता है। यह Visual Composer के मूल डिज़ाइन में जानबूझकर है (विकास मॉडल का अपलोड)।
requests लाइब्रेरी स्वचालित रूप से multipart की boundaries बनाती है जब files= पास किया जाता है — Content-Type: multipart/form-data; boundary=... हेडर आंतरिक रूप से उत्पन्न होता है।
verify=False: TLS प्रमाणपत्र सत्यापन अक्षम करता है — आवश्यक है क्योंकि SAP वातावरण अक्सर self-signed प्रमाणपत्रों का उपयोग करते हैं। उत्पादन में, verify='/path/to/ca-bundle.crt' का उपयोग करें।
https://<host>:<port>/developmentserver/metadatauploader?CONTENTTYPE=MODEL&CLIENT=1
| घटक | अर्थ |
|---|---|
:50201 | SAP ICM (Internet Communication Manager) HTTPS की डिफ़ॉल्ट पोर्ट |
/developmentserver/ | Visual Composer का विकास सर्वलेट |
metadatauploader | मेटाडेटा अपलोड का विशिष्ट एंडपॉइंट |
CONTENTTYPE=MODEL | एंडपॉइंट द्वारा अपेक्षित सामग्री प्रकार |
CLIENT=1 | SAP मंडेंट (client) — 000, 100, 001 सामान्य हैं |
$ cat ./mitre_mapping.ymltactic: Initial Access
- T1190 # Exploit Public-Facing Application
# Exploração do endpoint /developmentserver/metadatauploader
# sem autenticação via HTTP POST
tactic: Execution
- T1505.003 # Server Software Component: Web Shell
# JSP webshell uploaded → executado pelo servlet container (Tomcat)
tactic: Persistence
- T1505.003 # Web Shell como mecanismo de persistência
# Arquivo JSP persiste no filesystem do servidor entre reinicializações
tactic: Defense Evasion
- T1036 # Masquerading
# Webshells nomeados como arquivos legítimos SAP (ex: metadata.jsp)
tactic: Discovery
- T1082 # System Information Discovery
# Pós-RCE: enumerar processos, usuários, paths SAP
tactic: Lateral Movement
- T1210 # Exploitation of Remote Services
# Acesso ao ABAP stack, bancos de dados conectados via RCE
tactic: Collection
- T1005 # Data from Local System
# Acesso direto a dados ERP (Finance, HR, Supply Chain)
$ cat ./affected_versions.txtProduto: SAP NetWeaver Application Server Java
Componente: Visual Composer Framework
Versão: 7.50 (todas as builds antes do patch de abril/maio 2025)