Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2025-55182-React2Shell-Async-Scanner — Escáner asíncrono de RCE para CVE-2025-55182 / CVE-2025-66478 — contaminación de prototipos → ejecución de código a través de React Server Actions. | Kitploit
Herramientas/GitHubGitHub/inferiorak/cve-2025-55182-react2shell-async-scanner
ReconocimientoEscáneres de VulnerabilidadesAnálisis Dinámico (Sandboxing)Análisis de CódigoExplotaciónExplotación de Aplicaciones WebRecopilación de InformaciónCTFPruebas de Penetración

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Aprendizaje y Educación
Desarrollo de Payloads
GitHubinferiorak/cve-2025-55182-react2shell-async-scanner

CVE-2025-55182-React2Shell-Async-Scanner

Escáner asíncrono de RCE para CVE-2025-55182 / CVE-2025-66478 — contaminación de prototipos → ejecución de código a través de React Server Actions.

Ver Repositorio
31hace 5 mesesAún no revisado
Compartir

⚡ React2Shell

CVE-2025-55182 / CVE-2025-66478 - Escáner de RCE Asíncrono

Python CVE CVE License Author Visitors

Envenenamiento de prototipos → Ejecución Remota de Código a través de React Server Actions

Detección asíncrona, priorizada por versión y basada en la salida de canarios (canary) - sin adivinanzas a ciegas


[!WARNING] Solo para investigación de seguridad autorizada y pruebas de penetración. Escanear sistemas sin permiso explícito por escrito es ilegal. El autor no asume ninguna responsabilidad por el mal uso de esta herramienta.


Índice de Contenidos

  • Resumen de la Vulnerabilidad
  • Versiones Afectadas
  • Cómo Funciona la Detección
  • Instalación
  • Uso
  • Referencia de Opciones
  • Salida y Verdictos
  • Modo Navegador
  • Proceso de Detección de Versión

Resumen de la Vulnerabilidad

React Server Actions pasa los datos de acción como datos de formulario multiparte directamente a un contexto de ejecución del lado del servidor. Debido a una sanitización insuficiente contra el envenenamiento de prototipos en versiones afectadas de react-server-dom-webpack, un atacante puede:

  1. Inyectar una carga multiparte manipulada que contamina Object.prototype
  2. Sobrescribir _response._prefix en el objeto de respuesta interno
  3. Forzar al servidor a ejecutar comandos arbitrarios del shell mediante:
    root@kitploit:~
    process.mainModule.require('child_process').execSync(cmd)
    

Esto otorga Ejecución Remota de Código no autenticada en cualquier aplicación Next.js de acceso público que utilice React Server Actions con una versión afectada de React.

CVE-2025-55182 - Amplio: afecta a paquetes de React 19 (react-server-dom-webpack, react-server-dom-parcel, react-server-dom-turbopack)
CVE-2025-66478 - Estricto: ruta de explotación específica de Next.js a través del endpoint de Server Action /


Versiones Afectadas

ComponenteVulnerableParcheada
React react-server-dom-*19.0.0, 19.1.0, 19.1.1, 19.2.019.0.1, 19.1.2, 19.2.1+
Next.js 16.x16.0.0 – 16.0.616.0.7+
Next.js 15.x15.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.615.0.5+, 15.1.9+, 15.2.6+, 15.3.6+, 15.4.8+, 15.5.7+
Next.js 14.xSolo builds canary 14.3.0-canary.77+Todas las versiones estables 14.x - NO afectadas
Next.js 13.x-NO afectadas

Cómo Funciona la Detección

Este escáner utiliza verificación de canarios basada en la salida - el método más fiable para confirmar la ejecución real de código con cero falsos positivos:

root@kitploit:~
1.  POST /  con cabecera Next-Action + carga multiparte de envenenamiento de prototipos
2.  La carga ejecuta:  echo <canario_aleatorio>
3.  El servidor vulnerable lanza un NEXT_REDIRECT con base64(canario) en la URL
4.  Cabecera de respuesta:   X-Action-Redirect: /login?a=<base64(canario)>
5.  El escáner decodifica base64 → coincide con el canario → RCE confirmado ✓

allow_redirects=False es crítico: la confirmación reside en la cabecera, no en el destino de la redirección.


Instalación

root@kitploit:~
git clone https://github.com/InferiorAK/React2Shell
cd React2Shell

pip install -r requirements.txt

# Necesario solo si se usa el modo --browser para mejorar la detección de versión:
playwright install chromium
playwright install-deps chromium

Requisitos: Python 3.10+


Uso

Escáner CVE-2025-55182 - Amplio (React + Next.js)

root@kitploit:~
# Un solo objetivo
python3 CVE-2025-55182_scanner.py -u https://target.com

# Escanear una lista de URLs
python3 CVE-2025-55182_scanner.py -f urls.txt

# Modo silencioso - solo imprime resultados RCE / Vulnerable
python3 CVE-2025-55182_scanner.py -f urls.txt -q

# Modo navegador - Chromium sin cabeza para detección precisa de versión
python3 CVE-2025-55182_scanner.py -f urls.txt -b

