
Análise técnica detalhada do CVE-2025-55182 (React2Shell), rastreando os internals do protocolo Flight do React para explicar a cadeia de exploração, a construção do payload e a análise da correção.
Autor: Kavienan J
Vulnerabilidade descoberta por: lachlan2k, que a divulgou de forma responsável à equipe do React.
Para atualizações sobre esta vulnerabilidade, visite: react2shell.com
ReactFlightReplyServer.jsA CVE-2025-55182 tem severidade avaliada em 10.0/10.0. Se você já olhou os PoCs públicos, deve ter notado que, embora eles mostrem o exploit funcionando, as explicações sobre por que o payload tem essa aparência podem parecer insuficientes — o que faz todo sentido, dada a complexidade do Protocolo Flight do React. O Flight, a camada de serialização por trás dos React Server Components e das Server Actions, é uma máquina de estados intrincada com mais de 1.100 linhas, e seu comportamento não é intuitivo a menos que você trace o código por conta própria.
Os PoCs da comunidade demonstram a vulnerabilidade claramente:
…mas quando você tenta responder "Por que isso funciona?", rapidamente se vê explorando os detalhes internos do React que nunca foram feitos para serem lidos linha por linha.
Nota: Muitos PoCs atribuem incorretamente a correção a alterações no
requireModule. Como veremos em A correção, o payload do exploit nunca chega a essa função — o código realmente vulnerável reside inteiramente emReactFlightReplyServer.js.
Este artigo é minha tentativa de fazer engenharia reversa da cadeia do exploit, rastreando passo a passo a lógica de decodificação e inicialização de chunks do React. Cada comportamento discutido aqui vem diretamente de como o ReactFlightReplyServer.js funcionava antes da correção (referência: https://github.com/facebook/react/blob/v19.2.0/packages/react-server/src/ReactFlightReplyServer.js), destilado e simplificado para que um desenvolvedor React/JS possa acompanhar com paciência suficiente.
Próxima seção: Contexto