
react CVE-2025-55182
Gravidade: Crítica — CVSS 10.0
CWE: CWE-502 (Desserialização de Dados Não Confiáveis)
Fornecedor: Meta (Facebook)
Divulgado: 3 de dezembro de 2025
A CVE-2025-55182 é uma vulnerabilidade de execução remota de código (RCE) não autenticada de severidade máxima em React Server Components (RSC), apelidada de React2Shell. A falha reside na forma como o React decodifica payloads enviados a endpoints de React Server Function por meio do protocolo Flight. Um atacante pode enviar uma única solicitação HTTP POST especialmente elaborada a um servidor vulnerável e executar código arbitrário — sem credenciais e sem exigir interação do usuário.
Aplicações que não expõem endpoints explícitos de Server Function ainda são vulneráveis se suportarem React Server Components.
| Pacote | Versões Vulneráveis | Versões Corrigidas |
|---|
react-server-dom-webpack | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | ≥ 19.0.1 / 19.1.2 / 19.2.1 |
react-server-dom-parcel | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | ≥ 19.0.1 / 19.1.2 / 19.2.1 |
react-server-dom-turbopack | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | ≥ 19.0.1 / 19.1.2 / 19.2.1 |
Frameworks afetados (ao usar pacotes React vulneráveis): Next.js 15.x / 16.x (App Router), React Router, Waku, RedwoodSDK, Parcel RSC, plugin Vite RSC.
| Métrica | Valor |
|---|---|
| Vetor de Ataque | Rede |
| Complexidade do Ataque | Baixa |
| Privilégios Necessários | Nenhum |
| Interação do Usuário | Nenhuma |
| Escopo | Alterado |
| Confidencialidade | Alta |
| Integridade | Alta |
| Disponibilidade | Alta |
| Pontuação Geral | 10.0 (Crítica) |
String do vetor: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
React Server Components usam um formato binário de transmissão chamado protocolo Flight para transmitir árvores de componentes do servidor para o cliente. O mesmo protocolo lida com Server Functions (anteriormente Server Actions) — endpoints chamáveis que aceitam argumentos serializados do navegador.
A vulnerabilidade está no desserializador: quando o React processa um payload Flight, ele pode ser induzido a instanciar objetos arbitrários no lado do servidor, levando a RCE total. Como o endpoint Flight é exposto por padrão sempre que o RSC está habilitado e como não há barreira de autenticação no nível do protocolo, a exploração exige apenas acesso de rede ao servidor.
O template incluído CVE-2025-55182.yaml usa três métodos complementares de detecção.
Envia um POST mínimo com Content-Type: text/x-component para o caminho raiz. Um servidor RSC vulnerável (ou acessível) responde com o mesmo content-type e um corpo de stream Flight cujas linhas começam com IDs alfanuméricos seguidos de dois-pontos (ex.: 0:, 1:) ou símbolos de referência do React ($L, $S, $I, $@).
POST / HTTP/1.1
Content-Type: text/x-component
Accept: text/x-component, */*
Condição de correspondência: HTTP 200 + cabeçalho text/x-component + regex de stream Flight no corpo.
O Next.js sinaliza requisições RSC por meio do cabeçalho RSC: 1 e do parâmetro de consulta ?_rsc=. Esta requisição imita uma pré-busca do navegador para confirmar se o endpoint Flight do App Router está acessível.
GET /?_rsc=1 HTTP/1.1
Accept: text/x-component
RSC: 1
Next-Router-State-Tree: %5B%22%22%2C%7B%7D%5D
Condição de correspondência: HTTP 200 + cabeçalho text/x-component.
Envia um payload Flight mínimo e malformado juntamente com um cabeçalho Next-Action (o mecanismo usado para invocar Server Functions). Um servidor vulnerável tenta desserializar o payload; até mesmo uma resposta de erro que inclua cabeçalhos específicos do RSC confirma que o endpoint existe.
POST / HTTP/1.1
Content-Type: text/x-component
Next-Action: 0000000000000000000000000000000000000000
Condição de correspondência: HTTP 200/400/500 + cabeçalho text/x-component ou x-action-revalidated.
Analisa arquivos locais *.json (ex.: package-lock.json, yarn.lock) em busca dos nomes de pacotes vulneráveis combinados com uma regex de versão correspondente a 19.0.0, 19.1.0, 19.1.1 ou 19.2.0. Útil para auditar repositórios ou pipelines de CI sem enviar tráfego de rede.
# Install / update Nuclei
go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
nuclei -target CVE-2025-55182.yaml -u https://target.example.com
nuclei -target CVE-2025-55182.yaml -l targets.txt
nuclei -target CVE-2025-55182.yaml -target ./path/to/project
nuclei -target CVE-2025-55182.yaml -u https://target.example.com -v -je results.json
nuclei -target CVE-2025-55182.yaml -u https://target.example.com -rl 10 -timeout 10
Atualize imediatamente para uma versão corrigida:
# npm
npm install react-server-dom-webpack@latest
# yarn
yarn upgrade react-server-dom-webpack react-server-dom-parcel react-server-dom-turbopack
# pnpm
pnpm update react-server-dom-webpack react-server-dom-parcel react-server-dom-turbopack
Versões mínimas seguras por ramo:
| Ramo | Versão Mínima Segura |
|---|---|
| 19.0.x | 19.0.1 |
| 19.1.x | 19.1.2 |
| 19.2.x | 19.2.1 |
Mitigações temporárias (se a atualização não for imediatamente possível):
text/x-component em solicitações POST de entrada (as regras do Google Cloud Armor estão disponíveis publicamente para esta CVE).package-lock.json, node_modules ou um SBOM.Este template é destinado apenas a testes de segurança autorizados e avaliação de vulnerabilidades. Executá-lo contra sistemas que você não possui ou para os quais não tem permissão explícita por escrito pode ser ilegal. Os autores não aceitam responsabilidade por uso indevido.