## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-IMSRE9-CVE-2026-42945
# CVE-2026-42945: NGINX Rift 堆缓冲区溢出漏洞
## 概述
CVE-2026-42945 是 NGINX 服务器中的一个严重堆缓冲区溢出漏洞,被称为 "NGINX Rift"。该漏洞存在于 NGINX 的 rewrite 和 set 指令处理逻辑中,当特定配置条件满足时,攻击者可以通过构造恶意请求触发堆溢出,导致拒绝服务(DoS)甚至潜在的远程代码执行(RCE)。
**漏洞类型** :堆缓冲区溢出 **风险等级** :高危 **CVE ID** :CVE-2026-42945
* * *
## 影响范围
* **受影响版本** :NGINX 0.6.27 ~ 1.30.0
* **不受影响版本** :NGINX 1.31.0 及更高版本
* * *
## 修复版本
建议立即升级到以下版本之一:
* NGINX 1.31.0 或更高稳定版本
* 各发行版厂商提供的安全补丁版本
* * *
## 触发条件
漏洞触发需要同时满足以下两个条件:
1. **配置条件** :NGINX 配置中同时使用:
* `rewrite` 指令(替换字符串中包含 `?` 字符)
* `set` 指令(引用 rewrite 的正则捕获组,如 `$1`, `$2`)
2. **请求条件** :请求 URI 中包含可转义字符(如 +, &, % 等)
**原理说明** :
* `rewrite` 指令设置 `e->is_args = 1`(永不重置)
* `set` 指令的长度计算阶段使用全零子引擎(`le.is_args = 0`)
* NGINX 解码 `%25` 为 `%`,但 `ngx_escape_uri` 重新编码为 `%25`(3字节)
* 每个 `%25` 字符从 1 字节扩展为 3 字节,导致写入超出缓冲区边界
* * *
## 利用方式
### PoC 测试
root@kitploit:~
# 使用项目中的测试脚本
python3 CVE-2026-42945/CVE-2026-42945-test.py --host cve.test.com --port 80
### 漏洞验证流程
1. 发送正常请求确认服务器运行状态
2. 发送包含少量 `%25` 字符的请求进行小规模测试
3. 发送大量 `%25` 字符(如 2000 个)触发缓冲区溢出
4. 检测服务器是否崩溃或返回异常响应(500/502 错误)
5. 检查服务器是否自动恢复(master 进程 fork 新 worker)
* * *
## 测试结果分析
### 单层架构 POC 结果
在单层 NGINX 配置中测试结果会触发漏洞:
**崩溃日志分析** :
* Worker 进程因 SIGSEGV(信号)崩溃
* 崩溃发生在 `ngx_http_script_flush_no_cacheable_variables` 函数
* 崩溃阶段:`ngx_http_core_rewrite_phase`
### 双层架构 POC 结果
在双层 NGINX(layer1 转发 + layer2 业务)配置中测试结果如下:
* * *
## 文件说明
* * *
## 参考资料
* NGINX 官方安全公告
* CVE-2026-42945 MITRE 详情
* NVD - CVE-2026-42945
* * *
## 免责声明
本项目仅供安全研究和教育目的使用。使用者必须遵守所在国家和地区的法律法规。作者不对任何未经授权的滥用行为负责。
**禁止用于非法攻击!**
* * *
_Last Updated: 2026-05-19_