本月中旬 NGINX 发布了 1.31.3(mainline)与 1.30.4(stable),修复了多项内存安全漏洞。除了 regex map 堆溢出外,还有两个模块问题和一项默认安全收紧值得单独关注。
1. ngx_http_slice_module:未初始化内存访问
slice 模块默认关闭,通过 slice 指令将大文件分片后按 Range 输出。漏洞在「使用未命名正则捕获」或「后台缓存更新发生」时触发,未经认证的攻击者可导致 worker 进程产生未初始化内存访问,可能造成有限内存信息泄露或进程重启,官方评分较高。
如果没启用 slice,或者相关路径未使用未命名捕获,实际受影响较小。
2. ngx_http_ssi_module:Use-After-Free
触发条件需要同时满足:
- 启用了服务端包含(SSI)
- 配置了
proxy_pass proxy_buffering关闭
在这种情况下,攻击者若能在上游响应上做中间人(MITM)控制,则可在 worker 中触发 use-after-free,导致有限内存篡改或进程重启。修复方式为:避免对同一子请求重复终结,释放操作只做一次。
普通静态 SSI 页面不受影响。命中「SSI + proxy_pass + proxy_buffering off」组合的环境需要重点测试。
3. XSLT 模块默认禁用外部实体
1.31.3 将 XSLT 模块的外部实体加载改为默认关闭,并新增 xml_external_entities 指令用于重新开启。这是「安全默认」的收紧:之前依赖 xslt 解析外部实体/DTD 的站点升级后行为可能变化,需要显式开启,并自行评估 XXE 风险。
升级建议
- Open Source 版本升级到 1.31.3(mainline)或 1.30.4(stable)。
- 升级后执行
nginx -t && systemctl reload nginx。 - 命中「SSI + proxy_pass + proxy_buffering off」组合的环境,以及启用 slice 或 XSLT 的站点,建议优先升级。
参考:nginx 安全公告
https://nginx.org/en/security_advisories.html