NGINX 严重堆缓冲区溢出
CVE-2026-42945(也称为 NGINX Rift)是 NGINX 的 ngx_http_rewrite_module 中的一个严重安全漏洞。
该漏洞源于 URI 重写规则处理中,长度检查阶段与实际复制/转义阶段之间的缓冲区大小计算不一致。
| 状态 | 版本 |
|---|---|
| 受影响 | 0.6.27 → 1.30.0 |
| 已修复 | 1.30.1 和 1.31.0+ |
| 状态 | 发布版本 |
|---|---|
| 受影响 | R32 → R36 |
| 已修复 | R36 P4, R32 P6, 37.0.0+ |
注意:许多 F5 NGINX 产品(Ingress Controller、App Protect、Gateway Fabric 等)如果运行在存在漏洞的基础版本上则会受到影响。
该漏洞由特定指令组合触发:
rewrite 指令,其替换字符串包含 ?(激活 is_args 标志)。rewrite、if 或 set 指令,使用未命名的 PCRE 捕获组($1、$2 等)。is_args = false)→ 低估所需缓冲区大小。is_args = true)→ 调用 ngx_escape_uri() 并传入 NGX_ESCAPE_ARGS。+、&、% 等)导致堆溢出。| 影响 | 严重程度 | 描述 |
|---|---|---|
| 拒绝服务 | 高 | 可靠的工作进程崩溃 |
| 远程代码执行 | 严重(有条件) | 在禁用或绕过 ASLR 时可能 |
CVSS v4.0 评分:9.2(严重)
CVSS v3.1 评分:8.1(高)
将未命名捕获组替换为命名捕获组:
rewrite ^/users/([0-9]+)/profile/(.*)$ /profile.php?id=$1&tab=$2 last;
rewrite ^/users/(?<user_id>[0-9]+)/profile/(?<section>.*)$ /profile.php?id=$user_id&tab=$section last;
关键建议:审计所有将包含 ? 的替换字符串与随后使用 $1、$2 等结合的重写规则。
CVE-2026-42945 是近年来最重大的 NGINX 漏洞之一,因其存在时间长、利用简单且可能实现 RCE。
立即行动——修补您的实例并更新配置。
为安全社区用 ❤️ 制作
| 攻击复杂度 | 低 | 单个 HTTP 请求,无需认证 |