资讯 nginx 1.31.5/1.31.6 与 njs 1.0.1:HTTP/3 缓冲溢出、SAML 验签前解析与升级路径

2026-09-16 21:02:08

nginx 1.31.5/1.31.6 与 njs 1.0.1:HTTP/3 缓冲溢出、SAML 验签前解析与升级路径

官方安全公告:

2026 年 nginx / njs 版本与安全更新时间线

  • 2026-09-15 nginx-1.30.5 stable 与 nginx-1.31.6 mainline 发布,修复 ngx_http_v3_module 缓冲溢出(CVE-2026-90439)。
  • 2026-09-02 nginx-1.31.5 mainline 发布,新增 control API、predicate locations、ngx_http_json_module 模块。
  • 2026-09-02 njs-1.0.1 发布,修复 js_access 访问控制绕过(CVE-2026-18329)、ngx.fetch() 触发的 worker 进程崩溃(CVE-2026-78222)、xml.exclusiveC14n() 堆缓冲溢出(CVE-2026-78689)。
  • 2026-08-19 nginx-1.31.4 mainline 发布。
  • 2026-07-15 nginx-1.30.4 stable 与 1.31.3 mainline:map+regex 缓冲溢出 CVE-2026-42533、ngx_http_slice_module 内存泄露 CVE-2026-60005、ngx_http_ssi_module UAF CVE-2026-56434。
  • 2026-06-23 njs-1.0.0:弃用 njs 引擎转向 QuickJS,统一异常类,加固 ngx.fetch() 请求校验。
  • 2026-06-17 1.30.3/1.31.2:proxy_v2/grpc 缓冲溢出 CVE-2026-42055,charset 越界读 CVE-2026-48142;1.31.2 另修 v3 UAF CVE-2026-42530。
  • 2026-05-19 njs-0.9.9:js_fetch_proxy 堆溢出 CVE-2026-8711。
  • 2026-04-14 nginx-1.30.0 stable:Early Hints、HTTP/2 to backend、Encrypted ClientHello、upstream sticky sessions、Multipath TCP,默认 proxy HTTP 版本改为 HTTP/1.1 + keep-alive。

1.31.5 mainline 的新增项

1.31.5 在 2026-09-02 进入 mainline,随版带出三块内容:control API、predicate locations、ngx_http_json_module 模块。其中 ngx_http_json_module 是新增的 HTTP 模块。

1.31.6 / 1.30.5:HTTP/3 缓冲溢出 CVE-2026-90439

2026-09-15 同时发布的 nginx-1.31.6 mainline 与 nginx-1.30.5 stable 修的是同一个洞:ngx_http_v3_module 缓冲溢出,编号 CVE-2026-90439。对外提供 HTTP/3 的实例按 mainline、stable 两条线分别升到 1.31.6 或 1.30.5。

njs 1.0.1 修掉的三个问题

CVE问题影响面
CVE-2026-18329js_access 访问控制绕过已验证客户端可绕过 access 阶段的控制
CVE-2026-78222ngx.fetch() 触发 worker 进程崩溃worker 稳定性
CVE-2026-78689xml.exclusiveC14n() 堆缓冲溢出NGINX JavaScript 0.7.10–1.0.1

CVE-2026-78689:xml.exclusiveC14n() 的命名空间前缀列表

问题出在 njs XML 模块的命名空间前缀列表解析器,经 xml.exclusiveC14n() 可达。当配置把外部可控的 XML 命名空间前缀列表传给该方法时,构造前缀列表会越界写到堆分配之外。

引擎不同,后果不同:

  • njs 引擎(js_engine 缺省时使用的那个)会破坏相邻对象,并使 nginx worker 崩溃;
  • QuickJS 引擎每次调用还会泄漏前缀列表,worker 内存随请求增长。

CVSS v4.0 评分 9.2,CRITICAL。该漏洞没有控制面暴露,只走数据面。

官方 nginxinc/nginx-saml 参考实现在 SAML 签名校验期间受影响:它在签名验证之前,就从不可信 SAML 报文里读取 InclusiveNamespaces/@PrefixList 并传入 xml.exclusiveC14n()。这意味着不需要有效 SAML 签名,构造 SAML Response/Assertion/LogoutRequest/LogoutResponse 即可触发。

CVE-2026-18329:js_access 访问控制绕过

与 1.31.5 同批发布的 njs 1.0.1 还修了 js_access 的访问控制绕过。已验证的客户端可以绕过 access 阶段的控制。凡是把鉴权、白名单、拦截逻辑放在 js_access 阶段的配置,都要按这个前提重新评估。

排查与升级

  • 先确认实际生效的版本:nginx -V 看编译进构建的 njs 模块路径,njs -v 看 njs CLI 版本。njs 0.7.10–1.0.1 都在 CVE-2026-78689 的受影响范围内,njs 用户尽快升到 1.0.1。
  • 用了 nginx-saml 的,核对 SAML 签名校验顺序。先验签、再解析可缓和 CVE-2026-78689 的触发路径。
  • 暴露 HTTP/3 的实例升到 1.31.6 或 1.30.5。
  • 走发行版包管理的:Debian/Ubuntu 需等发行版 backport;Rocky/RHEL 已出 RLSA-2026-66542 / RHSA-2026:66542(对应 CVE-2026-42533),其余 CVE 以各自发行版公告为准。
复制全文 生成海报 nginx njs 安全 HTTP 3 运维

推荐文章

程序员茄子在线接单