← Volver a la lista

CVE-2026-42945: el fallo de Nginx oculto durante 18 años

itadol5j

Nginx CVE-2026-42945

🚨 CVE-2026-42945: la vulnerabilidad crítica de Nginx oculta durante 18 años, con su principio, PoC y solución

El 13 de mayo de 2026, la firma de investigación de seguridaddepthfirst, junto con F5, reveló la vulnerabilidad más grave de la historia de NGINX:CVE-2026-42945:

  • Puntuación CVSS v4.0 de 9.2: se considera una vulnerabilidad crítica
  • Desbordamiento de búfer en el heap: puede provocar ejecución remota de código (RCE)
  • Oculta durante 18 años: el código entró en el repositorio en 2008
  • Afecta a 9,75 millones de sitios en el mundo: más de 2,54 millones de sitios web en China afectados
  • PoC público: QI-ANXIN ya lo ha replicado con éxito

Se trata deuna vulnerabilidad histórica del módulo central de NGINX: basta con que el atacante envíe una única petición HTTP maliciosa para tomar el control remoto del servidor.

🔍 Panorama de la vulnerabilidad

Datos básicos

Propiedad Detalle
Identificador CVE-2026-42945
Puntuación CVSS v4.0: 9.2 | v3.1: 8.1
Tipo de vulnerabilidad Desbordamiento de búfer en el heap (Heap-based Buffer Overflow)
Tipo de amenaza Ejecución remota de código (RCE) y denegación de servicio (DoS)
Condiciones de explotación Sin autenticación; basta con una petición HTTP preparada
Componente afectado ngx_http_rewrite_module (módulo integrado del núcleo de NGINX)
Descubridor depthfirst (su sistema automatizado lo descubrió en 6 horas)

Alcance del impacto

  • 9,75 millones de sitios en el mundoafectados
  • 2,54 millones de sitios en Chinaafectados
  • NGINX sirve aproximadamente un tercio de los sitios web del mundo, el impacto es enorme
  • El código entró en2008 y llevaba oculto18 años

⚠️ Condiciones de activación

Las tres condiciones deben cumplirse a la vez

La vulnerabilidad requiereuna combinación específica de condiciones de configuración:

Condición Descripción Ejemplo
1. Capturas PCRE sin nombre La directiva rewrite usa grupos de captura sin nombre $1, $2, $3…
2. Cadena de reemplazo con interrogante La cadena de reemplazo contiene el carácter ? /profile.php?id=$1&tab=$2
3. Seguida de rewrite/if/set La directiva rewrite va seguida de otras directivas rewrite … last; if (…) { … }

Ejemplo vulnerable

# 易受攻击配置
rewrite ^/users/([0-9]+)/profile/(.*)$ /profile.php?id=$1&tab=$2 last;
# 后跟其他指令
if ($arg_debug) {
    set $debug_flag 1;
}

Esa configuración cumple las tres condiciones:capturas sin nombre $1/$2,cadena de reemplazo con ?,seguida de la directiva if.

🔬 Principio de la vulnerabilidad

Inconsistencia de estado entre dos fases

El motor de scripts de NGINXusa un procesamiento en dos fases:

  • Primera fase: calcula el tamaño de búfer necesario
  • Segunda fase: copia los datos al búfer

El núcleo del fallo está enla gestión incorrecta del indicador is_args:

Fase Estado de is_args Lógica Resultado
Cálculo de longitud is_args = 0 devuelve la longitud original de la captura Subestima el tamaño del búfer
Copia de datos is_args = 1 llama a ngx_escape_uri y cada byte se expande a 3 bytes Desbordamiento del búfer del heap

Flujo detallado

  1. La directiva rewritecontiene capturas sin nombre $1/$2
  2. La cadena de reemplazocontiene ? y activa is_args = 1
  3. Fase de cálculo de longitud: usa un submotor recién inicializado con is_args = 0
  4. Devuelve la longitud original: asigna un búfer del heap demasiado pequeño
  5. Fase de copia de datos: usa el motor principal con is_args = 1
  6. Llama a ngx_escape_uri: expande los bytes y desborda el búfer
  7. Los datos del URI controlados por el atacantese escriben en la zona desbordada

Método de explotación

