NGINX 曝潜伏 15 年堆溢出漏洞 CVE-2026-42533:无需认证一条请求即可 RCE,站长请立即升级

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_tngx_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 指令与未命名正则捕获组合,缓存键构造时引用未初始化内存;
  • 场景 Bproxy_cache_background_update on 时,后台子请求更新缓存访问未初始化缓冲区。

泄露内容可能包含 TLS 密钥材料、其他客户端的 Cookie/Authorization 头、上游响应数据、内存指针。配合 CVE-2026-42533,泄露的指针可用来绕过 ASLR,实现稳定 RCE。

四、CVE-2026-56434:SSI 模块 Use-After-Free

ssi onproxy_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 请求头长度、正则注入特征进行检测。建议在控制台做以下配置:

  1. Web 基础防护 → 策略集切换为「高级(严格)」→ 处置动作设为「拦截」;
  2. 自定义规则:新建一条规则,匹配条件为「请求头长度 > 4096 字节」或「User-Agent / Host 头包含畸形正则字符」,动作为「拦截」;
  3. CC 防护:同步开启智能 CC,避免攻击者在漏洞利用的同时发起 HTTP Flood 放大攻击。

再次强调:WAF 是争取升级时间的缓冲,不能替代 NGINX 升级。升级完成后再将策略恢复为「中级」。

八、结语

CVE-2026-42533 的特殊之处不在于 CVSS 有多高——高危漏洞我们见得多了——而在于它在 NGINX 代码里躺了 15 年。15 年间全球数千万台服务器运行着带有这个漏洞的 NGINX,直到 2026 年 7 月才被发现和修复。

对于站长来说,这不是一个”等等看”的漏洞。今天检查配置,本周完成升级——在攻击者写出批量扫描脚本之前,把门关上。

主机吧 | 百度云防护官方合作伙伴

提供 WAF 接入、高防 CDN、高防 IP、高防服务器、SSL 证书一站式服务

15 年的漏洞不可怕,可怕的是 15 天后你还没修。

给TA打赏
共{{data.count}}人
人已打赏
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
在线客服
在线客服
热线电话
QQ客服
电子邮箱
suduwangluo