# Opciones completas - recomendado para escaneos a gran escala
python3 CVE-2025-55182_scanner.py -f urls.txt -b -q -c 3 -t 20

Referencia de Opciones

Escáner CVE-2025-55182

FlagForma largaValor por defectoDescripción
-u--url-URL de un solo objetivo
-f--file-Archivo que contiene una URL por línea
-o--outputoutputs/vuln.txtArchivo de salida para objetivos vulnerables
-U--unknown-outputoutputs/unknown.txtArchivo de salida para objetivos con versión desconocida
-c--concurrency5Conexiones HTTP concurrentes
-t--timeout15Tiempo de espera por solicitud (segundos)
-q--quietoffImprimir solo filas RCE / VULNERABLE
-b--browseroffRespaldo de detección de versión con Playwright Chromium sin cabeza

Salida y Verdictos

Cada objetivo escaneado recibe uno de los siguientes veredictos:

VeredictoColorSignificado
RCE🔴 RojoCanario confirmado en X-Action-Redirect - ejecución remota de código probada
VULNERABLE🟠 NaranjaLa versión está en el rango vulnerable; la carga RCE no devolvió eco (WAF / configuración parcheada / endpoint incorrecto)
Unknown🟡 AmarilloNext.js confirmado pero no se pudo detectar la versión - se intentó RCE de todas formas; guardado en outputs/unknown.txt para reintentar con modo navegador
Not Vulnerable🟢 VerdeVersión confirmada como parcheada, o RCE devolvió explícitamente seguro
Skipped⚪ BlancoVersión confirmada como parcheada o sitio no Next.js - no se intentó PoC
Error⚪ BlancoHost inalcanzable o conexión fallida

Archivos de salida (guardados en la carpeta outputs/, creada automáticamente):

  • outputs/vuln.txt — resultados RCE y VULNERABLE (se añaden en cada ejecución)
  • outputs/unknown.txt — objetivos con versión Unknown; reintentar estos con -b para detección precisa de versión

Modo Navegador

¿Por qué la versión aparece como unknown en más del 90% de los sitios?

Next.js moderno 13+ que utiliza la arquitectura App Router nunca incrusta la versión del framework en el HTML estático. La versión solo existe en window.next.version después de que JavaScript se ejecute en un contexto real de navegador.

Sin --browser:

  • La detección de versión se basa en cabeceras HTTP, __NEXT_DATA__, scripts en línea y archivos de fragmentos con hash
  • Los sitios con App Router casi siempre devuelven unknown - el filtrado basado en versión se evita

Con --browser (-b):

  • Playwright lanza Chromium sin cabeza
  • El JavaScript de la página se ejecuta completamente
  • El escáner lee window.next.version directamente del DOM en vivo
  • La precisión de la versión pasa de ~10% a casi 100% en sitios Next.js modernos
root@kitploit:~
# Recomendado con modo navegador - reducir concurrencia (las páginas del navegador consumen muchos recursos)
python3 CVE-2025-55182_scanner.py -f urls.txt -b -c 3

Proceso de Detección de Versión

El escáner ejecuta hasta 7 etapas, deteniéndose tan pronto como se encuentra una versión:

root@kitploit:~
Etapa 1 │ Cabeceras de respuesta HTTP
        │  X-Powered-By: Next.js X.Y.Z
        │  x-nextjs-*, x-next-version

Etapa 2 │ Bloques <script> en línea (escaneo por bloque)
        │  window.next = { version: "X.Y.Z", ... }
        │  version:"X.Y.Z", router: ...      ← patrón de clave adyacente en paquete minificado
        │  "nextVersion":"X.Y.Z"
        │  Next.js vX.Y.Z                    ← texto plano en meta / comentarios HTML
        │  __NEXT_VERSION__ = "X.Y.Z"

Etapa 3 │ Blob JSON __NEXT_DATA__
        │  Solo Pages Router - "version":"X.Y.Z" es seguro en este contexto

Etapa 4 │ URLs de fragmentos con hash (extraídas de <script src>)
        │  /_next/static/chunks/*, /_next/static/app/*, /_next/static/runtime/*
        │  Obtiene hasta 12 archivos de paquete reales, escanea cadenas de versión

Etapa 5 │ Fragmentos de respaldo con nombre fijo
        │  main.js, framework.js, webpack.js, _app.js, pages/_app.js

Etapa 6 │ Endpoint /package.json
        │  Modo desarrollo / servidores mal configurados exponen esto directamente

Etapa 7 │ Navegador sin cabeza Playwright  [solo --browser / -b]
        │  Evalúa window.next.version después de la ejecución completa de JS
        │  Solo se activa cuando las etapas 1–6 devuelven "unknown"

Descargo de Responsabilidad

Esta herramienta se publica solo con fines educativos y de investigación de seguridad autorizada.
El autor, InferiorAK, no es responsable de ningún daño causado por su mal uso.
Obtenga siempre permiso por escrito antes de probar cualquier sistema que no posea.


Hecho por InferiorAK


Mis Enlaces

Github Facebook Messenger Twitter YouTube

Descargar herramienta