Prueba de concepto para CVE-2025-55182 ("React2Shell"). Un entorno completamente dockerizado que demuestra la ejecución remota de código (RCE) a través de la deserialización insegura en React Server Components. Incluye objetivos vulnerables tanto para Vanilla React (Express) como para Next.js, junto con un script de exploit personalizado en Python.
⚠️ AVISO: SOLO USO EDUCATIVO Este repositorio contiene código funcional de explotación para una vulnerabilidad crítica (CVSS 10.0). Está destinado estrictamente a fines de investigación académica, análisis de seguridad y educativos. No utilice este código contra sistemas que no sean de su propiedad o para los cuales no tenga permiso explícito de prueba. El autor no es responsable de ningún uso indebido.
Este proyecto documenta y demuestra CVE-2025-55182, una vulnerabilidad crítica de Ejecución Remota de Código (RCE) que reside en la arquitectura React Server Components (RSC). A menudo denominada "React2Shell", esta falla permite a atacantes remotos no autenticados ejecutar código arbitrario en el servidor manipulando el protocolo de serialización "Flight" utilizado por react-server.
Este laboratorio proporciona un entorno Docker controlado y aislado para analizar la vulnerabilidad en dos escenarios distintos:
react-server-dom-webpack y Express.El entorno está orquestado mediante Docker Compose y consta de tres contenedores aislados conectados por una red interna privada ().
research-net| Servicio | Contexto | Descripción | Componente Vulnerable |
|---|---|---|---|
vanilla-target | vanilla-rsc/ | Servidor Express mínimo que implementa manualmente el protocolo RSC. | [email protected] |
nextjs-target | nextjs-app/ | Aplicación estándar Next.js que usa App Router. | [email protected] (impl. react-server) |
atacante | exploit/ | Entorno Python que contiene los scripts de explotación. | N/A |
La vulnerabilidad proviene de una Deserialización Insegura (CWE-502) dentro del analizador del protocolo Flight. Al inyectar un payload multipart manipulado que contiene una estructura de "chunk" falsa, un atacante puede:
.then de un objeto similar a una promesa.$B).Function() para compilar y ejecutar JavaScript arbitrario (por ejemplo, child_process.execSync).Clonar el repositorio:
git clone https://github.com/trax69/cve-2025-55182-poc.git
cd cve-2025-55182-poc
Construir y lanzar el laboratorio:
docker-compose up -d --build
Espere a que los contenedores se inicialicen completamente. El contenedor de Next.js puede tardar unos minutos en completar su primera compilación.
La lógica de explotación está encapsulada en exploit/exploit.py. Puede ejecutar ataques desde su máquina host (si Python está instalado) o directamente desde el contenedor atacante.
Acceder al shell del atacante:
docker-compose exec atacante bash
Instalar requisitos:
pip install -r requirements.txt
Atacar Objetivo A (Vanilla React):
python exploit.py http://vanilla-target:4000/rsc vanilla
Atacar Objetivo B (Next.js):
python exploit.py http://nextjs-target:3000/ nextjs
El exploit intenta crear un archivo llamado pwned.txt dentro del directorio /tmp del servidor víctima. Para verificar el éxito:
# Verificar Servidor Vanilla
docker-compose exec vanilla-target ls -la /tmp/pwned.txt
# Verificar Servidor Next.js
docker-compose exec nextjs-target ls -la /tmp/pwned.txt
Si tiene éxito, verá el listado del archivo. Si el exploit falla, el archivo no existirá.
Para remediar esta vulnerabilidad en entornos de producción:
react-server-dom-webpack (y paquetes relacionados) a la versión 19.0.1, 19.1.2 o 19.2.1+."$1:__proto__" o usos inusuales de "$@" en cuerpos multipart.Proyecto Universitario - Auditoría de Seguridad e Investigación de Vulnerabilidades