0xBlackash/CVE-2026-42945
GitHub: 0xBlackash/CVE-2026-42945
系统记录了 NGINX ngx_http_rewrite_module 中存在约十八年的严重堆缓冲区溢出漏洞(CVE-2026-42945)的技术细节、触发原理与修复方案。
Stars: 2 | Forks: 1
# 🛡️ CVE-2026-42945 - **NGINX Rift**
**NGINX 中的严重堆缓冲区溢出漏洞**



## 📌 概述
**CVE-2026-42945**(也称为 **NGINX Rift**)是 NGINX 的 `ngx_http_rewrite_module` 中的一个**严重**安全漏洞。
- **类型**:基于堆的缓冲区溢出 (CWE-122)
- **发现时间**:2026 年 5 月
- **存在时间**:约 18 年
- **可利用性**:可通过单个精心构造的 HTTP 请求进行远程、未经身份验证的利用
该漏洞源于在处理 URI 重写规则时,长度检查阶段与实际复制/转义阶段之间的缓冲区大小计算不一致。
## 📋 受影响版本
### NGINX 开源版
| 状态 | 版本 |
|--------------|-----------------------------------|
| **受影响** | 0.6.27 → **1.30.0** |
| **已修复** | **1.30.1** 和 **1.31.0+** |
### NGINX Plus
| 状态 | 发布版本 |
|--------------|------------------------------|
| **受影响** | R32 → R36 |
| **已修复** | R36 P4, R32 P6, 37.0.0+ |
## 🔍 技术细节
该漏洞由特定的指令组合触发:
1. `rewrite` 指令的**替换字符串包含 `?`**(激活 `is_args` 标志)。
2. 随后是另一个使用**未命名 PCRE 捕获**(`$1`、`$2` 等)的 `rewrite`、`if` 或 `set` 指令。
### 根本原因
- **长度计算阶段**使用清零的子引擎(`is_args` = false)→ 低估了所需的缓冲区大小。
- **复制/转义阶段**使用真实的引擎(`is_args` = true)→ 使用 `NGX_ESCAPE_ARGS` 调用 `ngx_escape_uri()`。
- URI 中大量可转义字符(`+`、`&`、`%` 等)导致**堆溢出**。
## ⚠️ 影响
**NGINX 中的严重堆缓冲区溢出漏洞**


