research 2025-12-26 · 5 min de leitura · updated 2026-09-21

React2Shell: RCE com CVSS 10.0 no Next.js

React2Shell (CVE-2025-55182 e CVE-2025-66478): RCE com CVSS 10.0 no Next.js com App Router, via o protocolo Flight dos React Server Components.

https://www.linkedin.com/in/julionarciso/

O que é React2Shell?

Recentemente, a comunidade de segurança cibernética identificou uma vulnerabilidade crítica que redefine o cenário de riscos para aplicações modernas: o React2Shell. Com uma pontuação máxima de 10.0 no CVSS , esta falha não é apenas um bug, mas uma porta aberta para o controle total de sistemas afetados.

Por que o Score 10.0 é tão grave?

O sistema CVSS mede o risco de vulnerabilidades em uma escala de 0.0 a 10.0. Quando uma falha atinge a nota máxima, ela é classificada como uma ameaça de Execução Remota de Código (RCE) de alta periculosidade. Isso significa que um atacante pode comprometer o sistema remotamente, sem estar autenticado e sem depender de qualquer erro humano do usuário final.

O Impacto Imediato e o Alvo Principal

O alvo principal desta falha (CVE-2025-55182 e CVE-2025-66478) é o ecossistema Next.js , especialmente aplicações com App Router (versões 15.x e futuras)

  • Ameaça em Massa: Até 39% dos ambientes de nuvem rastreados continham instâncias vulneráveis.
  • Configuração Padrão Vulnerável: Uma aplicação Next.js padrão recém-criada já é imediatamente explorável se não for atualizada.
  • Exploração Ativa: Já existem exploits públicos (PoCs) sendo utilizados por grupos de ameaça em ambientes reais.

Entendendo a Tecnologia: RSC e o Protocolo ‘Flight’

Para compreender a falha, é necessário entender como o React funciona no servidor:

  • RSCs (React Server Components): Executam componentes no lado do servidor para melhorar a performance e reduzir o bundle enviado ao cliente.
  • Protocolo Flight: É a “ponte” de comunicação. Diferente de uma API REST comum que entrega JSON estático, o Flight é um formato de streaming de texto e dados binários. Ele transfere em tempo real o estado do componente e a lógica de renderização do servidor para o browser, permitindo que a interface seja “montada” enquanto os dados ainda estão chegando.

Desserialização Insegura

A falha React2Shell ocorre devido à confiança implícita que o runtime do Node.js deposita no Protocolo Flight enviado pelo cliente.

  • O Ataque: Um agente malicioso cria um payload que simula dados do Flight, instruindo o servidor a desserializar (desempacotar) um objeto que é, na verdade, um comando malicioso.
  • Falha do Parser: O analisador do Flight não validava corretamente o tipo de objeto, permitindo a injeção de sequências de bytes interpretadas como objetos de runtime internos do Node.js com propriedades manipuladas.

Técnica de Exploração: Gadget Chains

Para alcançar a RCE, o atacante utiliza uma Gadget Chain :

  • Gadgets: Pequenos pedaços de código que já existem no Node.js ou em bibliotecas da aplicação.
  • Execução: O payload encadeia esses gadgets para chamar funções perigosas, como child_process.exec() , executando comandos no sistema operacional do servidor.

Fiz uma tabela para resumir como é feita essa exploração:

Tabela resumindo as etapas da exploração do React2Shell

Em essência: O atacante explorou a confiança do React na sua própria serialização, transformando uma entrada de dados esperada em uma instrução de execução de código para o servidor.

Demonstração Prática (POC)

Para demonstrar a exploração da CVE-2025-55182 (React2Shell), utilizaremos o container de um lab disponibilizado pelo pesquisador Chocapikk em seu repositório no GitHub.

GitHub - Chocapikk/CVE-2025-55182: Next.js React Server Components RCE exploit for CVE-2025-55182Next.js React Server Components RCE exploit for CVE-2025-55182 - Chocapikk/CVE-2025-55182GitHubChocapik class="img-link shimmer" >

