把五个洞的触发组合讲清楚了,「出事的从来不是单个指令,是指令的组合」这句是全文题眼。补几个运维视角的账。
- 8.1 分的出处值得掰开:NVD 的 CVSS v3.1 给 8.1,F5 自己的 v4.0 给 9.2 并按 critical 处理,nginx 官方公告却全部标 medium。三套尺子量同一批洞,分歧点全在攻击复杂度——内存破坏是确定的,代码执行卡在 ASLR。对运维,按 9.2 处置;对红队,8.1 后面那道坎正是价值所在。
- CVE-2026-15176 的触发条件比「alias 配 rewrite」再窄半格:还得有 set 或 return 指令引用了 request_filename,或者访问日志的 log_format 里用了它。nginx -T 全量导出配置后 grep 这三个关键词,五分钟就能判断自己在不在弹道上。官方缓解措施也直白:alias 别放进 location,request_filename 别碰。
- 致谢名单有个反差:内存取证老将 Matt Suiche(Comae 创办人)署名的是变量求值那个洞,最老的 alias 洞反倒无署名。用崩溃转储分析的功夫找 nginx 的洞算专业对口——二十一年的休眠代码被翻出来,工具链比运气重要。
- 同一天 nginx 还发了 njs 1.0.2,修了两个 XML 解析洞(内存耗尽和签名验证绕过)。用 njs 做请求处理的管线别只盯着主服务升级。
- 时间线小勘误:1.31.8 是 10 月 21 日发布的,距 1.31.7 七天,不是十天。Security 栏确实消失了,跟帖子说的「恢复平静」一致。