A vulnerabilidade React2Shell (CVSS 10.0) expõe sites construídos com React a ataques de execução remota de código. Entenda como o protocolo Flight pode ser explorado e quais defesas sua empresa deve implementar para proteger seu site.
Ameaça React2Shell: Como o Protocolo Flight do React Pode Ser Explorado
Se seu site empresarial utiliza React Server Components (RSCs), é crucial entender uma vulnerabilidade de segurança grave que pode expor sua infraestrutura a ataques. Conhecida como React2Shell (CVE-2025-55182), essa falha de segurança de CVSS 10.0 permite a execução remota de código sem autenticação, transformando uma requisição HTTP em acesso ao seu servidor. Mas como isso acontece e o que sua empresa precisa fazer para se proteger?
A chave para entender essa vulnerabilidade está no protocolo Flight, um mecanismo customizado que o React usa para transmitir interfaces interativas. Diferente de HTML ou JSON, o Flight é um formato de streaming que reconstrói o comportamento executável no cliente. E é exatamente essa capacidade de “deserializar comportamento” que se torna um vetor de ataque, permitindo que invasores manipulem o protocolo para executar código malicioso.
O Que é o Protocolo Flight e Por Que Ele é um Risco?
Quando você acessa uma página construída com React Server Components, seu navegador não recebe HTML puro ou JSON simples. Em vez disso, ele recebe um stream de dados no formato Flight (Content-Type: text/x-component). Este protocolo é uma sequência de linhas, cada uma com um ID, uma tag e um payload, que o runtime do React no cliente reassemble em uma árvore de componentes interativa.
As tags do Flight podem indicar desde nós do DOM virtual (J) e metadados de módulos (M) até instruções de importação (I) e contextos de execução (D). No entanto, o verdadeiro ponto de atenção para a segurança reside no sistema de prefixos com cifrão ($).
Quando o parser do cliente encontra uma string que começa com $, ele não a trata como texto literal. Em vez disso, ele a interpreta como uma referência a um tipo específico de ação ou dado. Por exemplo:
- $F: Representa uma Server Action, um endpoint RPC que o cliente pode invocar no servidor.
- $: : Permite acesso a propriedades, como
$1:usuario:nome, que instrui o parser a resolver o chunk 1, acessar.usuarioe depois.nome. - $@: Expõe o objeto interno
Chunk, que o React usa para gerenciar o estado de resolução.
É aqui que o Flight se torna um “sink de desserialização”. Ele não apenas desserializa dados, mas também comportamento. Isso significa que o conteúdo do stream pode ditar qual código será carregado, quais funções serão chamadas e qual estado interno do framework será exposto. Se um atacante consegue influenciar esse stream, ele ganha controle sobre o fluxo de execução.
React2Shell: A Vulnerabilidade que Chocou a Comunidade
A CVE-2025-55182, apelidada de React2Shell, foi a prova de que essa teoria era uma realidade perigosa. Descoberta em dezembro de 2025, essa falha de segurança CVSS 10.0 permitia a execução remota de código não autenticada na camada de desserialização do Flight. Com uma requisição HTTP habilmente elaborada para um endpoint de Server Function, um atacante podia obter acesso de shell ao servidor, sem a necessidade de credenciais.
A gravidade foi tanta que a CISA (Cybersecurity & Infrastructure Agency) dos EUA a adicionou ao catálogo de vulnerabilidades conhecidas e exploradas. Houve relatos de exploração em campo por atores estatais, utilizando implantes sem arquivos via blockchain Ethereum. Isso demonstra o nível de sofisticação e o impacto real que essa vulnerabilidade pode ter.
A raiz do problema estava na forma como o Flight lida com o prefixo $: para acesso a propriedades. A função getOutlinedModel, que percorre caminhos separados por dois pontos (como $1:usuario:nome), não impedia que esses segmentos incluíssem __proto__ ou constructor. Isso abria a porta para ataques de prototype pollution, onde um atacante pode modificar protótipos base de objetos JavaScript, alterando o comportamento de outras partes do código.
Defesas Essenciais para Proteger Seu Site React
Para empresas que utilizam React Server Components, a proteção contra essas vulnerabilidades é uma prioridade. Durgesh Pawar, especialista em segurança, destaca um conjunto de defesas práticas e ranqueadas por impacto:
- Validação de Schema em Server Actions: Implemente validação rigorosa para todas as entradas em suas Server Actions. Isso garante que apenas dados esperados e seguros sejam processados, evitando que payloads maliciosos atinjam a camada de desserialização.
- Uso do Pacote
server-only: Este pacote ajuda a garantir que certos módulos e códigos sejam executados apenas no ambiente do servidor, impedindo que componentes sensíveis sejam expostos ou executados indevidamente no cliente. - Endurecimento Contra CSRF (Cross-Site Request Forgery): Vá além dos padrões de segurança do framework. Implemente proteções CSRF robustas para Server Actions, garantindo que as requisições que chegam ao servidor sejam legítimas e originadas de seu próprio site.
- Avaliando o Taint API e WAFs: Embora o Taint API e Web Application Firewalls (WAFs) possam oferecer uma camada adicional de segurança, eles devem ser vistos como complementos, não como soluções definitivas. WAFs podem filtrar algumas requisições maliciosas, mas a validação de entrada e a segurança no nível do código são mais eficazes contra ataques de desserialização.
A atenção à segurança de frameworks modernos como o React é vital. Entender como o protocolo Flight opera e os riscos de desserialização de comportamento é o primeiro passo para garantir que seu site empresarial esteja protegido. A UP Developer entende a importância de um site seguro, por isso, ao desenvolver sites com tecnologias avançadas, a segurança é sempre uma prioridade.
Perguntas frequentes
O que é a vulnerabilidade React2Shell?
React2Shell é uma vulnerabilidade crítica (CVSS 10.0) em React Server Components que permite a execução remota de código não autenticada. Ela explora falhas na desserialização do protocolo Flight, que o React usa para transmitir UIs interativas, permitindo que atacantes executem código malicioso no servidor.
Como o protocolo Flight se diferencia de JSON e HTML?
O protocolo Flight não é HTML nem JSON. É um formato de streaming customizado, linha por linha, que o runtime do React usa para reconstruir componentes e comportamentos executáveis no cliente. Ele inclui referências a módulos, pontos de acesso RPC e lógica de carregamento, tornando-o mais complexo e com mais superfície de ataque que um formato de dados simples.
Quais são os principais riscos de segurança do protocolo Flight?
Os principais riscos incluem prototype pollution, onde atacantes manipulam objetos JavaScript através de referências como $:__proto__, e a capacidade de desserializar comportamento, que permite a invocação de funções e exposição de estado interno do framework. Isso transforma o stream de dados em um vetor para execução de código.
O que minha empresa deve fazer para se proteger contra o React2Shell?
Sua empresa deve implementar validação de schema rigorosa em todas as Server Actions, usar o pacote server-only para isolar código do servidor, e fortalecer as defesas contra CSRF. Além disso, é importante manter-se atualizado com as correções de segurança do React e considerar o uso de WAFs como uma camada adicional de proteção.
Essa vulnerabilidade afeta todos os sites que usam React?
A vulnerabilidade React2Shell afeta especificamente sites que utilizam React Server Components e o protocolo Flight. Se seu site usa React, mas não Server Components, ele pode não estar diretamente exposto a essa falha específica, mas outras vulnerabilidades podem existir. A avaliação de segurança deve ser abrangente.
Fonte: Smashing Magazine