Heap Feng Shui entre peticiones:

  • Cuerpo de la petición POST: rociar la memoria del heap (el URI no puede contener bytes nulos)
  • Datos del desbordamiento: corrompen el puntero cleanup del ngx_pool_t adyacente
  • Se falsifica un ngx_pool_cleanup_s que apunta a system()
  • Al destruirse el poolse dispara la llamada a system()
  • y se logra RCE

Efecto de ASLR

  • Con ASLR activado: solo provoca el fallo del proceso worker (DoS)
  • Con ASLR desactivado: permite la ejecución remota de código (RCE)

📊 Versiones afectadas

NGINX Open Source

Rango de versiones Versión corregida
0.6.27 – 1.30.0 1.31.0, 1.30.1

NGINX Plus

Rango de versiones Versión corregida
R32 – R36 R36 P4, R35 P2, R32 P6

Otros componentes afectados

  • NGINX Instance Manager: 2.16.0 – 2.21.1
  • NGINX App Protect WAF: 4.9.0 – 5.8.0
  • NGINX Ingress Controller: 3.5.0 – 5.4.1
  • NGINX Gateway Fabric: 1.3.0 – 2.5.1
  • F5 DoS for NGINX: 4.8.0

🔥 Estado del PoC

PoC público

  • Repositorio en GitHub:https://github.com/DepthFirstDisclosures/Nginx-Rift
  • QI-ANXIN ya lo ha replicado: investigadores de su centro de inteligencia de amenazas lo replicaron con éxito
  • Detalles técnicos públicos: depthfirst publicó su análisis técnico
  • Explotación en la práctica: todavía no detectada

Cómo usar el PoC

# 构建容器
./setup.sh

# 启动易受攻击的 NGINX 服务器
docker compose -f env/docker-compose.yml up

# 执行 PoC 获取 Shell
python3 poc.py --shell

✅ Solución

Método 1: actualizar la versión

# 升级到修复版本
NGINX Open Source >= 1.31.0
NGINX Open Source >= 1.30.1
NGINX Plus >= R32 P6
NGINX Plus >= R36 P4

# 升级后重启 NGINX
nginx -s reload

Método 2: modificar la configuración (mitigación)

Sustituye losgrupos de captura sin nombreporgrupos de captura con nombre:

# 易受攻击配置(未命名捕获)
rewrite ^/users/([0-9]+)/profile/(.*)$ /profile.php?id=$1&tab=$2 last;

# 修复后配置(命名捕获)
rewrite ^/users/(?[0-9]+)/profile/(?.*)$ /profile.php?id=$user_id&tab=$section last;

Los grupos de captura con nombreno activan la vulnerabilidad.

Método 3: revisar la configuración

Comprueba si tu configuración es vulnerable:

# 搜索易受攻击的 rewrite 指令
grep -E "rewrite.*\$[0-9]+.*\?.*(rewrite|if|set)" /etc/nginx/nginx.conf
grep -rE "rewrite.*\$[0-9]+.*\?.*(rewrite|if|set)" /etc/nginx/conf.d/

🔍 Cómo se descubrió

Descubierto por un sistema automatizado

depthfirst y su sistema de análisis de seguridad:

  • En 6 horasencontró 5 problemas
  • 4 confirmados por NGINX
  • CVE-2026-42945es la más grave
  • Se remonta a 2008 y existe en casi todas las compilaciones estándar

Otras vulnerabilidades relacionadas

  • CVE-2026-42946: corrupción de memoria
  • CVE-2026-40701: corrupción de memoria
  • CVE-2026-42934: corrupción de memoria

📝 Resumen

CVE-2026-42945es una de las vulnerabilidades más graves de la historia de NGINX:

  • 18 años oculta: el código entró en el repositorio en 2008
  • CVSS 9.2: desbordamiento de búfer en el heap, puede provocar RCE
  • Condiciones: rewrite con capturas sin nombre + cadena de reemplazo con ? + seguida de otras directivas
  • Impacto: 9,75 millones de sitios en el mundo, 2,54 millones en China
  • PoC público: repositorio en GitHub + replicado por QI-ANXIN
  • Solución: actualizar la versión o usar grupos de captura con nombre

Tras 18 años oculta, la vulnerabilidad ha estallado: actualiza o ajusta la configuración cuanto antes.

Anuncio oficial:https://my.f5.com/manage/s/article/K000161019

Repositorio del PoC:https://github.com/DepthFirstDisclosures/Nginx-Rift

Análisis técnico:https://depthfirst.com/research/nginx-rift