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
Herramientas/GitHubGitHub/rheodev/cve-2026-42945
Análisis de VulnerabilidadesExplotaciónSeguridad WebPruebas de PenetraciónAprendizaje y EducaciónExplotación de BinariosLabs y Práctica
GitHubrheodev/cve-2026-42945

CVE-2026-42945

Análisis y reproducción de la vulnerabilidad NGINX Rift

Ver Repositorio
2151hace 3 mesesRevisado por Kitploit

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-2026-42945 - Análisis y reproducción de la vulnerabilidad NGINX Rift

Resumen

CVE-2026-42945 (nombre en clave "NGINX Rift") es una vulnerabilidad de desbordamiento de búfer en el montón en ngx_http_rewrite_module de NGINX, con una puntuación CVSS v4 de 9.2 (Crítica).

La vulnerabilidad fue descubierta por el equipo de investigación de seguridad depthfirst en abril de 2026 y ha estado latente durante 18 años desde su introducción en NGINX 0.6.27 en 2008.

Alcance

  • NGINX Open Source 0.6.27 ~ 1.30.0
  • NGINX Plus R32 ~ R36
  • NGINX Instance Manager 2.16.0 ~ 2.21.1
  • F5 WAF for NGINX 5.9.0 ~ 5.12.1
  • NGINX App Protect WAF 4.9.0 ~ 4.16.0 y 5.1.0 ~ 5.8.0
  • NGINX Gateway Fabric 1.3.0 ~ 1.6.2 y 2.0.0 ~ 2.5.1
  • NGINX Ingress Controller 3.5.0 ~ 3.7.2, 4.0.0 ~ 4.0.1, 5.0.0 ~ 5.4.1

Versiones corregidas

  • NGINX 1.31.0 (publicado el 13 de mayo de 2026)

Condiciones de activación

La vulnerabilidad requiere el siguiente patrón de configuración de NGINX para activarse:

root@kitploit:~
location ~ ^/api/(.*)$ {
    rewrite ^/api/(.*)$ /internal?migrated=true;
    set $original_endpoint $1;
}

Condiciones clave:

  1. La cadena de sustitución de la directiva rewrite contiene ? (signo de interrogación)
  2. Una directiva set posterior hace referencia a un grupo de captura de expresión regular (por ejemplo, $1)
  3. La URI de la solicitud contiene caracteres escapables (como +, &, %, etc.)

Análisis de causa raíz

Procesamiento en dos fases del motor de scripts

El motor de scripts de NGINX utiliza un procesamiento en dos fases para ejecutar las directivas rewrite/set:

  1. Primera fase (cálculo de longitud): calcula el tamaño de memoria necesario para la cadena final
  2. Segunda fase (copia de datos): escribe los datos reales en el búfer asignado

Inconsistencia de estado que provoca el desbordamiento

El núcleo de la vulnerabilidad radica en una inconsistencia de estado del motor entre las dos fases:

Fase 1: rewrite establece la bandera is_args

Cuando la cadena de sustitución de la directiva rewrite contiene ?, la función ngx_http_script_start_args_code establece:

root@kitploit:~
void ngx_http_script_start_args_code(ngx_http_script_engine_t *e)
{
    e->is_args = 1;  // Se establece permanentemente, ¡nunca se reinicia!
    e->args = e->pos;
    e->ip += sizeof(uintptr_t);
}

Fase 2: El cálculo de longitud de la directiva set utiliza un submotor completamente nuevo

Cuando la directiva set posterior hace referencia a un grupo de captura, ngx_http_script_complex_value_code crea un submotor con todos los valores a cero:

root@kitploit:~
void ngx_http_script_complex_value_code(ngx_http_script_engine_t *e)
{
    ngx_http_script_engine_t le;
    // ...
    ngx_memzero(&le, sizeof(ngx_http_script_engine_t)); // le.is_args = 0
    le.ip = code->lengths->elts;

Fase 3: Divergencia entre el cálculo de longitud y la copia real

Cálculo de longitud (usando el submotor le, is_args=0):

root@kitploit:~
// ngx_http_script_copy_capture_len_code
if ((e->is_args || e->quote) && (e->request->quoted_uri || e->request->plus_in_uri))
{
    // is_args=0, condición falsa, va a la rama else
    return cap[n + 1] - cap[n];  // Devuelve la longitud original (sin escape)
}

Copia real (usando el motor principal e, is_args=1):

root@kitploit:~
// ngx_http_script_copy_capture_code
if ((e->is_args || e->quote) && (e->request->quoted_uri || e->request->plus_in_uri))
{
    // is_args=1, condición verdadera, va a la rama if
    e->pos = (u_char *) ngx_escape_uri(pos, &p[cap[n]],
                                        cap[n + 1] - cap[n],
                                        NGX_ESCAPE_ARGS);
    // ¡Cada carácter escapable se expande de 1 byte a 3 bytes!
}

Tamaño del desbordamiento

  • Tamaño del búfer asignado: raw_size (longitud de captura original)
  • Tamaño real escrito: raw_size + 2 * N (N = número de caracteres escapables)
  • Cantidad de desbordamiento = 2 * N bytes

Por ejemplo, si la URI contiene 100 signos +, la cantidad de desbordamiento es de 200 bytes.

Métodos de explotación

1. DoS (Denegación de servicio)

La forma más simple de explotación: enviar una solicitud que contenga muchos caracteres escapables provoca el bloqueo del proceso worker:

root@kitploit:~
GET /api/+++++++++++++++++++++++++++++++++++ HTTP/1.1
Host: target.com

2. RCE (Ejecución remota de código)

Cadena de explotación RCE completa (requiere ASLR desactivado o eludido):

  1. Control del diseño del montón: controlar el diseño del montón de ngx_pool_t a través del orden de las conexiones
  2. Sobrescritura del puntero cleanup mediante desbordamiento: desbordar hacia la estructura del pool de memoria adyacente
  3. Rociado de estructuras cleanup falsas: inyectar estructuras falsas que contengan la dirección de system() a través del cuerpo de una solicitud POST
  4. Desencadenar la ejecución: cerrar la conexión víctima, provocando que ngx_destroy_pool recorra la lista enlazada cleanup

La arquitectura multiproceso de NGINX hace que la explotación sea más fiable: tras el bloqueo de un worker, el master crea un nuevo worker con el mismo diseño de memoria.

Descripción de archivos

  • README.md - Este archivo, documento de análisis de vulnerabilidad
  • Dockerfile - Construir un entorno NGINX vulnerable
  • nginx.conf - Configuración de NGINX para activar la vulnerabilidad
  • poc_crash.py - PoC de DoS (provoca el bloqueo del worker)
  • docker-compose.yml - Iniciar el entorno de prueba con un solo comando

Reproducción rápida

root@kitploit:~
# 1. Construir e iniciar NGINX vulnerable
docker-compose up -d

# 2. Ejecutar el PoC de DoS
python3 poc_crash.py

# 3. Ver los logs de error de NGINX para confirmar el bloqueo
docker-compose logs nginx

Referencias

  • CHANGES oficiales de NGINX - Anuncio de corrección
  • Informe de investigación de depthfirst - Análisis técnico del descubridor original de la vulnerabilidad
  • Boletín de seguridad de F5 K000160932 - Boletín de seguridad oficial

Aviso legal

Este material está destinado únicamente a fines de investigación y educación en seguridad. No utilice esta información para acciones de ataque no autorizadas.

Descargar herramienta