2026 年 7 月 15 日,F5 发布紧急安全公告,修复了 NGINX 产品线中的三个高危内存漏洞。其中最严重的 CVE-2026-42533 是一个潜伏了 15 年 的堆缓冲区溢出漏洞,CVSS v4.0 评分高达 9.2(Critical)——攻击者无需登录,一条 HTTP 请求即可��程执行代码。
对于国内大量使用 NGINX 做 Web 服务器、反向代理、负载均衡的站长和企业运维来说,这是一次必须立即响应的高危预警。
一、三大漏洞速览
| 漏洞编号 | 类型 | CVSS v3.1 | CVSS v4.0 | 利用条件 |
|---|---|---|---|---|
| CVE-2026-42533 | 堆缓冲区溢出(RCE) | 8.1 High | 9.2 Critical | 无需认证,远程利用 |
| CVE-2026-60005 | 未初始化内存泄露 | 8.2 High | 8.8 High | 需启用 slice 模块 |
| CVE-2026-56434 | Use-After-Free | 6.5 Medium | 8.3 High | 需启用 SSI + 特定条件 |
三个漏洞影响 NGINX Plus 37.x、NGINX Open Source 1.x 及 NGINX Ingress Controller 等多个产品线。BIG-IP、BIG-IQ、F5 Distributed Cloud 不受影响。
二、CVE-2026-42533 深度拆解:为什么一个 15 年的 bug 现在才炸
漏洞原理
问题出在 NGINX 的 map 指令。map 用于根据输入变量动态创建新变量,当配置中使用未命名正则捕获(如 $1、$2)作为输出值时,会触发漏洞。
核心问题链:
map 块中未命名捕获的正则匹配
→ ngx_http_map_variable() 使用固定大小临时堆缓冲区存放捕获结果
→ 未校验捕获数据长度与缓冲区大小的关系
→ 超长输入复制导致堆缓冲区溢出
→ 覆盖相邻堆块(ngx_pool_cleanup_t、ngx_chain_t)
→ 控制函数指针 → 劫持执行流 → RCE
关键是触发条件极其隐蔽:需要 map 块中引用未命名捕获的变量定义在触发捕获的正则之前,导致求值顺序异常。这不是每个 NGINX 配置都会触发,但一旦存在这种写法,就是 15 年来一直敞开的门。
哪些配置容易中招
# 漏洞配置(未命名捕获 $1)
map $http_host $backend {
default "default";
"~^(.+)\.example\.com$" $1; # ← $1 是未命名捕获
}
# 安全配置(命名捕获)
map $http_host $backend {
default "default";
"~^(?<subdomain>.+)\.example\.com$" $subdomain; # ← 命名捕获,安全
}
如果你的 NGINX 配置中任何 map 块使用了 $1、$2 等数字捕获变量,就属于风险配置。
影响版本与修复版本
| 产品 | 受影响版本 | 修复版本 |
|---|---|---|
| NGINX Open Source | 1.x | 1.31.3 / 1.30.4 |
| NGINX Plus | 37.x | 37.0.3.1 |
| NGINX Ingress Controller | 受影响版本 | 见 F5 官方公告 |
三、CVE-2026-60005:slice 模块泄露内存,可辅助绕过 ASLR
slice 模块默认不编译(需 --with-http_slice_module 显式启用),但一旦启用,两种场景下会泄露未初始化内存:
- 场景 A:slice 指令与未命名正则捕获组合,缓存键构造时引用未初始化内存;
- 场景 B:
proxy_cache_background_update on时,后台子请求更新缓存访问未初始化缓冲区。
泄露内容可能包含 TLS 密钥材料、其他客户端的 Cookie/Authorization 头、上游响应数据、内存指针。配合 CVE-2026-42533,泄露的指针可用来绕过 ASLR,实现稳定 RCE。
四、CVE-2026-56434:SSI 模块 Use-After-Free
当 ssi on 且 proxy_buffering off 时,流式传输中的 SSI 解析器可能在缓冲区被提前释放后仍持有引用,造成 UAF。触发需要攻击者控制或篡改上游响应——纯公网攻击者难以直接利用,但内网 MITM 或上游被控时可以触发。该漏洞没有临时缓解措施,只能升级。
五、修复优先级
| 漏洞 | 优先级 | 行动窗口 | 临时缓解 |
|---|---|---|---|
| CVE-2026-42533 | P0 | 24-48 小时 | 命名捕获替换 |
| CVE-2026-60005 | P1 | 1-2 周 | 命名捕获 / 禁用 slice |
| CVE-2026-56434 | P1 | 1-2 周 | 无,必须升级 |
六、站长自查与修复指南
第一步:确认你的 NGINX 版本
nginx -v
如果输出是 1.x 且低于 1.30.4,或 1.31.x 低于 1.31.3,就需要升级。
第二步:检查 map 配置中是否有未命名捕获
grep -rn '\$[0-9]' /etc/nginx/conf.d/*.conf /etc/nginx/nginx.conf
如果 map 块中出现 $1、$2 等,立即按上一节的写法改为命名捕获。
第三步:升级 NGINX(推荐平滑升级,零停机)
# Debian/Ubuntu
sudo apt update && sudo apt install nginx=1.31.3
# RHEL/CentOS
sudo yum update nginx-1.31.3
# 平滑升级(不中断服务)
sudo kill -USR2 $(cat /var/run/nginx.pid)
第四步:如果短期无法升级
- 对 CVE-2026-42533:将所有
map中的数字捕获全部改为命名捕获(见上文示例); - 对 CVE-2026-60005:如果编译了 slice 模块,同样检查捕获变量写法;如果不需要 slice,重新编译 NGINX 去掉该模块;
- 对 CVE-2026-56434:无临时缓解,尽快升级。
七、WAF 层面的防御
在补丁安装完成之前,可以借助 WAF 进行流量层的临时拦截。
百度云防护(已备案站点可用)的 Web 基础防护引擎支持对 HTTP 请求头长度、正则注入特征进行检测。建议在控制台做以下配置:
- Web 基础防护 → 策略集切换为「高级(严格)」→ 处置动作设为「拦截」;
- 自定义规则:新建一条规则,匹配条件为「请求头长度 > 4096 字节」或「User-Agent / Host 头包含畸形正则字符」,动作为「拦截」;
- CC 防护:同步开启智能 CC,避免攻击者在漏洞利用的同时发起 HTTP Flood 放大攻击。
再次强调:WAF 是争取升级时间的缓冲,不能替代 NGINX 升级。升级完成后再将策略恢复为「中级」。
八、结语
CVE-2026-42533 的特殊之处不在于 CVSS 有多高——高危漏洞我们见得多了——而在于它在 NGINX 代码里躺了 15 年。15 年间全球数千万台服务器运行着带有这个漏洞的 NGINX,直到 2026 年 7 月才被发现和修复。
对于站长来说,这不是一个”等等看”的漏洞。今天检查配置,本周完成升级——在攻击者写出批量扫描脚本之前,把门关上。
主机吧 | 百度云防护官方合作伙伴
提供 WAF 接入、高防 CDN、高防 IP、高防服务器、SSL 证书一站式服务
15 年的漏洞不可怕,可怕的是 15 天后你还没修。
