Un escáner de superficie no intrusivo para CVE-2025-55182 (RCE de React Server Components). Detecta endpoints RSC expuestos en aplicaciones React 19 y Next.js.
Un detector de superficie especializado y no intrusivo para CVE-2025-55182 (RCE de React Server Components).

Lee esto antes de escanear:
Aunque CVE-2025-55182 es una vulnerabilidad RCE crítica (CVSS 10.0), la explotación en entornos de producción reales de Next.js es condicional.
serverManifest para permitir módulos en la lista blanca. Los intentos directos de cargar módulos peligrosos (como child_process) vía RSC a menudo fallan porque no están en este manifiesto.serverManifest en memoria y evadir la lista blanca.742 en lugar de "vm"). Los exploits rígidos que adivinan nombres fallarán (falsos negativos).Esta herramienta es un detector de superficie. Identifica si el protocolo RSC está expuesto y activo. Encontrar un endpoint expuesto es el paso previo para identificar la superficie de ataque donde podría intentarse una cadena de Prototype Pollution.
La mayoría de los PoCs y escáneres públicos producen falsos negativos en entornos de producción porque caen en cuatro trampas comunes:
Rigidez del exploit: intentan ejecutar gadgets específicos (como vm o child_process) que están bloqueados por las listas blancas, o dependen de IDs hardcodeados (p. ej., "id":"vm") que fallan contra builds de Webpack minificadas.
Redirecciones de raíz: hacer POST / en Next.js a menudo provoca una redirección 307/308 (p. ej., a /login), lo que hace que el cuerpo del POST se pierda o se convierta en GET antes de que el servidor lo procese.
Desajuste de transporte: muchos escáneres envían los payloads como text/plain o JSON crudo. Las Server Actions estrictas de Next.js a menudo requieren encapsulación multipart/form-data. Si el formato es incorrecto, el servidor devuelve 404/200 sin llegar a activar el parser vulnerable.
Ceguera ante WAF: las herramientas estándar ven un 403 Forbidden y se rinden. No distinguen entre un bloqueo global de IP y un filtro de reglas específico, perdiendo oportunidades de evadir el WAF mediante técnicas de codificación o padding.
Este escáner resuelve los tres desafíos:
✅ Sondeo inteligente de rutas: sondea automáticamente rutas aleatorias inexistentes (p. ej., /x7z9q2) para evadir redirecciones de raíz (307/308) y forzar al Next.js App Router a procesar el contexto de la solicitud.
✅ Transporte estricto (Multipart): usa encapsulación multipart/form-data en lugar de texto plano. Esto resuelve los falsos negativos en endpoints de Server Actions estrictos que de otro modo devuelven 404.
✅ Análisis diferencial de WAF: distingue entre bloqueos globales ([BLOCKED]) y filtrado por reglas específicas ([FILTERED]). Si el backend permite el protocolo pero bloquea el payload, el escáner lo identifica como un objetivo de alto valor.
✅ Modo de auto-bypass: incluye un motor --bypass opcional que intenta automáticamente técnicas de evasión (escapes Unicode, mutación de espacios en blanco, padding basura) contra objetivos [FILTERED].
✅ Detección endurecida: captura "caídas silenciosas" ([SUSPICIOUS]) en servidores empresariales que eliminan las cabeceras X-Powered-By, e identifica la huella de redirección 303 See Other de Assetnote.
✅ Fingerprinting activo: utiliza un payload especializado (["$1:aa:aa"]) para provocar el error "Digest" único de React 19 RSC, confirmando que el parser está activo incluso sin un RCE completo.
Clona el repositorio:
git clone https://github.com/fatguru/CVE-2025-55182-scanner.git
cd CVE-2025-55182-scanner
Instala las dependencias (recomendado en un entorno virtual):
pip install -r requirements.txt
Escaneo básico
Comprueba una sola URL. Nota: asegúrate de apuntar a la ruta correcta de la aplicación (p. ej., /dashboard, /login), no solo al dominio raíz, ya que los endpoints del App Router de Next.js son específicos de la ruta.
python3 cve_2025_55182_scanner.py -u http://localhost:3000/dashboard
Escaneo masivo
Escanea una lista de URLs desde un archivo (una URL por línea). Esta es la estrategia recomendada para no perderte rutas específicas.
python3 cve_2025_55182_scanner.py -l targets.txt -o results.csv
Ignora los errores de certificados SSL/TLS (útil para escaneo basado en IP, laboratorios locales o certificados autofirmados).
python3 cve_2025_55182_scanner.py -u [https://192.168.1.50](https://192.168.1.50) -k
Nuevo en v2.1: usa el flag --header para pasar cookies de sesión o tokens si la aplicación está detrás de autenticación o de un WAF que requiere cabeceras específicas.
python3 cve_2025_55182_scanner.py -u https://target.com --header "Cookie: session=123" --header "Authorization: Bearer xyz"
| Flag | Descripción |
|---|---|
-u, --url | URL objetivo única (p. ej., http://target.com/dashboard). |
-l, --list | Archivo que contiene una lista de URLs a escanear (una por línea). |
--bypass | (Nuevo v2.5) Habilita el modo de evasión de WAF. Intenta automáticamente técnicas de mutación (Unicode, Padding, Whitespace) si se detecta un objetivo como [FILTERED]. |
--header | Añade cabeceras personalizadas (p. ej., Cookie: session=xyz, Authorization: Bearer...). Se puede usar varias veces. |
-o, --output | Guarda los resultados en un archivo de texto. |
-k, --insecure | Desactiva la verificación de certificados TLS (suprime las advertencias SSL). |
-t, --threads | Número de hilos simultáneos para escaneo masivo (por defecto: 10). |
--timeout | Tiempo de espera de la solicitud en segundos (por defecto: 10s para acomodar payloads multipart). |
--verbose | Habilita el modo debug. Muestra pasos de sondeo detallados, estado de bloqueo del WAF e intentos de bypass. |
📊 Interpretación de Resultados (v2.5)
[EXPOSED] | 🔴 (Rojo) | Vulnerable
El servidor procesó el payload y devolvió un error de digest de React 19 O una redirección de acción (303). Alta confianza de superficie expuesta.
[BYPASSED] | 🟠 (Naranja) | WAF Evadido
¡Éxito! El escáner detectó inicialmente un filtro, pero lo evadió con éxito usando técnicas de mutación (p. ej., Padding/Unicode) para activar la vulnerabilidad.
[SUSPICIOUS] | 🟡 (Amarillo) | Advertencia
El servidor falló (500) al parsear el payload. Indica lógica de serialización expuesta, incluso en objetivos endurecidos que eliminan las cabeceras X-Powered-By.
[FILTERED] | 🔵 (Azul) | Regla WAF Detectada
El servidor acepta tráfico RSC (el payload benigno pasó), pero una regla WAF específica bloqueó el payload de exploit. El objetivo está vivo detrás del WAF. Usa --bypass para intentar la evasión.
[INFO] | 🔵 (Cian) | Protocolo Detectado
El servidor habla RSC (text/x-component) pero manejó el payload correctamente. Probablemente parchado o comportamiento estándar.
[BLOCKED] | 🟣 (Magenta) | Bloqueo Global de WAF
Todo fue bloqueado (403/406), incluido el handshake benigno. El WAF está bloqueando el protocolo por completo o tu IP.
[SAFE] | 🟢 (Verde) | Limpio
El servidor devolvió 404/200 pero ignoró las cabeceras RSC/los cuerpos multipart en todas las rutas sondeadas.
En este repositorio se incluye una plantilla de Nuclei basada en esta lógica de detección: cve-2025-55182-detection.yaml.
nuclei -t cve-2025-55182-detection.yaml -l targets.txt
--bypass automatiza técnicas de evasión (Whitespace, Unicode, Padding grande) cuando un objetivo se detecta como [FILTERED].multipart/form-data para corregir falsos negativos en objetivos que devuelven 404 a payloads de texto.X-Powered-By.303 See Other utilizadas por algunas implementaciones vulnerables.text/plain a multipart/form-data. Esto resuelve los falsos negativos en objetivos que aplican estrictamente datos de formulario para Server Actions y antes devolvían 404.HTTP 303 See Other y las cabeceras x-action-redirect, que son fuertes indicadores de procesamiento RSC y a menudo quedan ocultos cuando los escáneres siguen las redirecciones automáticamente.Esta herramienta está pensada para ayudar a investigadores de seguridad y administradores a identificar superficies de ataque expuestas en sus propios sistemas. El autor no es responsable del mal uso de esta herramienta. No la uses contra sistemas para los que no tengas permiso explícito de prueba.
Referencias:
- https://nvd.nist.gov/vuln/detail/CVE-2025-55182
- https://www.wiz.io/blog/critical-vulnerability-in-react-cve-2025-55182