
Escáner de vulnerabilidades pasivo para CVE-2025-55182 y CVE-2025-66478, detectando RCE no autenticado en React Server Components mediante huellas digitales del framework, análisis de versiones y sondeo de endpoints RSC.
Herramienta de Detección de Ejecución Remota de Código en el Protocolo Flight de React Server Components
Este escáner identifica sistemas potencialmente vulnerables a CVE-2025-55182 (React) y CVE-2025-66478 (Next.js), vulnerabilidades críticas de ejecución remota de código no autenticada en el protocolo "Flight" de React Server Components (RSC).
Factores Clave de Riesgo:
Una vulnerabilidad crítica de deserialización insegura en la implementación de Server Components de React. El protocolo "Flight" de RSC no valida correctamente la estructura y los tipos de las cargas útiles entrantes, lo que permite a atacantes inyectar datos maliciosos que influyen en la ejecución del lado del servidor.
Atacante → POST HTTP elaborado → Endpoint RSC → Deserialización → RCE
El ataque solo requiere una solicitud HTTP especialmente diseñada a cualquier endpoint de Server Function. No se necesita autenticación y las configuraciones predeterminadas son vulnerables.
El escáner utiliza huella digital pasiva y sondeo de protocolo para identificar sistemas potencialmente vulnerables. NO intenta la explotación.
┌─────────────────────────────────────────────────────────────────┐
│ TUBERÍA DE DETECCIÓN │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 1. Detección de Framework │
│ ├── Cabeceras HTTP (X-Powered-By: Next.js) │
│ ├── Código fuente de página (__NEXT_DATA__, artefactos react)│
│ └── Manifiestos de compilación │
│ │
│ 2. Huella Digital de Versión │
│ ├── Cadenas de versión incrustadas en bundles JS │
│ ├── Patrones de versión de paquetes │
│ └── Análisis de manifiesto de compilación │
│ │
│ 3. Descubrimiento de Endpoints RSC │
│ ├── Enviar cabeceras RSC (RSC: 1, Accept: text/x-component)│
│ ├── Analizar Content-Type de respuesta │
│ └── Detectar marcadores del protocolo Flight en respuesta │
│ │
│ 4. Sondeo de Server Actions │
│ ├── Solicitud POST con carga útil Flight mínima │
│ ├── Verificar procesamiento de deserialización │
│ └── Identificar endpoints de acción │
│ │
│ 5. Evaluación de Vulnerabilidad │
│ ├── Correlacionar versión con rangos vulnerables conocidos │
│ ├── Ponderar presencia de endpoint RSC │
│ └── Generar veredicto con nivel de confianza │
│ │
└─────────────────────────────────────────────────────────────────┘
El protocolo Flight utiliza un formato de cable específico:
0:["$","div",null,{"children":"Hello"}]
1:["$","$L1",null,{}]
2:{"name":"ServerComponent"}
El escáner busca:
text/x-component{número}:{carga}$, $L, $F, $@, $undefinedBusca patrones de versión en:
/_next/static/chunks/)[email protected])requests# Clonar o descargar los archivos del escáner
# Instalar dependencias
pip install -r requirements.txt
# Verificar instalación
python3 cve-2025-55182-scanner.py --help
# Objetivo único
python3 cve-2025-55182-scanner.py -t https://example.com
# Con salida detallada
python3 cve-2025-55182-scanner.py -t https://example.com -v
# Crear archivo de objetivos (una URL por línea)
echo "https://app1.example.com" > targets.txt
echo "https://app2.example.com" >> targets.txt
# Escanear todos los objetivos
python3 cve-2025-55182-scanner.py -f targets.txt -o results.json
python3 cve-2025-55182-scanner.py -t https://example.com \
--timeout 15 \
--threads 10 \
--user-agent "SecurityAudit/1.0" \
-v \
-o scan_results.json
Para un análisis más profundo del protocolo:
python3 rsc_analyzer.py https://example.com 2>/dev/null
Esto proporciona un análisis detallado del protocolo Flight y enumeración de componentes.
======================================================================
Target: https://app.example.com
Status: VULNERABLE
Framework: Next.js
Version: 19.1.0
RSC Endpoints: /, /_next/data
Evidence:
- X-Powered-By header: Next.js
- React version detected: 19.1.0
- RSC Flight response at / (Content-Type: text/x-component)
- Flight protocol markers detected at /
Recommendations:
→ CRITICAL: Immediate patching required!
→ Upgrade React to 19.0.1, 19.1.2, or 19.2.1
→ Upgrade Next.js to latest patched version (15.0.5+, 16.0.7)
→ Enable WAF rules to block malicious RSC payloads
→ Monitor for anomalous POST requests to RSC endpoints
======================================================================
{
"target": "https://app.example.com",
"status": "VULNERABLE",
"framework": "Next.js",
"version": "19.1.0",
"rsc_endpoints": ["/", "/_next/data"],
"evidence": [
"X-Powered-By header: Next.js",
"React version detected: 19.1.0",
"RSC Flight response at / (Content-Type: text/x-component)"
],
"recommendations": [
"CRITICAL: Immediate patching required!",
"Upgrade React to 19.0.1, 19.1.2, or 19.2.1"
]
}
✅ Cadena de versión explícita encontrada en los bundles
✅ Cabecera X-Powered-By expone la versión
✅ Múltiples indicadores RSC presentes
✅ Respuesta del protocolo Flight confirmada
✅ El servidor acepta solicitudes POST RSC
❌ No se expone información de versión
❌ WAF/CDN enmascarando respuestas
❌ Implementación de framework personalizada
❌ Caché intensa que impide las sondas
❌ Limitación de velocidad que bloquea la detección
| Escenario | Por qué Ocurre | Mitigación |
|---|---|---|
| Cadena de versión antigua en caché | Caché de CDN/compilación | Revisar múltiples endpoints |
| RSC deshabilitado después de actualización | Cambio de configuración sin reconstruir |
| Factor | Impacto en la Detección |
|---|---|
| Cloudflare/WAF | Puede bloquear sondas, enmascarar cabeceras |
Para hallazgos críticos, siempre validar con:
npm audit o yarn auditAcciones Inmediatas (0-24 horas):
Parchear inmediatamente
npm install [email protected] [email protected]
npm install [email protected] # o la última versión parcheada
Habilitar reglas WAF - Cloudflare, Akamai y AWS WAF han implementado reglas protectoras
Monitorear logs en busca de solicitudes POST sospechosas a endpoints RSC
Acciones a Corto Plazo (24-72 horas):
package.json# Escanear todos los activos de la empresa por lotes
cat domains.txt | while read domain; do
python3 cve-2025-55182-scanner.py -t "$domain" -o "results_${domain//\//_}.json"
done
# Agregar resultados
jq -s '[.[] | select(.status == "VULNERABLE" or .status == "LIKELY_VULNERABLE")]' results_*.json > critical_findings.json
# Ejemplo de GitHub Actions
- name: CVE-2025-55182 Check
run: |
python3 cve-2025-55182-scanner.py -t ${{ env.APP_URL }} -o results.json
if grep -q '"status": "VULNERABLE"' results.json; then
echo "::error::¡Vulnerabilidad crítica detectada!"
exit 1
fi
| Versión | Fecha | Cambios |
|---|---|---|
| 1.0.0 | 2025-12-03 | Lanzamiento inicial |
Esta herramienta se proporciona únicamente para pruebas de seguridad autorizadas. Úsela solo contra sistemas que posea o para los que tenga permiso explícito por escrito para realizar pruebas. Los autores no asumen ninguna responsabilidad por el mal uso o daño causado por esta herramienta.
| Paquete | Versiones Vulnerables | Versiones Parcheadas |
|---|
| react-server-dom-webpack | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | 19.0.1, 19.1.2, 19.2.1 |
| react-server-dom-parcel | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | 19.0.1, 19.1.2, 19.2.1 |
| react-server-dom-turbopack | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | 19.0.1, 19.1.2, 19.2.1 |
| Next.js | 14.3.0-canary.77+, 15.x, 16.0.0-16.0.6 | 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7, 16.0.7 |
| Indicador | Método de Detección | Confianza |
|---|
X-Powered-By: Next.js | Inspección de cabecera HTTP | Alta |
Etiqueta script __NEXT_DATA__ | Análisis de fuente HTML | Alta |
Rutas de activos /_next/ | Análisis de fuente HTML | Media |
| Marcadores de hidratación de React | Análisis de fuente HTML | Media |
| Opción | Descripción | Predeterminado |
|---|
-t, --target | URL del objetivo único | - |
-f, --file | Archivo con lista de objetivos | - |
-o, --output | Archivo de salida JSON | - |
-v, --verbose | Mostrar evidencia detallada | Falso |
--timeout | Tiempo de espera de solicitud (segundos) | 10 |
--threads | Hilos concurrentes | 5 |
--verify-ssl | Verificar certificados SSL | Falso |
--user-agent | User-Agent personalizado | Mozilla/5.0... |
--no-banner | Suprimir banner | Falso |
| Estado | Significado | Acción Requerida |
|---|
| 🔴 VULNERABLE | Versión vulnerable confirmada | Parcheo inmediato |
| 🔴 PROBABLEMENTE_VULNERABLE | React 19.x con RSC, versión en rango vulnerable | Parcheo urgente |
| 🟡 POTENCIALMENTE_VULNERABLE | Endpoints RSC encontrados, versión desconocida | Investigar y parchear |
| 🟢 NO_VULNERABLE | Versión parcheada confirmada | Monitorear actualizaciones |
| 🔵 DESCONOCIDO | No se pudo determinar el estado | Verificación manual necesaria |
| ⚪ ERROR | Escaneo fallido | Reintentar o verificar manualmente |
| Tipo de Resultado | Confianza | Explicación |
|---|
| VULNERABLE con versión | ALTA (más del 90%) | La cadena de versión coincide con una versión vulnerable conocida |
| VULNERABLE mediante cabecera | ALTA (más del 85%) | X-Powered-By expuso una versión vulnerable |
| PROBABLEMENTE_VULNERABLE | MEDIA-ALTA (70-85%) | React 19.x detectado, RSC activo, versión no explícitamente parcheada |
| POTENCIALMENTE_VULNERABLE | MEDIA (50-70%) | Los endpoints RSC responden, pero la versión es desconocida |
| NO_VULNERABLE | ALTA (más del 85%) | Versión parcheada detectada explícitamente |
| DESCONOCIDO | BAJA (menos del 50%) | Información insuficiente recopilada |
| Verificar fecha de compilación |
| Implementación RSC no estándar | Framework personalizado | Verificación manual |
| Escenario | Por qué Ocurre | Mitigación |
|---|
| Versión eliminada de los bundles | Optimización de producción | Revisar manifiestos de compilación |
| WAF bloqueando sondas | Controles de seguridad | Probar desde IP permitida |
| RSC en rutas no estándar | Enrutamiento personalizado | Ampliar lista de palabras de rutas |
| SPA sin indicadores SSR | Renderizado solo del lado del cliente | Revisar endpoints de API |
| Caché CDN | Puede servir información de versión obsoleta |
| Balanceadores de Carga | Pueden enrutar a diferentes versiones de la aplicación |
| Kubernetes/Contenedores | Cada pod puede diferir |
| Feature Flags | RSC puede estar habilitado condicionalmente |