React2Shell: A Vulnerabilidade Crítica que Está Afetando Milhares de Aplicações React
Olá HaWkers, uma das vulnerabilidades mais graves da história do ecossistema React foi descoberta e está sendo ativamente explorada por grupos de hackers. Batizada de "React2Shell" (CVE-2025-55182), ela recebeu a pontuação máxima de 10.0 no CVSS e permite execução remota de código em servidores que utilizam React Server Components.
Se você desenvolve aplicações com Next.js, Remix ou qualquer framework que utilize React Server Components, este artigo é de leitura obrigatória. Vamos entender o que aconteceu, como funciona a vulnerabilidade e, principalmente, como proteger suas aplicações.
O Que É o React2Shell
O nome "React2Shell" é uma referência direta ao devastador Log4Shell de 2021. Assim como seu predecessor, esta vulnerabilidade permite que atacantes executem código arbitrário em servidores sem necessidade de autenticação.
Detalhes Técnicos:
- CVE: CVE-2025-55182
- CVSS Score: 10.0 (Crítico)
- Tipo: Remote Code Execution (RCE)
- Versões Afetadas: React 19.0.0 a 19.2.0
- Descoberto por: Lachlan Davidson
- Data de Divulgação: 3 de dezembro de 2025
A vulnerabilidade está localizada no protocolo Flight do React, responsável por serializar e deserializar árvores de componentes entre cliente e servidor.
Como a Vulnerabilidade Funciona
O problema está na forma como o React Server Components processa payloads recebidos do cliente. Durante a deserialização, o decoder do lado do servidor falha em validar adequadamente os dados recebidos.
O Protocolo Flight
O React Server Components utiliza um protocolo interno chamado Flight para comunicação entre cliente e servidor. Este protocolo serializa a árvore de componentes em um formato especial que pode ser transmitido via HTTP.
// Exemplo simplificado do fluxo normal do Flight Protocol
// SERVIDOR: Serializa componente
const serialized = await renderToFlightStream(<ServerComponent />);
// CLIENTE: Recebe e processa
const response = await fetch('/api/component');
const stream = response.body;
// SERVIDOR: Deserializa payload do cliente
// AQUI ESTÁ O PROBLEMA - sem validação adequada
const clientPayload = await parseFlightRequest(request);O Vetor de Ataque
Um atacante pode criar um payload malicioso que, quando deserializado pelo servidor, executa código arbitrário:
// Payload malicioso (NÃO execute este código!)
// Demonstração educacional do vetor de ataque
// O atacante envia uma requisição HTTP crafted
// contendo objetos serializados maliciosos que
// exploram a deserialização insegura
// O servidor, ao processar o payload, executa
// comandos como se fossem parte legítima da
// árvore de componentes
// Resultado: Shell reverso, exfiltração de dados,
// ou qualquer comando no servidorA gravidade é amplificada pelo fato de que configurações padrão são vulneráveis. Uma aplicação Next.js criada com create-next-app e deployada em produção pode ser explorada sem nenhuma modificação de código.
Exploração Ativa por Grupos de Hackers
A situação se tornou crítica quando, poucas horas após a divulgação pública em 3 de dezembro de 2025, múltiplos grupos de hackers começaram a explorar ativamente a vulnerabilidade.
Grupos Identificados:
- Earth Lamia: Grupo com nexos na China
- Jackpot Panda: Outro grupo com ligações chinesas
- CL-STA-1015: Initial Access Broker com suspeitas de ligação com o Ministério de Segurança do Estado da China
Táticas Observadas:
- Instalação de loaders do Mirai (botnet)
- Shells reversos conectados a servidores Cobalt Strike
- Instalação de Trojans SNOWLIGHT e VShell
- Exfiltração de credenciais AWS de variáveis de ambiente
- Coleta de tokens e secrets de metadata de instâncias cloud
Timeline de Exploração
| Data | Evento |
|---|---|
| 29/11/2025 | Divulgação responsável para Meta |
| 03/12/2025 | Patch lançado pelo React e Vercel |
| 03/12/2025 | Primeiras tentativas de exploração detectadas |
| 05/12/2025 06:00 UTC | Exploração em massa após PoC público |
| 06/12/2025 | Adicionado ao CISA KEV |
Como Verificar Se Você Está Vulnerável
A primeira ação é verificar qual versão do React sua aplicação está utilizando.
Verificação Rápida
# Verificar versão do React
npm list react
# Verificar versão do Next.js (se aplicável)
npm list next
# Verificar todas as dependências React
npm list | grep reactVersões Vulneráveis
- React 19.0.0
- React 19.1.0 e 19.1.1
- React 19.2.0
Versões Corrigidas
- React 19.0.1
- React 19.1.2
- React 19.2.1
Se você está utilizando React 18.x ou anterior, você não está vulnerável a esta CVE específica, pois React Server Components não existiam nessas versões.
Como Corrigir Imediatamente
A correção é simples: atualize para as versões patched.
Para Projetos npm
# Atualizar React para versão corrigida
npm update react react-dom
# Ou especificar versão exata
npm install react@19.2.1 react-dom@19.2.1
# Atualizar Next.js (se aplicável)
npm update nextPara Projetos yarn
# Atualizar dependências
yarn upgrade react react-dom
# Ou versão específica
yarn add react@19.2.1 react-dom@19.2.1Para Projetos pnpm
# Atualizar para versões corrigidas
pnpm update react react-dom
# Versão específica
pnpm add react@19.2.1 react-dom@19.2.1
Medidas Adicionais de Proteção
Além da atualização, existem outras medidas que você deve considerar.
1. Verificar Logs de Acesso
Procure por padrões suspeitos nos logs do seu servidor:
# Buscar por tentativas de exploração em logs nginx
grep -E "(wget|curl|chmod|/bin/sh|/bin/bash)" /var/log/nginx/access.log
# Para logs de aplicação Node.js
grep -E "child_process|exec\(|spawn\(" logs/app.log2. Implementar WAF Rules
Se você utiliza Cloudflare, AWS WAF ou similar, adicione regras para bloquear payloads maliciosos:
// Exemplo de middleware de proteção adicional
// para Next.js/Express
function securityMiddleware(req, res, next) {
const contentType = req.headers['content-type'];
// Rejeitar content-types suspeitos
if (contentType && contentType.includes('text/x-component')) {
// Validar tamanho do payload
const contentLength = parseInt(req.headers['content-length'], 10);
if (contentLength > 1000000) { // 1MB limite
return res.status(413).json({ error: 'Payload too large' });
}
}
next();
}3. Rotacionar Credenciais
Se você suspeita de comprometimento, rotacione imediatamente:
- Chaves AWS (Access Key e Secret Key)
- Tokens de API (GitHub, Stripe, etc.)
- Variáveis de ambiente sensíveis
- Certificados TLS/SSL
- Senhas de banco de dados
Lições Para o Futuro
Esta vulnerabilidade expõe problemas estruturais importantes no ecossistema.
Serialização É Perigosa
Deserializar dados não confiáveis é historicamente uma das principais fontes de vulnerabilidades críticas. Log4Shell, Java ObjectInputStream, Python pickle - o padrão se repete.
Boas práticas:
- Nunca confie em dados serializados de fontes não confiáveis
- Implemente validação estrita de schemas
- Use formatos como JSON que não permitem execução de código
- Considere assinaturas criptográficas para dados serializados
Frameworks Não São Infalíveis
Mesmo frameworks populares e bem mantidos como React podem conter vulnerabilidades críticas. Isso reforça a importância de:
- Manter dependências atualizadas
- Monitorar feeds de segurança
- Ter planos de resposta a incidentes
- Implementar defesa em profundidade
O Impacto no Ecossistema React
O React2Shell provavelmente causará mudanças significativas no ecossistema.
Mudanças Esperadas:
- Auditorias de Segurança: Maior escrutínio do código relacionado a RSC
- Validação de Entrada: Implementação de validação mais rígida no protocolo Flight
- Ferramentas de Scanning: Novas ferramentas para detectar vulnerabilidades similares
- Documentação: Guias mais detalhados sobre segurança em SSR/RSC
Impacto em Desenvolvedores
| Área | Impacto |
|---|---|
| Atualizações | Urgência em atualizar dependências |
| CI/CD | Necessidade de scans de segurança |
| Monitoramento | Alertas para vulnerabilidades |
| Conhecimento | Entender SSR/RSC profundamente |
Conclusão
O React2Shell é um lembrete importante de que segurança deve ser uma prioridade constante no desenvolvimento de software. Mesmo utilizando as tecnologias mais populares e bem mantidas, vulnerabilidades críticas podem surgir.
Ações imediatas que você deve tomar:
- Verificar qual versão do React você está usando
- Atualizar para versões corrigidas (19.0.1, 19.1.2, ou 19.2.1)
- Revisar logs em busca de tentativas de exploração
- Rotacionar credenciais se houver suspeita de comprometimento
- Implementar monitoramento de segurança contínuo
Se você quer se aprofundar em segurança para aplicações web modernas, recomendo que dê uma olhada em outro artigo: Mais de 10 Mil Imagens do Docker Hub Vazando Credenciais onde você vai descobrir como proteger seus containers contra exposição de secrets.