Configuração do Ambiente:

  • Fonte: Repositório Chocapikk/CVE-2025-55182 (Disponível publicamente para fins de pesquisa e educação).
  • Execução: Após clonar o repositório e navegar para a pasta lab, o ambiente de teste é iniciado utilizando docker-compose:

bash “docker compose up -d" docker compose subindo o lab vulnerável do repositório Chocapikk

A interface da aplicação Next.js vulnerável fica acessível na porta 3011.

Interface da aplicação Next.js vulnerável na porta 3011

Ao configurar nosso payload e enviá-lo com sucesso, o comando simples executado no servidor abriu um canal de comunicação bidirecional , estabelecendo uma Shell Reversa. Esse resultado demonstra, de forma inequívoca, a Execução Remota de Código (RCE) e a obtenção de controle total sobre o sistema operacional do servidor alvo.

Shell reverso aberto no servidor depois do envio do payload

Como Proteger Sua Aplicação

Dada a classificação CVSS 10.0 e a facilidade de exploração, a correção da vulnerabilidade React2Shell (CVE-2025-55182 e CVE-2025-66478) é uma prioridade de segurança máxima e deve ser tratada como uma emergência.

Atualização Imediata

A única correção completa e oficial é a aplicação dos patches fornecidos pelo React e Next.js.

  • Ação Obrigatória: Atualize suas dependências para as versões que contenham a correção para a falha de desserialização insegura.
  • Para Usuários Next.js (Recomendado): A Vercel (empresa por trás do Next.js) disponibilizou um utilitário de linha de comando para garantir que as atualizações críticas sejam aplicadas corretamente.

bash “npx fix-react2shell-next"

Atualização Manual: Verifique e atualize manualmente para a versão mais recente dentro da sua linha de release(por exemplo, se estiver no 15.x, atualize para a versão mais recente pós-patch , como 15.0.7 ou superior).

Assuma a Violação e Reaja

Se houve a possibilidade de exploração (sua aplicação estava vulnerável e exposta), a atualização não é suficiente; você deve tomar medidas de resposta a incidentes:

  1. Rotação de Credenciais: Mude imediatamente todas as chaves de API, segredos, tokens e credenciais de banco de dados armazenadas como variáveis de ambiente no servidor afetado. Um atacante com RCE pode ter exfiltrado esses dados.
  2. Verificação de Backdoors: Inspecione o sistema de arquivos e os processos ativos do servidor para detectar shells persistentes, novos usuários ou backdoors inseridos pelo atacante.
  3. Análise de Logs: Revise os logs de acesso e segurança em busca de padrões incomuns de tráfego de saída (exfiltração de dados) ou execuções de comandos suspeitos.

Profundidade e Hardening

Para evitar que falhas futuras, como a React2Shell, causem danos máximos, implemente práticas de segurança em profundidade:

  • Princípio do Mínimo Privilégio: Certifique-se de que o processo Node.js que executa sua aplicação Next.js rode com o mínimo de privilégios possível. Se for explorado, o atacante terá acesso limitado ao sistema.
  • Web Application Firewall (WAF): Utilize um WAF para monitorar e filtrar requisições maliciosas. Embora WAFs nem sempre bloqueiem payloads de desserialização complexos, eles podem mitigar ataques de exploração conhecidos ou scans.
  • Segurança no Servidor: Use ferramentas de monitoramento de integridade de arquivos e detecção de runtime(como Falco ou equivalentes) para alertar sobre execuções de comandos não autorizadas (como a ativação de um reverse shell) no seu container ou máquina virtual.

O React2Shell é um lembrete severo de que a complexidade das arquiteturas modernas, como o RSC e seus protocolos proprietários, introduz novos vetores de ataque. A única defesa robusta é a aplicação imediata de patches e a manutenção contínua de um modelo de segurança em profundidade.

Esta postagem está licenciada sob CC BY 4.0 pelo autor.