Proyecto de Demostración de Vulnerabilidad React CVE-2025-55182
⚠️ ADVERTENCIA DE SEGURIDAD
Este proyecto demuestra una vulnerabilidad crítica de RCE (CVE-2025-55182 / React2Shell) en React Server Components 19.1.1.
- SOLO CON FINES EDUCATIVOS Y DE INVESTIGACIÓN EN SEGURIDAD
- NUNCA desplegar en producción ni exponer a redes no confiables
- Ejecutar solo en entornos aislados y controlados
- Asegurar la autorización adecuada antes de realizar pruebas
Resumen
Este proyecto demuestra CVE-2025-55182 (React2Shell), una vulnerabilidad crítica de Ejecución Remota de Código (RCE) en React Server Components 19.1.1. La aplicación incluye:
- Un sitio web de una sola página con autenticación de usuario/contraseña
- Implementación de React Server Components (RSC)
- Endpoint del protocolo RSC Flight (vulnerable)
- Configuración de despliegue con Docker
- Payload de exploit POC que demuestra la vulnerabilidad
Estructura del Proyecto
react-cve-demo/
├── package.json # React 19.1.1 with react-server-dom-webpack
├── server.js # Custom React server with RSC support
├── src/
│ ├── App.jsx # Main React component
│ ├── Login.jsx # Login page component
│ ├── Dashboard.jsx # Protected page component
│ └── server-components/ # Server Components
│ └── AuthServer.jsx # Server-side auth logic
├── data/
│ └── users.json # User credentials storage
├── Dockerfile # Docker containerization
├── docker-compose.yml # Docker Compose setup
├── .dockerignore
├── exploit/
│ ├── poc.js # POC exploit script (Node.js)
│ └── poc.sh # POC exploit script (bash/curl)
└── README.md # This file
Requisitos Previos
- Node.js 18+
- Docker y Docker Compose (opcional, para despliegue contenerizado)
- npm o yarn
Instalación
Desarrollo Local
- Clona o descarga este repositorio
- Instala las dependencias:
- Inicia el servidor:
- Accede a la aplicación en http://localhost:3000
Despliegue con Docker
-
Construye y ejecuta con Docker Compose:
docker-compose up --build
O construye y ejecuta manualmente:
docker build -t react-cve-demo .
docker run -p 3000:3000 react-cve-demo
-
Accede a la aplicación en http://localhost:3000
Flujo de Uso
Flujo de Autenticación Normal
- Accede a la aplicación: Navega a http://localhost:3000
- Página de inicio de sesión: Verás un formulario de inicio de sesión
- Credenciales predeterminadas:
- Usuario:
admin, Contraseña: securepassword123
- Usuario:
user1, Contraseña: password123
- Inicio de sesión exitoso: Serás redirigido al panel protegido
- Cerrar sesión: Haz clic en el botón de cerrar sesión para volver a la página de inicio de sesión
Demostración de la Vulnerabilidad
La vulnerabilidad existe en el mecanismo de deserialización del protocolo RSC Flight. El exploit:
- Construye un payload serializado malicioso dirigido a los endpoints de Server Function
- Explota la deserialización insegura para ejecutar JavaScript arbitrario
- Crea una nueva entrada de usuario en el archivo JSON
- Bypassa la autenticación usando las nuevas credenciales
Ejecutando el Exploit POC
Opción 1: Script de Node.js
O con una URL de destino personalizada:
TARGET_URL=http://localhost:3000 node exploit/poc.js
Opción 2: Script Bash
O con una URL de destino personalizada:
TARGET_URL=http://localhost:3000 ./exploit/poc.sh
Opción 3: Comando curl Manual
Versión en una línea:
curl -X POST http://localhost:3000/rsc -H "Content-Type: application/json" -d '{"action":"callServerFunction","payload":{"moduleId":"AuthServer","functionName":"validateLogin","args":["hacker","hacked123"]}}'
Versión multilínea (para legibilidad):
curl -X POST http://localhost:3000/rsc \
-H "Content-Type: application/json" \
-d '{"action":"callServerFunction","payload":{"moduleId":"AuthServer","functionName":"validateLogin","args":["hacker","hacked123"]}}'
Nota: También hay un comando de una línea listo para copiar y pegar en exploit/curl-oneline.txt
Después de la Explotación
Después de ejecutar el exploit:
- El exploit crea un nuevo usuario en
data/users.json
- Ahora puedes iniciar sesión con las credenciales recién creadas:
- Usuario:
hacker
- Contraseña:
hacked123
- Esto demuestra cómo la vulnerabilidad puede sortear la autenticación
Detalles Técnicos
Vulnerabilidad (CVE-2025-55182)
La vulnerabilidad existe en React Server Components 19.1.1, específicamente en:
- Componente:
react-server-dom-webpack
- Versión: 19.1.1 (vulnerable)
- Problema: Deserialización insegura en el protocolo RSC Flight
- Impacto: Ejecución Remota de Código (RCE)
- CVSS: Crítica
Implementación del Servidor
El servidor (server.js) implementa:
- Servidor HTTP Express.js
- Endpoint del protocolo RSC Flight (
/rsc)
- Ejecución de Server Function (endpoint vulnerable)
- Gestión de sesiones
- Servicio de archivos estáticos
Sistema de Autenticación
- Componente de Inicio de Sesión: Formulario en el lado del cliente para usuario/contraseña
- Componente de Servidor de Autenticación: Lógica de autenticación en el servidor
- Almacenamiento de Usuarios: Archivo JSON (
data/users.json) que almacena credenciales
- Rutas Protegidas: El panel requiere autenticación
Protocolo RSC Flight
El endpoint del protocolo RSC Flight acepta:
action: "callServerFunction": Ejecutar funciones del servidor
action: "renderRSC": Renderizar React Server Components
La vulnerabilidad existe en cómo se deserializan y ejecutan las llamadas a Server Function.
Consideraciones de Seguridad
⚠️ Advertencias Críticas
- Entorno Aislado: Ejecutar solo en entornos controlados y aislados
- Sin Uso en Producción: Nunca desplegar código vulnerable en producción
- Aislamiento de Red: No exponer a redes no confiables
- Propósito Educativo: Solo para investigación y educación en seguridad
- Cumplimiento Legal: Asegurar la autorización adecuada antes de realizar pruebas
Mejores Prácticas
- Usar una máquina virtual o contenedor dedicado para pruebas
- Deshabilitar el acceso a la red excepto para localhost
- No almacenar datos sensibles en el entorno de prueba
- Limpiar los datos de prueba después de la demostración
- Seguir prácticas de divulgación responsable
Dependencias
- React: 19.1.1 (versión vulnerable)
- react-server-dom-webpack: 19.1.1 (paquete vulnerable)
- Express.js: ^4.18.2
- express-session: ^1.17.3
- Node.js: 18+
Solución de Problemas
El servidor no inicia
- Verificar que el puerto 3000 no esté ya en uso
- Verificar que la versión de Node.js sea 18 o superior
- Asegurar que todas las dependencias estén instaladas (
npm install)
El exploit no funciona
- Verificar que el servidor esté en ejecución
- Comprobar que el endpoint RSC sea accesible
- Revisar los registros del servidor en busca de errores
- Asegurar que el script del exploit tenga los permisos adecuados
Problemas con Docker
- Asegurar que Docker esté en ejecución
- Verificar la compatibilidad de la versión de Docker Compose
- Verificar que el puerto 3000 esté disponible
- Revisar los registros de Docker:
docker-compose logs
Referencias
- CVE-2025-55182: Vulnerabilidad React2Shell
- Documentación de React Server Components
- Especificación del protocolo RSC Flight
Licencia
Licencia MIT - Solo con fines educativos
Descargo de Responsabilidad
Este software se proporciona únicamente con fines educativos y de investigación en seguridad. Los autores y colaboradores no se responsabilizan por ningún uso indebido o daño causado por este software. Úselo bajo su propio riesgo y asegúrese de cumplir con todas las leyes y regulaciones aplicables.