Sploitus

Exploit for Unrestricted Upload of File with Dangerous Type in Sap Netweaver

githubexploit · 2026-09-06

Exploit Code

README327 lines
## https://sploitus.com/exploit?id=98DAABB7-F911-5937-8DF6-FF18ED01FC23
# 🔴 CVE-2025-31324 — SAP NetWeaver Visual Composer Unauthenticated File Upload

> **Type:** Proof of Concept — Vulnerability Research
> **CVE:** [CVE-2025-31324](https://vulners.com/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](https://me.sap.com/notes/3594142) + [3604119](https://me.sap.com/notes/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.*

---

## `$ 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:

```
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

```
┌─────────────────────────────────────────────────────────────────────────┐
│              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"

```python
file_content = """
Hello World"""
```

**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:
```jsp

```

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

```python
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

```
https://:/developmentserver/metadatauploader?CONTENTTYPE=MODEL&CLIENT=1
```

| Componente | Significado |
|------------|------------|
| `:50201` | Porta padrão do SAP ICM (Internet Communication Manager) HTTPS |
| `/developmentserver/` | Servlet de desenvolvimento do Visual Composer |
| `metadatauploader` | Endpoint específico de upload de metadados |
| `CONTENTTYPE=MODEL` | Tipo de conteúdo esperado pelo endpoint |
| `CLIENT=1` | Mandante SAP (client) — `000`, `100`, `001` são comuns |

---

## `$ cat ./mitre_mapping.yml`

```yaml
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`

```
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)

```yaml
# 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
```

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

```yaml
# 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: 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

```bash
# Buscar requests POST para o endpoint vulnerável nos últimos 90 dias
# Diretório de logs: /usr/sap//J/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//SYS/global/security -type f
```

---

## `$ cat ./remediation.md`

```
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`

```bash
# Instalar dependência
pip install requests

# Editar a URL no script antes de executar:
# url = "https://:/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://:/irj/hello_world.jsp
# Resposta esperada se vulnerável: HTML com "Hello World"
# Resposta esperada se patchado: 404 ou 403
```

---

## `$ cat ./timeline.txt`

```
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`

```
CVE:        https://vulners.com/cve/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