imSre9/CVE-2026-42945
GitHub: imSre9/CVE-2026-42945
Stars: 0 | Forks: 0
# 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 测试
# 使用项目中的测试脚本
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 业务)配置中测试结果如下:
| 配置场景 | layer1 结果 | layer2 结果 | 原因分析 |
|----------|------------|------------|----------|
| `rewrite` 无 break + `proxy_pass` | ❌ 触发漏洞(404) | ❌ 无请求到达 | rewrite 后继续执行 `set` 触发堆溢出,worker 崩溃 |
| `rewrite` 有 break + `proxy_pass` | ✅ 正常(200) | ⚠️ 可能触发漏洞 | `break` 终止 `set` 执行,请求正常转发到后端 |
## 文件说明
| 文件 | 说明 |
|------|------|
| `CVE-2026-42945/CVE-2026-42945-test.py` | 漏洞测试 PoC 脚本,用于验证目标是否存在漏洞 |
| `single_layer_test/single_layer_nginx.conf` | 单层架构易受攻击的 NGINX 配置示例 |
| `single_layer_test/image.png` | 漏洞原理示意图 |
| `single_layer_test/test.log` | 测试日志文件 |
| `double_layer_test/layer1_nginx.conf` | 双层架构第一层(转发层)NGINX 配置 |
| `double_layer_test/layer2_nginx.conf` | 双层架构第二层(业务层)NGINX 配置 |
## 参考资料
- [NGINX 官方安全公告](https://nginx.org/en/security_advisories.html)
- [CVE-2026-42945 MITRE 详情](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-42945)
- [NVD - CVE-2026-42945](https://nvd.nist.gov/vuln/detail/CVE-2026-42945)
## 免责声明
本项目仅供安全研究和教育目的使用。使用者必须遵守所在国家和地区的法律法规。作者不对任何未经授权的滥用行为负责。
**禁止用于非法攻击!**
*Last Updated: 2026-05-19*
标签:CVE-2026-42945, NGINX, PoC测试, Web服务器安全, 堆缓冲区溢出, 安全漏洞, 安全补丁, 应用程序安全, 拒绝服务, 漏洞分析, 编程工具, 网络安全, 路径探测, 远程代码执行, 配置漏洞, 隐私保护