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-15176 | alias 与 rewrite 组合时堆缓冲区溢出 | 0.1.29 - 1.31.6 | location 里用 alias、有改变 URI 的 rewrite、并用到 $request_filename |
| CVE-2026-93479 | 脚本求值中的缓冲区溢出(map 正则捕获被 root 或 log_format 使用) | 1.30.0 - 1.30.5、1.31.2 - 1.31.6 | map 的正则捕获结果被 root 或 log_format 引用 |
| CVE-2026-97205 | 异步文件 I/O(AIO)与 SSI 的 use-after-free | 0.8.11 - 1.31.6 | 开启 aio 且使用 SSI include virtual |
| CVE-2026-95101 | HTTP/3 请求体注入 | 1.25.0 - 1.31.6 | 启用 HTTP/3 且 proxy_request_buffering 为 on(默认值) |
| CVE-2026-97629 | TLS 会话伪造 | 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与 SSIinclude 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 均未报告在野利用。排查可以先做配置自查,把命中组合的实例排到升级队列前面。