资讯 nginx 1.30.6 / 1.31.7 修复五个配置相关漏洞:先用 nginx -T 自查,再决定升级顺序

2026-10-21 21:02:17

nginx 1.30.6 / 1.31.7 修复五个配置相关漏洞:先用 nginx -T 自查,再决定升级顺序

结论:先查配置,再定升级紧迫度

2026-10-14 发布的 nginx 1.30.6 stable 与 1.31.7 mainline 修了五个漏洞,共同点是全部依赖特定配置才会暴露。所以排查顺序应该是:先用 nginx -T 导出完整配置,按下面的条件逐项 grep,确认自己的实例是否真的踩中;命中组合的尽快升级,没命中的按常规节奏跟进即可。

只做静态文件服务、没开 HTTP/3、SSI、AIO,也没在 location 里用 alias 的实例,实际暴露面很小。反过来,配置里同时出现 alias + 改写 URI 的 rewrite + $request_filename,或者开了 aio 又用 SSI include virtual 的,就属于高优先级。

五个 CVE 与暴露条件

CVE类型受影响版本暴露条件
CVE-2026-15176alias 与 rewrite 组合时堆缓冲区溢出0.1.29 - 1.31.6location 里用 alias、有改变 URI 的 rewrite、并用到 $request_filename
CVE-2026-93479脚本求值中的缓冲区溢出(map 正则捕获被 root 或 log_format 使用)1.30.0 - 1.30.5、1.31.2 - 1.31.6map 的正则捕获结果被 root 或 log_format 引用
CVE-2026-97205异步文件 I/O(AIO)与 SSI 的 use-after-free0.8.11 - 1.31.6开启 aio 且使用 SSI include virtual
CVE-2026-95101HTTP/3 请求体注入1.25.0 - 1.31.6启用 HTTP/3 且 proxy_request_buffering 为 on(默认值)
CVE-2026-97629TLS 会话伪造1.23.2 - 1.31.6配置了 ssl_session_cache shared: 且未配置 ssl_session_ticket_key

评分上 F5 与 nginx 的口径不一致:F5 给其中三个内存类漏洞 CVSS 4.0 9.2(Critical),nginx 自己标 medium。RCE 需要 ASLR 被关闭或可绕过,前提是对应配置存在——也就是说,配置不满足时这些编号只是清单项,不是可执行攻击面。

自查:nginx -T 加逐项 grep

先确认版本,再导出展开后的完整配置(-T 会带上 # configuration file ... 注释,便于回溯到具体文件):

nginx -v
nginx -T 2>/dev/null > /tmp/nginx-T.conf

然后按漏洞逐项查:

# CVE-2026-15176:alias / $request_filename / 改写 URI 的 rewrite
grep -nE '^\s*alias\s' /tmp/nginx-T.conf
grep -n 'request_filename' /tmp/nginx-T.conf
grep -nE '^\s*rewrite\s' /tmp/nginx-T.conf

# CVE-2026-93479:map 与正则捕获
grep -nE '^\s*map\s' /tmp/nginx-T.conf

# CVE-2026-97205:aio 与 SSI
grep -nE '^\s*aio\s' /tmp/nginx-T.conf
grep -nE '^\s*ssi\s+on' /tmp/nginx-T.conf
grep -n 'include virtual' /tmp/nginx-T.conf

# CVE-2026-95101:HTTP/3 与请求体缓冲
grep -nE 'http3|quic' /tmp/nginx-T.conf
grep -n 'proxy_request_buffering' /tmp/nginx-T.conf

# CVE-2026-97629:TLS 会话缓存与票据密钥
grep -n 'ssl_session_cache' /tmp/nginx-T.conf
grep -n 'ssl_session_ticket_key' /tmp/nginx-T.conf

判定时注意这些条件都是「与」关系,不是单条命中就中招:

  • CVE-2026-15176 需要 alias、改变 URI 的 rewrite、$request_filename 三者同时出现在同一 location 上下文。
  • CVE-2026-97205 需要 aio 与 SSI include virtual 同时使用。
  • CVE-2026-95101 需要 HTTP/3 开启,且 proxy_request_buffering 保持默认 on;显式写了 off 的不受影响。
  • CVE-2026-97629 看的是「存在 ssl_session_cache shared:」且「全配置中没有 ssl_session_ticket_key」。
  • CVE-2026-93479 只影响 1.30.0 - 1.30.5、1.31.2 - 1.31.6 这一段版本区间,map 的正则捕获被 root 或 log_format 消费时才成立。

临时缓解

无法立即升级时,按命中项做配置侧规避,改完 nginx -t && nginx -s reload:

  • CVE-2026-15176:避免在 location 中用 alias 或 $request_filename,改用 root 配合等价路径。
  • CVE-2026-93479:使用命名捕获,并限制在正则匹配所在的配置块内,避免捕获结果外溢到 root / log_format。
  • CVE-2026-97205:在用了 SSI 的地方关闭 aio。
  • CVE-2026-95101:对 HTTP/3 设 proxy_request_buffering off。
  • CVE-2026-97629:用 ssl_session_ticket_key 从文件加载票据密钥。

这些都是绕过触发条件,不是修 bug;配置变更本身也可能带来行为差异(比如关 aio 影响大文件吞吐),要在灰度环境验证后再上。

升级分支限制

修复版本是 1.30.6 与 1.31.7 及以上。只有 1.30、1.31 两个分支拿到了修复,1.28 等老分支仍脆弱——停留在老分支的实例不能靠「等小版本更新」解决,必须规划分支迁移。

用发行版打包的 nginx 还要单独确认补丁是否 backport:包版本字符串通常带发行版 revision,不能只比对上游版本号就下结论,需要查发行版的安全公告或 changelog。

其他受影响产品与在野情况

受影响产品还包括 NGINX Plus R33-R37、Ingress Controller 5.6.0-5.6.3、Gateway Fabric 2.1.0-2.7.2 与 1.5.0-1.6.2、Instance Manager 2.18.0-2.23.0、F5 WAF for NGINX 5.9.0-5.15.0、F5 DoS for NGINX 4.8.0-4.10.0。这些组件的版本号与 nginx 开源版不同步,需要按各自的产品线单独核对。

截至 2026-10-15,这些 CVE 不在 CISA KEV 目录,nginx 与 F5 均未报告在野利用。排查可以先做配置自查,把命中组合的实例排到升级队列前面。

复制全文 生成海报 nginx 漏洞排查 运维 CVE

推荐文章

程序员茄子在线接单