
Prova de Conceito para CVE-2025-55182 ("React2Shell"). Um ambiente totalmente dockerizado demonstrando Execução Remota de Código (RCE) via desserialização insegura em React Server Components. Inclui alvos vulneráveis para React Vanilla (Express) e Next.js, juntamente com um script de exploit Python personalizado.
⚠️ AVISO: APENAS PARA USO EDUCACIONAL Este repositório contém código de exploração funcional para uma vulnerabilidade crítica (CVSS 10.0). Destina-se estritamente a pesquisa acadêmica, análise de segurança e fins educacionais. Não utilize este código contra sistemas que você não possui ou sem permissão explícita para testar. O autor não é responsável por qualquer uso indevido.
Este projeto documenta e demonstra a CVE-2025-55182, uma vulnerabilidade crítica de Execução Remota de Código (RCE) localizada na arquitetura React Server Components (RSC). Frequentemente referida como "React2Shell", essa falha permite que atacantes remotos não autenticados executem código arbitrário no servidor manipulando o protocolo de serialização "Flight" utilizado pelo react-server.
Este laboratório fornece um ambiente Docker controlado e isolado para analisar a vulnerabilidade em dois cenários distintos:
react-server-dom-webpack e Express.O ambiente é orquestrado via Docker Compose e consiste em três contêineres isolados conectados por uma rede interna privada (research-net).
| Serviço | Contexto | Descrição | Componente Vulnerável |
|---|---|---|---|
vanilla-target | vanilla-rsc/ | Servidor Express mínimo implementando manualmente o protocolo RSC. | [email protected] |
nextjs-target | nextjs-app/ | Aplicação Next.js padrão usando App Router. | [email protected] (impl. react-server) |
attacker | exploit/ | Ambiente Python contendo os scripts de exploração. | N/A |
A vulnerabilidade decorre de Desserialização Insegura (CWE-502) no analisador do protocolo Flight. Ao injetar um payload multipart malicioso contendo uma estrutura de "chunk" falsa, um atacante pode:
.then de um objeto semelhante a Promise.$B).Function() para compilar e executar JavaScript arbitrário (ex.: child_process.execSync).Clone o repositório:
git clone https://github.com/trax69/cve-2025-55182-poc.git
cd cve-2025-55182-poc
Construa e inicie o laboratório:
docker-compose up -d --build
Aguarde os contêineres inicializarem completamente. O contêiner Next.js pode levar alguns minutos para concluir sua primeira construção.
A lógica de exploração está encapsulada em exploit/exploit.py. Você pode executar os ataques da sua máquina host (se Python estiver instalado) ou diretamente do contêiner attacker.
Acesse o shell do atacante:
docker-compose exec attacker bash
Instale as dependências:
pip install -r requirements.txt
Atacar Alvo A (Vanilla React):
python exploit.py http://vanilla-target:4000/rsc vanilla
Atacar Alvo B (Next.js):
python exploit.py http://nextjs-target:3000/ nextjs
O exploit tenta criar um arquivo chamado pwned.txt dentro do diretório /tmp do servidor vítima. Para verificar o sucesso:
# Verificar Servidor Vanilla
docker-compose exec vanilla-target ls -la /tmp/pwned.txt
# Verificar Servidor Next.js
docker-compose exec nextjs-target ls -la /tmp/pwned.txt
Se bem-sucedido, você verá a listagem do arquivo. Se o exploit falhar, o arquivo não existirá.
Para remediar esta vulnerabilidade em ambientes de produção:
react-server-dom-webpack (e pacotes relacionados) para a versão 19.0.1, 19.1.2 ou 19.2.1+."$1:__proto__" ou usos incomuns de "$@" em corpos multipart.Projeto Universitário - Auditoria de Segurança e Pesquisa de Vulnerabilidades