
Laboratorio de investigación de seguridad para CVE-2025-55183 y CVE-2025-55184 en React Server Components
Un entorno integral de pruebas de seguridad para las vulnerabilidades CVE-2025-55183 (Exposición de Código Fuente) y CVE-2025-55184 (Denegación de Servicio) en React Server Components.
SOLO PARA FINES EDUCATIVOS Y DE INVESTIGACIÓN EN SEGURIDAD
Este repositorio contiene aplicaciones deliberadamente vulnerables y herramientas de explotación. Pruebe únicamente en sistemas que le pertenezcan o para los que tenga permiso explícito por escrito. Las pruebas no autorizadas son ilegales y poco éticas.
Ambas vulnerabilidades afectan a las versiones 19.0.0 a 19.2.2 de React Server Components, divulgadas el 11 de diciembre de 2025.
| Propiedad | Valor |
|---|---|
| Severidad | Media (CVSS 5.3) |
| Tipo | Divulgación de información |
| Impacto | Exposición del código fuente del servidor |
| Autenticación | No se requiere |
Los atacantes pueden forzar los argumentos de Server Actions para filtrar código fuente exclusivo del servidor llamando a .toString() en objetos de funciones del servidor. Esto expone:
| Propiedad | Valor |
|---|---|
| Severidad | Alta (CVSS 7.5) |
| Tipo | Denegación de servicio |
| Impacto | Interrupción completa del servicio |
| Autenticación | No se requiere |
Las cargas útiles especialmente diseñadas crean una recursión infinita de promesas, lo que provoca que el servidor Node.js se bloquee indefinidamente. Esto resulta en:
| Aspecto | CVE-2025-55183 | CVE-2025-55184 |
|---|---|---|
| Severidad | Media | Alta |
| Tipo | Divulgación de información | Denegación de servicio |
| Impacto | Fuga de código fuente | Caída del servidor |
| Detección | La respuesta contiene código | Tiempo de espera/bloqueo del servidor |
| Recuperación | Inmediata | Requiere reinicio |
TL;DR: La aplicación ES vulnerable (React 19.0.0), pero las protecciones modernas pueden evitar el cierre real en este entorno de demostración.
CVE-2025-55184 es una vulnerabilidad REAL y CRÍTICA que afecta a React 19.0.0-19.2.2 en entornos de producción. Sin embargo, demostrar con éxito la caída por DoS en una demo local puede ser complicado debido a:
Incluso si el exploit no provoca la caída de la demo, puede verificar la vulnerabilidad mediante:
cd vulnerable-app
npm list react react-dom
# Output shows:
[email protected] ← VULNERABLE VERSION
[email protected] ← VULNERABLE VERSION
Si ve 19.0.0 hasta 19.2.2, la aplicación ES vulnerable.
cd scanner
python scan.py http://localhost:3000
El escáner comprueba:
git clone https://github.com/StealthMoud/react-server-cve-lab.git
cd react-server-cve-lab
# Start the app (vulnerable to both CVEs)
docker-compose up --build -d
# App available at: http://localhost:3000
cd scanner
# Install dependencies
pip install -r requirements.txt
# Scan for both vulnerabilities
python scan.py http://localhost:3000
# Scan only CVE-2025-55183
python scan.py --cve 55183 http://localhost:3000
# Scan only CVE-2025-55184
python scan.py --cve 55184 http://localhost:3000
# Scan multiple targets
python scan.py --file targets.txt
react-server-cve-lab/
├── README.md # This file
├── DOCUMENTATION.md # Complete technical documentation
├── LICENSE
├── .gitignore
├── docker-compose.yml
│
├── vulnerable-app/ # Vulnerable to BOTH CVEs
│ ├── Dockerfile
│ ├── package.json
│ ├── next.config.js
│ └── app/
│ ├── layout.js
│ ├── page.js
│ └── actions.js # Vulnerable server actions
│
├── scanner/
│ ├── requirements.txt
│ ├── scan.py # Scanner for both CVEs
│ └── README.md
│
└── exploits/
├── exploit-55183.py # PoC for CVE-2025-55183
├── exploit-55184.py # PoC for CVE-2025-55184
└── README.md
La aplicación es una app de Next.js que ejecuta React 19.0.0 con Server Actions, vulnerable a ambas CVE.
# Using Docker Compose (recommended)
docker-compose up --build -d
# Check if running
curl http://localhost:3000
# View logs
docker-compose logs -f
# Stop the app
docker-compose down
cd vulnerable-app
npm install
npm run build
npm start
El escáner unificado detecta tanto CVE-2025-55183 como CVE-2025-55184.
cd scanner
# Scan for both CVEs
python scan.py http://localhost:3000
# Scan specific CVE only
python scan.py --cve 55183 http://localhost:3000
python scan.py --cve 55184 http://localhost:3000
# Verbose output
python scan.py --verbose http://localhost:3000