
Escáner de seguridad para CVE-2025-55182 - Vulnerabilidad crítica de RCE en React Server Components. Escanea lockfiles de npm/pnpm/yarn, imágenes de Docker, SBOMs y URLs en vivo. Auto-corrección, salida SARIF, GitHub Actions, integración con Vercel y middleware de protección en tiempo de ejecución.
Escáner de seguridad para CVE-2025-55182 - una vulnerabilidad crítica (CVSS 10.0) de ejecución remota de código no autenticada en React Server Components.
⚠️ AVISO LEGAL
Este es un escáner de seguridad, NO una herramienta de explotación. Está diseñado para ayudar a desarrolladores y equipos de seguridad a identificar dependencias vulnerables en sus proyectos.
Este es un proyecto de código abierto impulsado por la comunidad, proporcionado "TAL CUAL", sin garantía de ningún tipo, expresa o implícita. Los autores y colaboradores no son responsables de ningún daño o incidente de seguridad derivado del uso de esta herramienta.
Úsalo bajo tu propio riesgo y responsabilidad. Verifica siempre los hallazgos manualmente y sigue las políticas de seguridad de tu organización. Si descubres algún problema, error o tienes sugerencias, por favor contribuye para ayudar a mejorar el proyecto para todos.
🤝 SE BUSCAN COLABORADORES
¡Este proyecto está buscando activamente probadores y colaboradores! Ya sea que quieras informar errores, sugerir funciones, mejorar la documentación o enviar código, todas las contribuciones son bienvenidas. Consulta nuestra Guía de Contribución para comenzar.
Este proyecto existe para ayudar a la comunidad a responder al CVE-2025-55182. Agradecemos y reconocemos a:
La forma más rápida de comprobar si tu proyecto es vulnerable:```bash npx react2shell-guard .
¡Eso es todo! Esto escaneará tu directorio actual y mostrará los resultados inmediatamente.
### 2. Escanear un proyecto específico```bash
npx react2shell-guard /path/to/your/project
¿Has encontrado vulnerabilidades? Corrígelas automáticamente:```bash
npx react2shell-guard fix --dry-run
npx react2shell-guard fix
npx react2shell-guard fix --install
### 4. Escanear URLs en vivo
Comprueba si una aplicación desplegada es vulnerable:```bash
npx react2shell-guard scan-url https://your-app.com
Confirma que tu corrección implementada está funcionando:```bash npx react2shell-guard verify-patch https://your-app.com
### 6. Escanear imágenes de contenedores
Comprueba si tus imágenes de Docker contienen paquetes vulnerables:```bash
npx react2shell-guard scan-image myapp:latest
Crea automáticamente un PR de GitHub para corregir vulnerabilidades:```bash npx react2shell-guard create-pr --dry-run # Preview npx react2shell-guard create-pr # Create PR
---
## ¿Qué es CVE-2025-55182?
El 29 de noviembre de 2025, el investigador de seguridad Lachlan Davidson descubrió y reveló de forma responsable una vulnerabilidad crítica en React Server Components. La falla radica en cómo React decodifica los payloads enviados a los endpoints de React Server Function, permitiendo a atacantes no autenticados lograr la ejecución remota de código en los servidores afectados sin ninguna interacción del usuario.
CVE-2025-55182 está clasificada con CVSS 10.0 (Crítico) y afecta a React Server Components (RSC) y a los frameworks que utilizan el protocolo "Flight" de RSC.
**Paquetes afectados:**
- `react-server-dom-webpack` 19.0.0, 19.1.0-19.1.1, 19.2.0
- `react-server-dom-parcel` (mismas versiones)
- `react-server-dom-turbopack` (mismas versiones)
- `next` 15.0.0-15.0.4, 15.1.0-15.1.8, 15.2.0-15.2.5, 15.3.0-15.3.5, 15.4.0-15.4.7, 15.5.0-15.5.6, 16.0.0-16.0.6
**Más información:**
- [React Security Advisory](https://react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components)
- [Wiz Research](https://www.wiz.io/blog/critical-vulnerability-in-react-cve-2025-55182)
---
## Instalación (Opcional)
Para un uso frecuente, instálelo globalmente:```bash
npm install -g react2shell-guard
Luego usa sin npx:```bash
react2shell-guard .
---
## Guía de uso
### Escaneo básico```bash
# Scan current directory
react2shell-guard .
# Scan specific directory
react2shell-guard /path/to/project
# Scan and ignore certain paths
react2shell-guard . --ignore-path "examples/**" "test/**"
react2shell-guard .
react2shell-guard . --json
react2shell-guard . --sarif
react2shell-guard . --html report.html
### Opciones de CLI
| Opción | Descripción |
|--------|-------------|
| `--json` | Mostrar resultados como JSON |
| `--sarif` | Mostrar resultados como SARIF 2.1.0 |
| `--html <file>` | Generar informe HTML independiente |
| `--no-exit-on-vuln` | No salir con código 1 cuando se encuentren vulnerabilidades |
| `--ignore-path <patterns>` | Rutas a ignorar (p. ej., `examples/**`) |
| `--debug` | Habilitar salida de depuración |
### Códigos de Salida
| Código | Significado |
|------|---------|
| `0` | No se encontraron vulnerabilidades |
| `1` | Vulnerabilidades detectadas |
| `2+` | Error fatal |
## Escaneo de URL en Vivo
Escanea endpoints en vivo para detectar si son vulnerables:```bash
# Scan a single URL
react2shell-guard scan-url https://example.com
# Batch scan from a file (one URL per line)
react2shell-guard scan-url urls.txt --list
# With options
react2shell-guard scan-url https://example.com --timeout 5000 --json
El escáner utiliza huellas digitales pasivas para detectar endpoints vulnerables de React Server Components sin explotar la vulnerabilidad:
Solicitud de prueba: Envía una solicitud POST manipulada que simula una llamada a Server Action de RSC con una carga útil mínima:
multipart/form-data con una estructura de datos similar a RSCNext-Action para activar el procesamiento de Server ActionAnálisis de la respuesta: Analiza la respuesta HTTP en busca de firmas de vulnerabilidad:
^[0-9]+:E{ - formato de error del protocolo RSC Flight"digest":"...RSC - digest de RSC en respuestas de errorReactServerComponentsError - nombres de clases de error de Reacttext/x-component.*error - tipo de contenido de error de componenteNo destructivo: Es puramente un mecanismo de detección: no ejecuta ninguna carga útil maliciosa ni explota la vulnerabilidad. La sonda utiliza datos benignos que provocan respuestas de error en servidores vulnerables, pero no causa ningún daño.
Nota: Una detección positiva significa que el servidor está ejecutando una versión vulnerable y devolvió una firma de error específica de RSC. NO significa que el servidor haya sido explotado.
Verifica si un objetivo ha sido parcheado contra la vulnerabilidad:```bash
react2shell-guard verify-patch https://example.com
react2shell-guard verify-patch https://example.com --json
### Cómo funciona la verificación de parches
La verificación de parches realiza **múltiples escaneos consecutivos** (predeterminado: 3) con breves demoras entre ellos para garantizar una detección precisa:
1. **Múltiples sondas**: Ejecuta la misma comprobación pasiva de huella digital 3 veces con demoras de 500 ms
2. **Puntuación de confianza**:
- **Confianza alta**: 2+ escaneos exitosos con resultados consistentes
- **Confianza media**: 1 escaneo exitoso con resultado concluyente
- **Confianza baja**: Todos los escaneos fallaron o resultados no concluyentes
3. **Clasificación de resultados**:
- **PATCHED**: No se detectaron firmas de vulnerabilidad en todos los escaneos exitosos
- **VULNERABLE**: Se detectó una firma de vulnerabilidad en uno o más escaneos
- **No concluyente**: Resultados mixtos o todos los escaneos fallaron
Este enfoque de múltiples escaneos reduce los falsos positivos debidos a problemas transitorios de red y proporciona mayor confianza en el estado del parche.
### Opciones de verificación
| Opción | Descripción |
|--------|-------------|
| `--timeout <ms>` | Tiempo de espera de solicitud en milisegundos (predeterminado: 10000) |
| `--json` | Muestra los resultados como JSON |
| `--skip-ssl-verify` | Omite la verificación del certificado SSL |
## Escaneo de imágenes de contenedores
Escanee imágenes de contenedores Docker/OCI para buscar paquetes vulnerables:```bash
# Scan a local or remote image
react2shell-guard scan-image myapp:latest
# Scan from a registry
react2shell-guard scan-image registry.example.com/myapp:v1.0
# Skip pulling (use local image only)
react2shell-guard scan-image myapp:latest --skip-pull
# With JSON output
react2shell-guard scan-image myapp:latest --json
# With SARIF output
react2shell-guard scan-image myapp:latest --sarif
Requisitos:
Bloquea los despliegues vulnerables antes de que lleguen a producción:```bash
react2shell-guard vercel-check
{ "scripts": { "vercel-build": "react2shell-guard vercel-check && next build" } }
{ "buildCommand": "npx react2shell-guard vercel-check && npm run build" }
### Vercel Check Options
| Option | Description |
|--------|-------------|
| `--no-fail` | Advierte pero no falla la compilación por vulnerabilidades |
| `--ignore-path <patterns>` | Rutas a ignorar (patrones glob) |
| `--debug` | Habilita la salida de depuración |
## GitHub PR Automation
Crea automáticamente una pull request para corregir vulnerabilidades:```bash
# Preview what will be done
react2shell-guard create-pr --dry-run
# Create branch and PR
react2shell-guard create-pr
# Create branch but don't push/create PR
react2shell-guard create-pr --no-push
# Custom branch name
react2shell-guard create-pr --branch fix/security-update
| Opción | Descripción |
|---|---|
--branch <name> | Nombre de la rama para la corrección (por defecto: fix/cve-2025-55182) |
--dry-run | Muestra lo que se haría sin realizar cambios |
--no-push | Crea la rama y los commits pero no hace push ni crea la PR |
Requisitos:
react2shell-guard - CVE-2025-55182 Scanner ──────────────────────────────────────────────────
Scanned 1 project(s)
✗ my-app [VULNERABLE] Path: /path/to/my-app Framework: nextjs v15.2.1 App Router: Yes (RSC enabled)
Vulnerabilities found: - react-server-dom-webpack @ 19.1.0 Upgrade to: 19.1.2 Advisory: https://react.dev/blog/2025/12/03/... - next @ 15.2.1 Upgrade to: 15.2.6 Advisory: https://react.dev/blog/2025/12/03/...
────────────────────────────────────────────────── VULNERABLE - Action required! Upgrade affected packages to patched versions immediately.
## Integración con GitHub Actions
> **Nota:** Publicamos activamente nuevas versiones con patrones de detección mejorados y correcciones. Usa `@v1` para versiones estables o `@latest` para la versión más reciente.
### Acción de GitHub Marketplace
La forma más sencilla de integrar es usando nuestra acción oficial de GitHub:```yaml
name: Security Scan
on: [push, pull_request]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Scan for CVE-2025-55182
uses: gensecaihq/react2shell-scanner@v1
with:
path: '.'
fail-on-vuln: true
name: Security Scan
on: [push, pull_request]
jobs: scan: runs-on: ubuntu-latest permissions: security-events: write # For SARIF upload pull-requests: write # For PR comments
steps:
- uses: actions/checkout@v4
- name: Scan for CVE-2025-55182
uses: gensecaihq/react2shell-scanner@v1
with:
path: '.'
format: sarif
fail-on-vuln: true
upload-sarif: true # Upload to GitHub Security tab
add-pr-comment: true # Comment on PRs with results
ignore-paths: 'examples/**,test/fixtures/**'
### Entradas de acción
| Entrada | Descripción | Predeterminado |
|-------|-------------|---------|
| `path` | Ruta a escanear | `.` |
| `scan-type` | Tipo de escaneo: `repo`, `sbom`, `container` | `repo` |
| `format` | Formato de salida: `text`, `json`, `sarif` | `text` |
| `fail-on-vuln` | Fallar si se encuentran vulnerabilidades | `true` |
| `upload-sarif` | Subir SARIF a GitHub Security | `false` |
| `add-pr-comment` | Añadir comentario de PR con resultados | `false` |
| `ignore-paths` | Rutas separadas por comas a ignorar | `''` |
| `sbom-file` | Ruta del archivo SBOM (cuando scan-type es sbom) | `''` |
| `container-image` | Imagen Docker (cuando scan-type es container) | `''` |
### Salidas de acción
| Salida | Descripción |
|--------|-------------|
| `vulnerable` | Si se encontraron vulnerabilidades (`true`/`false`) |
| `findings-count` | Número de paquetes vulnerables |
| `scan-result` | Resultado completo del escaneo (formato JSON) |
| `sarif-file` | Ruta al archivo de salida SARIF |
### Escanear imágenes de contenedores```yaml
- name: Scan Docker image
uses: gensecaihq/react2shell-scanner@v1
with:
scan-type: container
container-image: myapp:latest
### Uso manual de la CLI
Si prefieres usar la CLI directamente:```yaml
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Scan for vulnerabilities
run: npx react2shell-guard@latest .
react2shell-guard detecta y analiza automáticamente lockfiles de:
package-lock.json (formatos v2 y v3)pnpm-lock.yamlyarn.lock (formatos Classic y Berry)Actualiza automáticamente tu package.json para usar versiones parcheadas:```bash
react2shell-guard fix --dry-run
react2shell-guard fix
react2shell-guard fix --install
## Hooks de Pre-Commit
Instala hooks de git para evitar hacer commit de dependencias vulnerables:```bash
# Auto-detect hook framework and install
react2shell-guard init-hooks
# Preview what would be installed
react2shell-guard init-hooks --dry-run
# Force specific hook type
react2shell-guard init-hooks --hook-type husky
react2shell-guard init-hooks --hook-type lefthook
react2shell-guard init-hooks --hook-type standalone
Frameworks de hooks compatibles:
.husky/pre-commitlefthook.yml.git/hooks/pre-commitEl hook bloqueará los commits cuando package.json contenga dependencias vulnerables y sugerirá ejecutar react2shell-guard fix para remediarlo.
Escanea archivos SBOM CycloneDX en busca de vulnerabilidades:```bash
react2shell-guard scan-sbom bom.json
react2shell-guard scan-sbom bom.json --json
react2shell-guard scan-sbom bom.json --sarif
## MCP Server (Integración con Asistente de IA)
Inicia el servidor del Model Context Protocol para la integración con asistentes de IA:```bash
react2shell-guard mcp-server
Herramientas MCP disponibles:
scan_repo - Escanea un repositorio en busca de vulnerabilidadesscan_sbom - Escanea un archivo SBOM CycloneDXConfiguración con clientes compatibles con MCP (ejemplo de configuración):```json { "mcpServers": { "react2shell-guard": { "command": "npx", "args": ["react2shell-guard", "mcp-server"] } } }
## Middleware de protección en tiempo de ejecución
Middleware de defensa en profundidad que detecta y bloquea los intentos de explotación de CVE-2025-55182 en tiempo de ejecución.
### Express.js```typescript
import express from 'express';
import { createExpressMiddleware } from 'react2shell-guard/middleware';
const app = express();
// Add raw body parser for RSC payloads
app.use(express.raw({ type: 'text/x-component' }));
app.use(express.json());
// Add protection middleware
app.use(createExpressMiddleware({
action: 'block', // 'block' | 'log' | 'alert'
onAlert: (result, req) => {
// Send to your alerting system (Slack, PagerDuty, etc.)
console.error('CVE-2025-55182 exploit attempt:', result);
},
skipPaths: ['/health', '/metrics'],
}));
// middleware.ts import { withReact2ShellGuard } from 'react2shell-guard/middleware';
export const middleware = withReact2ShellGuard({ action: 'block', rscEndpointsOnly: true, // Only check RSC endpoints (recommended) });
export const config = { matcher: ['/((?!_next/static|_next/image|favicon.ico).*)'], };
**Patrones detectados:**
- Inyección de funciones serializadas
- Intentos de contaminación de prototipos
- Referencias a módulos malformadas
- Manipulación de acciones del servidor
- Cargas maliciosas codificadas
- Abuso del formato de streaming RSC
## Uso de la API```typescript
import { scan } from 'react2shell-guard';
const result = scan({
path: '/path/to/project',
ignorePaths: ['examples/**'],
debug: false,
});
console.log(result.vulnerable); // boolean
console.log(result.projects); // ProjectResult[]
{ "cve": "CVE-2025-55182", "vulnerable": true, "scanTime": "2025-12-04T10:30:00Z", "projects": [ { "name": "my-app", "path": "/path/to/my-app", "framework": { "type": "nextjs", "version": "15.2.1", "appRouterDetected": true }, "findings": [ { "package": "react-server-dom-webpack", "currentVersion": "19.1.0", "fixedVersion": "19.1.2", "severity": "critical", "advisoryUrl": "https://..." } ], "vulnerable": true } ], "errors": [] }
## Remediación
**Corrección automática (recomendada):**```bash
react2shell-guard fix --install
Actualización manual - paquetes de React:```bash npm install [email protected] # or 19.0.1, 19.2.1
**Actualización manual - Next.js:**```bash
npm install [email protected] # or other patched version for your release line
Versiones corregidas de Next.js por línea de versión:
npm install
npm run build
npm test
npm run dev
## Licencia
MIT
| Option | Description |
|---|
--list | Trata el objetivo como un archivo que contiene URLs |
--threads <n> | Número de hilos concurrentes (predeterminado: 10) |
--timeout <ms> | Tiempo de espera de la solicitud en milisegundos (predeterminado: 10000) |
--json | Muestra los resultados como JSON |
--skip-ssl-verify | Omite la verificación del certificado SSL |
--verbose | Muestra todos los resultados, incluidos los hosts no vulnerables |
| Opción | Descripción |
|---|
--timeout <ms> | Tiempo de espera de la operación en milisegundos (predeterminado: 120000) |
--skip-pull | Omitir la descarga de la imagen del registro (usar solo la local) |
--json | Mostrar resultados en JSON |
--sarif | Mostrar resultados en SARIF 2.1.0 |
--no-exit-on-vuln | No salir con el código 1 cuando se encuentren vulnerabilidades |
--debug | Habilitar la salida de depuración |