Pesquisa de tese de mestrado sobre CVE-2025-55182 (React2Shell). Framework de exploração modular com 6 cenários de ataque (RCE, exfiltração, desfiguração), shell reverso interativo e um laboratório vulnerável completo para estudar Prototype Pollution e Desserialização Insegura em React Server Components.
Desserialização de Dados Não Confiáveis + Poluição de Protótipo em React Server Components
Execução Remota de Código Não Autenticada via Next.js Server Actions
Afetado: React 19.0.0 - 19.2.0 · Correção: React 19.0.1 / 19.1.2 / 19.2.1 (3 de dezembro de 2025)
Demonstração do exploit avançado — comandos básicos de RCE, shell interativo e múltiplos vetores de ataque contra uma aplicação Next.js vulnerável
Este repositório contém minha pesquisa de Dissertação de Mestrado sobre CVE-2025-55182, uma vulnerabilidade Crítica (CVSS v3.1: 10.0) de Execução Remota de Código em React Server Components.
A vulnerabilidade origina-se de um mecanismo inseguro de desserialização no protocolo React Flight. Ao processar Server Actions, o Next.js desserializa payloads multipart recebidos sem validação adequada. Um atacante pode criar um payload malicioso que polui a cadeia de protótipos e injeta JavaScript arbitrário, o qual é executado no servidor por meio do construtor Function (e subsequentemente via child_process.execSync()).
Nota sobre CVE-2025-66478: A Vercel emitiu um CVE paralelo para rastrear o impacto específico no Next.js desta mesma vulnerabilidade. Como o Next.js empacota o React de forma vendored, muitos scanners de dependências não a detectam automaticamente como vulnerável. O Banco de Dados Nacional de Vulnerabilidades dos EUA (NVD) rejeitou oficialmente o CVE-2025-66478 como duplicado do CVE-2025-55182, embora ele continue sendo referenciado no advisory de segurança da própria Vercel.
Vulnerabilidades subsequentes: A equipe do React divulgou posteriormente dois problemas adicionais presentes nas versões iniciais da correção (19.0.1, 19.1.2, 19.2.1): CVE-2025-55184 (Negação de Serviço, CVSS 7.5) e CVE-2025-55183 (Exposição de Código-Fonte, CVSS 5.3). Os usuários devem atualizar para 19.0.2, 19.1.3 ou 19.2.2 para resolver os três.
| Aspecto | Descrição |
|---|---|
| Quatro módulos de ataque | Excluir projetos, desfigurar site, roubar variáveis de ambiente, desligar servidores |
| Shell interativo | Shell persistente com comandos especiais e capacidades de restauração |
| Exfiltração estável | Leitura linha por linha para contornar as limitações de tamanho do cabeçalho HTTP |
| Script de restauração | Restauração segura do laboratório após ataques |
| Documentação acadêmica | Causa raiz, detalhamento do payload e cronologia da vulnerabilidade |
CVE-2025-55182/
├── README.md # This file
├── LICENSE # MIT License
│
├── exploit/
│ ├── exploit-explanation.md # Exploit usage documentation
│ └── react2shell.py # Main exploit — 4 attack modules + interactive shell
│
├── vulnerable-app/ # Vulnerable Next.js application
│ ├── README.md # Original vulnapp credits
│ ├── package.json # React 19.0.0 (vulnerable)
│ ├── app/ # Application source code
│ ├── curl_id.sh # Original exploit script (by zack0x01)
│ └── scripts/
│ └── restore.sh # Restoration script (my contribution)
│
└── docs/
├── screenshots/ # Exploitation demonstrations
│ ├── 01-app-initial.png
│ ├── 02-rce-basic.png
│ ├── 03-interactive-shell.png
│ ├── 04-no-payload.png
│ ├── 05-delete-result.png
│ ├── 06-deface.png
│ ├── 07-shutdown-servers.png
│ ├── 08-restore-from-script.png
│ └── 09-restore-from-interactive-shell.png
│
└── analysis/
├── 01-root-cause.md # Vulnerability root cause analysis
├── 02-payload-breakdown.md # Payload structure and execution flow
└── 03-timeline.md # CVE timeline
vulnerable-app/)cd vulnerable-app
npm install --legacy-peer-deps
npm run dev
# App available at http://localhost:3000
cd ../exploit
# Check if target is vulnerable
python3 react2shell.py -u http://localhost:3000 --check
# Execute single command
python3 react2shell.py -u http://localhost:3000 -c "whoami"
# Interactive shell mode
python3 react2shell.py -u http://localhost:3000 -i
| Módulo | Comando | Descrição | Impacto |
|---|---|---|---|
| Excluir Projetos | --delete-projects | Exclui todos os projetos do painel | Destruição de dados |
| Deface | --deface "message" | Substitui a página principal | Desfiguração |
| Roubar Ambiente | --steal-env | Rouba variáveis de ambiente | Exfiltração |
| Desligar Servidores | --shutdown-servers | Desliga todos os servidores | Negação de Serviço |
React Server Components usam um mecanismo customizado de serialização/desserialização (o protocolo "Flight") para enviar dados de componentes do servidor para o cliente. Ao processar server actions, o servidor desserializa os payloads recebidos sem validação adequada.
A falha central é a confiança comportamental: o desserializador verifica typeof obj.then === 'function' para identificar Promises, sem verificar se a propriedade pertence diretamente ao objeto. Isso permite que um atacante envenene Object.prototype.then, fazendo com que todo objeto comum pareça um thenable.
Um atacante pode criar um payload malicioso que:
__proto__:thenFunction via $1:constructor:constructornew Function(_prefix)process.mainModule.require('child_process').execSync()X-Action-RedirectUser-mode (unauthenticated)
│
├─ POST / (Next.js Server Action endpoint)
│ ├─ Headers: Next-Action: x
│ └─ Multipart body with malicious JSON
│
└─ React Flight deserializer processes payload
└─ Prototype pollution via __proto__:then
└─ Function constructor reached via $1:constructor:constructor
└─ new Function(_prefix) executes attacker's JavaScript
└─ execSync() runs system command
└─ Output embedded in NEXT_REDIRECT error
└─ Next.js converts to X-Action-Redirect header
A vulnerabilidade afeta qualquer aplicação Next.js que use o App Router com React Server Components — a configuração padrão desde o Next.js 14. Server Actions definidas explicitamente não são necessárias; a mera presença dos pacotes RSC afetados é suficiente.