Actualización de nginx 1.31.0 con la eliminación de una vulnerabilidad RCE, explotable a través de solicitudes HTTP

Se ha formado una versión principal de nginx 1.31.0, en la que continúa el desarrollo de nuevas características, así como se ha lanzado una versión estable de soporte paralelo nginx 1.30.1, en la que solo se realizan cambios relacionados con la corrección de errores graves y vulnerabilidades. En las actualizaciones se han solucionado 6 vulnerabilidades, siendo la más peligrosa aquella que permite la ejecución remota de código a través del envío de una solicitud HTTP especialmente formada. Para angie y freenginx, en el momento de redactar esta noticia, las correcciones no han sido publicadas.

La vulnerabilidad (CVE-2026-42945), a la que se le ha asignado un nivel crítico de peligro, se debe a un desbordamiento de búfer en el módulo ngx_http_rewrite_module, que puede ser explotado para ejecutar código con los derechos del proceso de trabajo de nginx mediante el envío de una solicitud HTTP con un URI especialmente formado. El problema se manifiesta en configuraciones con la directiva «rewrite», en la que se utilizan sustituciones de patrones en expresiones regulares con variables no nombradas (por ejemplo, $1 y $2), siempre que en la cadena de reemplazo haya un símbolo «?». Un ejemplo de una construcción vulnerable: rewrite ^\/users\/([0-9]+)\/profile\/(.*)$ \/profile.php?id=$1&tab=$2 last;

Las expresiones con sustituciones nombradas no son vulnerables. Por ejemplo, la vulnerabilidad no afecta a las construcciones: rewrite ^\/users\/(?[0-9]+)\/profile\/(?

.*)$ \/profile.php?id=$user_id&tab=$section last;

La vulnerabilidad está presente desde la versión 0.6.27, lanzada en marzo de 2008. La causa de la vulnerabilidad fue que el búfer se asignó bajo la suposición de que se escribirían datos no escapados, mientras que en realidad se copiaban datos después de escapear caracteres especiales, cuyo tamaño era mayor, ya que cada símbolo «+», «%» y «&» se codificaba no con uno, sino con tres bytes. Esta descoordinación ocurrió porque al haber un símbolo «?» en la regla rewrite se activaba la bandera «e->is_args», que incluía el escape, pero la asignación del búfer se realizaba con la bandera desactivada, en la que no se aplicaba el escape.

Otras vulnerabilidades:

  • CVE-2026-42926 — posibilidad de inyección de datos del atacante en la solicitud proxy al utilizar la directiva «proxy_set_body» en la configuración y realizar una conexión al backend a través de HTTP/2 (proxy_http_version=2).
  • CVE-2026-40701 — acceso a la memoria después de su liberación (use-after-free) en el módulo ngx_http_ssl_module, que ocurre al procesar respuestas del servidor DNS en configuraciones con la directiva «ssl_ocsp».
  • CVE-2026-42946 — lectura fuera de los límites del búfer en los módulos ngx_http_uwsgi_module y ngx_http_scgi_module, que ocurre al procesar una respuesta especialmente diseñada. Este problema puede causar una filtración del contenido de la memoria del proceso de trabajo o su finalización abrupta.
  • CVE-2026-42934 — lectura fuera de los límites del búfer en el proceso de trabajo, que ocurre al procesar respuestas con decodificación de la codificación UTF-8 al utilizar la directiva «charset_map». Este problema puede causar una filtración del contenido de la memoria del proceso de trabajo o su finalización abrupta.
  • CVE-2026-40460 — vulnerabilidad en la implementación del protocolo HTTP/3, permitiendo el spoofing IP para eludir la autorización o las restricciones.

Mejoras adicionadas en la versión nginx 1.31.0:

  • Se incluye el módulo ngx_http_tunnel_module, que permite funcionar como un proxy («forward proxy»), redirigiendo solicitudes a otro servidor cuando un cliente utiliza el método HTTP/1.1 CONNECT. Es posible configurar la autenticación para el acceso al proxy usando las directivas «auth_basic», «satisfy» y «auth_delay».
  • Se ha añadido la directiva «least_time» en el bloque «upstream», que incluye un método de balanceo de carga que envía solicitudes servidor con el menor tiempo promedio de respuesta y el menor número de conexiones activas.
  • Se ha añadido la directiva «proxy_ssl_alpn» en el módulo «stream_proxy» para especificar la lista de protocolos permitidos en la extensión ALPN al conectarse al servidor proxy. Por ejemplo: «proxy_ssl_alpn h2 http/1.1».
  • Se han rechazado solicitudes a través de los protocolos HTTP/2 y HTTP/3 que incluyen los encabezados «Connection», «Proxy-Connection», «Keep-Alive», «Transfer-Encoding», «Upgrade».
  • En el módulo ngx_http_dav_module, se han rechazado solicitudes COPY y MOVE con recursos fuente y destino repetidos o colecciones anidadas.
  • El nivel de registro de errores SSL «invalid alert», «record layer failure» y «SSL alert number N» se ha reducido de «crit» a «info».
  • En el script configure se ha añadido el parámetro «—without-http_upstream_sticky_module» para desactivar la creación del módulo http_upstream_sticky_module (el parámetro «—without-http_upstream_sticky» se ha declarado obsoleto).

Adición: Se disponible un exploit para la vulnerabilidad RCE en ngx_http_rewrite_module.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster