代码 Nginx map 正则捕获堆溢出 CVE-2026-42533:未认证单条请求可 RCE,先改命名捕获再升级

2026-09-05 21:01:46

F5 一次性修补 NGINX 三个内存漏洞:map 指令 9.2 分堆溢出已有 PoC,24–48 小时内先用命名捕获缓解

2026-07-15,F5 修复了 NGINX 的三个内存漏洞。其中最严重的是 CVE-2026-42533map 指令中潜伏多年的堆缓冲区溢出,CVSS v4.0 评分 9.2。未认证攻击者用一条特制 HTTP 请求(或构造超长 SNI 字段的 TLS ClientHello)就能在 worker 进程内触发越界写,配合 ASLR 绕过理论上可达到远程代码执行。公开 PoC 已出现。

另外两个伴生漏洞:

  • CVE-2026-60005(8.8):ngx_http_slice_module 未初始化内存泄露
  • CVE-2026-56434(8.3):SSI 模块 Use-After-Free

来源:nginx.org/2026.html

受影响版本

发行线受影响版本修复版本
Open Source stable1.30.0 ~ 1.30.31.30.4
Open Source mainline≤ 1.31.21.31.3
NGINX Plus37.0.0.1 ~ 37.0.2.1、R33 ~ R3637.0.3.1 / R36 P7
Ingress Controller5.0.0 ~ 5.5.25.5.3
Gateway Fabric2.0.0 ~ 2.6.62.6.7

发行版会自己编号打包(例如 Alpine 修复包为 <1.30.4-r0),用包管理器安装的要看对应发行版的安全公告。

触发条件

并非所有老版本都会立刻被打穿。CVE-2026-42533 的实际触发需要满足:

  1. map 指令使用正则匹配
  2. 输出变量之前,有字符串表达式引用了 map 的正则捕获变量(如 $1
  3. 该表达式落到了动态输出 / 转发类指令上

自查命令:

nginx -v
grep -rn '\$[0-9]' /etc/nginx/conf.d/*.conf /etc/nginx/nginx.conf

缓解动作:把编号捕获改成命名捕获

$1 改为命名捕获(如 $name),并且只在包含该正则的块内引用捕获变量。这一条能同时缓解 CVE-2026-42533 和 slice 漏洞(CVE-2026-60005 也与未命名正则捕获有关)。

slice / SSI 模块的取舍

  • CVE-2026-60005slice 模块默认不编译,需要 --with-http_slice_module 显式启用才受影响。泄露内容可能包含 TLS 密钥材料、其他客户端的 Cookie/Header、内存指针——指针若与 42533 配合可辅助绕过 ASLR。不用 slice 就重新编译去掉。
  • CVE-2026-56434:触发条件是 ssi on + proxy_pass + proxy_buffering off 三者同时存在,且攻击者能控制上游响应(内网 MITM 或上游被控)。没有临时缓解,只能升级。

升级命令

# Debian/Ubuntu
apt install nginx=1.31.3

# RHEL/CentOS
yum update nginx-1.31.3

平滑升级:

nginx -t
kill -USR2 $(cat /var/run/nginx.pid)

Docker / K8s 注意

  • 不要用 latest 或固定大版本 tag,换官方安全版本重建镜像
  • 测试环境先执行 nginx -t,通过后再滚动更新
  • Ingress Controller 设置 maxUnavailable=0 保留旧 Pod,便于出问题时回滚
  • 第三方模块(lua/WAF/缓存)升级主程序后可能不匹配导致启动失败,先确认兼容性或重编译

修复优先级

优先级时间窗口CVE动作
P024–48 小时CVE-2026-42533编号捕获改为命名捕获;尽快升级
P11–2 周CVE-2026-60005命名捕获 / 禁用 slice 模块
P11–2 周CVE-2026-56434只能升级,无临时缓解
复制全文 生成海报 nginx 安全公告 CVE 运维 配置排查

推荐文章

程序员茄子在线接单