nginx 1.30.6 与 1.31.7 修复 5 个 CVE:alias+rewrite、AIO+SSI 两类配置需要优先自查
2026-10-14,nginx-1.30.6(stable)与 nginx-1.31.7(mainline)同时发布,共修复 5 个漏洞。其中 3 个被 F5/CSA 评为 CVSS v4.0 9.2,但触发都依赖非默认配置;另有 2 个不在 F5 的“三个严重漏洞”名单里,同样需要按版本判断。
2026-10-21,nginx-1.31.8(mainline)发布,晚于修复版本,默认已包含上述修复。
版本与受影响区间
| CVE | 问题 | 修复版本 | 受影响版本 |
|---|---|---|---|
| CVE-2026-15176 | 使用 alias 配合 rewrite 时的缓冲区溢出(advisory 标 medium) | 1.31.7+ / 1.30.6+ | 0.1.29–1.31.6 |
| CVE-2026-93479 | 脚本求值(字符串表达式含变量)中的缓冲区溢出 | 1.31.7+ / 1.30.6+ | 1.31.2–1.31.6、1.30.0–1.30.5 |
| CVE-2026-95101 | HTTP/3 请求体注入 | 1.31.7+ / 1.30.6+ | 1.25.0–1.31.6 |
| CVE-2026-97629 | TLS session ticket key 轮换时的会话伪造 | 1.31.7+ / 1.30.6+ | 1.23.2–1.31.6 |
| CVE-2026-97205 | ngx_http_ssi_module 配合 AIO 时的 use-after-free | 1.31.7+ / 1.30.6+ | 0.8.11–1.31.6 |
2026 年早些时候还有两个已修复漏洞,容易和这批混淆:
- CVE-2026-90439,
nginx_http_v3_module缓冲区溢出,修复于 1.31.6+ / 1.30.5+。 - CVE-2026-42533,
map+ 正则缓冲区溢出,严重级别 major,修复于 1.31.3+ / 1.30.4+。
也就是说,如果当前运行的是 1.30.5 或 1.31.6,那么 CVE-2026-90439 已经修了,但这批 5 个 CVE 一个都没修。
F5/CSA 的定级:三个 CVSS 9.2
F5 于 2026-10-21 发出带外补丁通告,CSA 同期发布 AL-2026-150,点出三个 critical:
- CVE-2026-15176:堆缓冲区溢出,影响
alias与rewrite指令。未认证远程攻击者可导致 worker 进程崩溃/重启,形成 DoS;在 ASLR 关闭或可被绕过的系统上可能进一步执行代码。 - CVE-2026-97205:use-after-free,影响异步文件 I/O(AIO)与 SSI,表现为内存破坏或 worker 崩溃。
- CVE-2026-93479:堆缓冲区溢出,影响
map指令。
受影响产品面(F5 列表):
- NGINX Plus R33–R37
- NGINX Open Source 1.30.5 及以下、1.31.6 及以下
- NGINX 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
触发条件:什么配置才算真的命中
F5 公告 K000163408(NHS England 预警 CC-4872 引用了同一份)把触发条件写得很具体,判断是否受影响时按此对照。
CVE-2026-15176:location 同时满足三个条件才触发——使用 alias 指令、配置了 rewrite,并且存在引用 $request_filename 的 set 或 return 指令。等价写法是在 access_log 的 format 中使用 $request_filename。构造的 HTTP 请求会造成 worker 堆溢出并重启;在 ASLR 关闭或已被绕过的系统上可执行代码。仅影响数据面,控制面无暴露。
CVE-2026-93479:map 使用正则匹配,且 root 指令或 access_log format 在引用 map 输出变量之前先引用了该 map 的正则捕获变量;或者在特定条件下在字符串表达式中使用非缓存变量。影响与上一条相同。
CVE-2026-97205:位于 ngx_http_core_module;在特定配置下开启 AIO 后,处理含有 include virtual 的 SSI 页面可能触发 UAF。
打不了补丁时的临时缓解
- CVE-2026-15176:避免在
location块内使用alias指令,或避免使用$request_filename变量。 - CVE-2026-97205:关闭异步文件 I/O(AIO)或关闭 Server Side Includes(SSI)。
- CVE-2026-93479:用命名捕获替代匿名捕获,并把捕获变量的使用限制在包含该正则匹配的配置块内。
取舍:哪些可以等,哪些必须先升
按上面的触发条件反推,下面几类配置在默认状态下不落在攻击路径上,可以排期升级而不是停机抢修:
- 只使用
root做静态站点、没有alias+rewrite+$request_filename组合的 location。 - 没有启用 HTTP/3 的实例(CVE-2026-95101 依赖
http_v3;1.25.0 起才在受影响区间)。 - 没有开启 SSI、也没有开启 AIO 的实例(CVE-2026-97205 需要两者同时满足)。
- 没有做 TLS session ticket key 轮换的部署(CVE-2026-97629 依赖 key rotation)。
map只用精确匹配、不含正则的配置(CVE-2026-93479 需要正则匹配与捕获变量前置引用)。
反过来,以下几类建议直接按紧急处理:开了 HTTP/3 且版本在 1.25.0–1.31.6;存在 alias+rewrite+$request_filename 的 location;同时开了 AIO 与 SSI;做了 session ticket key 轮换;以及使用 Ingress Controller / Gateway Fabric 等受影响版本、又无法快速改配置的边缘入口。
BleepingComputer 在 2026-10-19 的报道中称这是带外补丁、攻击者无需认证、利用需要非默认配置、当时尚未发现在野利用。该报道把 CVE-2026-15176 和 CVE-2026-97205 描述成位于 ngx_http_v3_module,与 F5 及 nginx 公告正文(alias+rewrite;AIO+SSI)不一致,以 nginx.org 的 advisory 为准。
验证与升级
先确认实际运行的二进制和编译参数,不要只看包管理器版本:
nginx -v # 版本号
nginx -V # 编译参数,重点看 --with-http_v3_module、AIO、SSI 相关配置
目标是 1.30.6+ 或 1.31.7+。发行版通常会把补丁回移到旧版本号,所以版本号看起来“没变”也可能已经修复,需要对照厂商自己的 advisory 而不是只看 nginx -v。改完配置后先 nginx -t 再 reload。Ingress Controller 这类镜像需要升级控制器本体,只换基础镜像不够。
链接
- nginx 安全公告:https://nginx.org/en/security_advisories.html
- nginx 2026 发布记录:https://nginx.org/2026.html
- CSA 预警 AL-2026-150:https://www.csa.gov.sg/alerts-and-advisories/alerts/al-2026-150/
- NHS England 网络预警 CC-4872:https://digital.nhs.uk/cyber-alerts/2026/cc-4872
- BleepingComputer 报道:https://www.bleepingcomputer.com/news/security/f5-releases-out-of-band-patches-for-critical-nginx-vulnerabilities/