nginx 主分支 1.31.0 已发布,继续开发新功能。与之并行的稳定分支 nginx 1.30.1 也已发布,该分支仅包含修复严重漏洞和缺陷的相关更改。这些更新修复了六个漏洞,其中最严重的一个漏洞允许通过精心构造的 HTTP 请求执行远程代码。截至撰写本文时,angie 和 freenginx 尚未发布任何修复程序。
该漏洞(CVE-2026-42945)被评为严重级别,是由 ngx_http_rewrite_module 模块中的缓冲区溢出引起的。攻击者可以通过发送精心构造的 URI 的 HTTP 请求,利用此漏洞以 nginx 工作进程的权限执行代码。该问题在配置中使用了“rewrite”指令时尤为明显,这些配置中的正则表达式会使用掩码替换未命名变量(例如 $1 和 $2),前提是替换字符串包含“?”字符。一个易受攻击的构造示例: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;
该漏洞自 2008 年 3 月发布的 0.6.27 版本起就已存在。漏洞的原因是,分配缓冲区时预期会写入未经转义的数据,但实际上数据是在转义特殊字符后才被复制的。特殊字符的尺寸较大,因为每个“+”、“%”和“&”字符都被编码为三个字节而不是一个字节。出现这种差异的原因是,当重写规则中出现“?”字符时,“e->is_args”标志会被设置以启用转义,但分配缓冲区时该标志却被清除,从而阻止了转义。
其他漏洞:
- CVE-2026-42926 — 当在设置中使用“proxy_set_body”指令并通过 HTTP/2 (proxy_http_version=2) 访问后端时,攻击者可以将数据替换到代理请求中。
- CVE-2026-40701 - 在配置中使用“ssl_ocsp”指令处理来自 DNS 服务器的响应时,ngx_http_ssl_module 模块存在释放后使用漏洞。
- CVE-2026-42946 – ngx_http_uwsgi_module 和 ngx_http_scgi_module 模块在处理特制响应时存在越界读取漏洞。此漏洞可能导致工作进程内存泄漏或崩溃。
- CVE-2026-42934 – 当使用“charset_map”指令处理UTF-8解码响应时,工作进程中存在越界读取漏洞。此漏洞可能导致内存泄漏或工作进程崩溃。
- CVE-2026-40460 – HTTP/3 协议实现中的一个漏洞,允许欺骗 IP地址 绕过授权或限制。
nginx 1.31.0 版本新增改进:
- ngx_http_tunnel_module 模块已包含在内,它启用了转发代理功能,当客户端访问 HTTP/1.1 CONNECT 方法时,会将请求重定向到另一个服务器。可以使用“auth_basic”、“satisfy”和“auth_delay”指令配置代理身份验证。
- “least_time”指令已添加到“upstream”块中,从而启用带有请求转发的负载均衡方法。 伺服器 平均响应时间最短,活跃连接数最少。
- “stream_proxy”模块中新增了“proxy_ssl_alpn”指令,用于指定连接到代理服务器时ALPN扩展允许的协议列表。例如:“proxy_ssl_alpn h2 http/1.1”。
- 包含“Connection”、“Proxy-Connection”、“Keep-Alive”、“Transfer-Encoding”和“Upgrade”标头的 HTTP/2 和 HTTP/3 协议请求将被拒绝。
- ngx_http_dav_module 模块确保拒绝具有重复源资源和目标资源或嵌套集合的 COPY 和 MOVE 请求。
- 错误日志级别 SSL “无效警报”、“记录层故障”和“SSL 警报编号 N”从“严重”降级为“信息”。
- 配置脚本中已添加了“--without-http_upstream_sticky_module”参数,用于禁用 http_upstream_sticky_module 模块的构建(“--without-http_upstream_sticky”参数已被弃用)。
更新:ngx_http_rewrite_module 中的远程代码执行漏洞已被利用。
来源: opennet.ru
