Sploitus

Exploit for CVE-2026-42945

kitploit · 2026-09-03

Exploit Code

MARKDOWN121 lines
## 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_