Nginx潜伏18年漏洞CVE-2026-42945:原理PoC修复全解析

🚨 Nginx 潜伏 18 年高危漏洞 CVE-2026-42945:原理、PoC 及修复方案
2026年5月13日,安全研究机构depthfirst联合 F5 重磅披露 NGINX 史上高危漏洞——CVE-2026-42945:
- CVSS v4.0 评分 9.2:属于高危漏洞
- 堆缓冲区溢出:可导致远程代码执行(RCE)
- 潜伏 18 年:自 2008 年写入代码库
- 影响全球 975 万站点:中国超 254 万网站受影响
- PoC 已公开:奇安信已成功复现
这是NGINX 核心模块的历史性漏洞,攻击者仅需发送一条特制 HTTP 请求即可远程接管服务器。
🔍 漏洞概述
基本信息
| 漏洞属性 | 详情 |
|---|---|
| 漏洞编号 | CVE-2026-42945 |
| CVSS 评分 | v4.0: 9.2 | v3.1: 8.1 |
| 漏洞类型 | 堆缓冲区溢出(Heap-based Buffer Overflow) |
| 威胁类型 | 远程代码执行(RCE)、拒绝服务(DoS) |
| 利用条件 | 无需认证,仅需构造 HTTP 请求 |
| 影响组件 | ngx_http_rewrite_module(NGINX 核心内置模块) |
| 发现机构 | depthfirst(自动化系统在 6 小时内发现) |
影响范围
- 全球 975 万站点受影响
- 中国 254 万网站受影响
- NGINX 承载全球约 1/3 网站,影响面极大
- 代码自2008 年写入,潜伏18 年
⚠️ 触发条件
三条件必须同时满足
漏洞触发需要配置满足特定条件组合:
| 条件 | 说明 | 示例 |
|---|---|---|
| 1. 未命名 PCRE 捕获 | rewrite 指令使用未命名捕获组 | $1, $2, $3… |
| 2. 替换字符串含问号 | 替换字符串包含 ? 字符 | /profile.php?id=$1&tab=$2 |
| 3. 后跟 rewrite/if/set | rewrite 指令后紧跟其他指令 | rewrite … last; if (…) { … } |
易受攻击示例
# 易受攻击配置
rewrite ^/users/([0-9]+)/profile/(.*)$ /profile.php?id=$1&tab=$2 last;
# 后跟其他指令
if ($arg_debug) {
set $debug_flag 1;
}
该配置同时满足三个条件:未命名捕获 $1/$2、替换字符串含 ?、后跟 if 指令。
🔬 漏洞原理
两阶段处理的状态不一致
NGINX 脚本引擎使用两阶段处理:
- 第一阶段:计算所需缓冲区大小
- 第二阶段:复制数据到缓冲区
漏洞核心在于is_args 标志位管理错误:
| 阶段 | is_args 状态 | 处理逻辑 | 结果 |
|---|---|---|---|
| 长度计算阶段 | is_args = 0 | 返回原始捕获长度 | 低估缓冲区大小 |
| 数据复制阶段 | is_args = 1 | 调用 ngx_escape_uri,每个字节扩展为 3 字节 | 堆缓冲区溢出 |
具体流程
- rewrite 指令包含未命名捕获 $1/$2
- 替换字符串包含 ?,触发 is_args = 1
- 长度计算阶段:使用新初始化的子引擎,is_args = 0
- 返回原始长度:分配过小的堆缓冲区
- 数据复制阶段:使用主引擎,is_args = 1
- 调用 ngx_escape_uri:扩展字节,溢出缓冲区
- 攻击者可控 URI 数据写入溢出区域
利用方式
跨请求堆风水(Heap Feng Shui):
- POST 请求体喷射堆内存(因为 URI 不能包含 null 字节)
- 溢出数据破坏相邻 ngx_pool_t 的 cleanup 指针
- 伪造 ngx_pool_cleanup_s,指向 system()
- pool 销毁时触发 system() 调用
- 实现 RCE
ASLR 影响
- ASLR 启用:仅导致 Worker 进程崩溃(DoS)
- ASLR 禁用:可实现远程代码执行(RCE)
📊 影响版本
NGINX Open Source
| 版本范围 | 修复版本 |
|---|---|
| 0.6.27 – 1.30.0 | 1.31.0, 1.30.1 |
NGINX Plus
| 版本范围 | 修复版本 |
|---|---|
| R32 – R36 | R36 P4, R35 P2, R32 P6 |
其他受影响组件
- NGINX Instance Manager:2.16.0 – 2.21.1
- NGINX App Protect WAF:4.9.0 – 5.8.0
- NGINX Ingress Controller:3.5.0 – 5.4.1
- NGINX Gateway Fabric:1.3.0 – 2.5.1
- F5 DoS for NGINX:4.8.0
🔥 PoC 状态
PoC 已公开
- GitHub 仓库:https://github.com/DepthFirstDisclosures/Nginx-Rift
- 奇安信已复现:威胁情报中心安全研究员成功复现
- 技术细节已公开:depthfirst 发布技术分析
- 在野利用:暂未发现
PoC 使用方法
# 构建容器 ./setup.sh # 启动易受攻击的 NGINX 服务器 docker compose -f env/docker-compose.yml up # 执行 PoC 获取 Shell python3 poc.py --shell
✅ 修复方案
方法 1:升级版本
# 升级到修复版本 NGINX Open Source >= 1.31.0 NGINX Open Source >= 1.30.1 NGINX Plus >= R32 P6 NGINX Plus >= R36 P4 # 升级后重启 NGINX nginx -s reload
方法 2:修改配置(缓解措施)
将未命名捕获组替换为命名捕获组:
# 易受攻击配置(未命名捕获) rewrite ^/users/([0-9]+)/profile/(.*)$ /profile.php?id=$1&tab=$2 last; # 修复后配置(命名捕获) rewrite ^/users/(?[0-9]+)/profile/(? .*)$ /profile.php?id=$user_id&tab=$section last;
命名捕获组不会触发漏洞。
方法 3:检查配置
检查是否存在易受攻击的配置:
# 搜索易受攻击的 rewrite 指令 grep -E "rewrite.*\$[0-9]+.*\?.*(rewrite|if|set)" /etc/nginx/nginx.conf grep -rE "rewrite.*\$[0-9]+.*\?.*(rewrite|if|set)" /etc/nginx/conf.d/
🔍 发现过程
自动化系统发现
depthfirst的安全分析系统:
- 6 小时内找到 5 个问题
- 4 个获 NGINX 确认
- CVE-2026-42945是最严重的漏洞
- 可追溯到 2008 年,存在于几乎所有标准构建版本
其他相关漏洞
- CVE-2026-42946:内存破坏问题
- CVE-2026-40701:内存破坏问题
- CVE-2026-42934:内存破坏问题
📝 总结
CVE-2026-42945是 NGINX 史上高危漏洞:
- 潜伏 18 年:自 2008 年写入代码库
- CVSS 9.2:堆缓冲区溢出,可导致 RCE
- 触发条件:rewrite 指令使用未命名捕获 + 替换字符串含 ? + 后跟其他指令
- 影响范围:全球 975 万站点,中国 254 万网站
- PoC 已公开:GitHub 仓库 + 奇安信已复现
- 修复方案:升级版本或使用命名捕获组
18 年潜伏漏洞爆发,建议尽快升级或修改配置。
官方公告:https://my.f5.com/manage/s/article/K000161019
下一篇
没有啦 (T▽T)
延伸阅读:
Nginx潜伏18年漏洞CVE-2026-42945:原理PoC修复全解析
🚨 Nginx 潜伏 18 年高危漏洞 CVE-2026-42945:原理、PoC 及修复方案2026年5月13日,安全...
GPT-5.5-Cyber独立完成网络攻击:从域名到Shell全自动
🚨 GPT-5.5-Cyber 已能独立完成网络攻击:从域名到 Shell 全自动OpenAI 发布了 GPT-5.5-...
支付宝收钱Skill:AI助手帮你收款
💰 支付宝"收钱"Skill 来了:AI 助手帮你收款支付宝"收钱"Skill来了——这是 OpenClaw 的一个新 ...
腾讯元宝群聊总结:一键提取关键信息
💬 腾讯元宝支持微信群聊一键总结:群聊信息不再漏腾讯元宝(基于腾讯混元大模型)现已支持微信群聊一键总结功能:一键总结:自...
Hermes Agent 2026.05.09 更新
AI Agent 领域再次迎来重要进展。Hermes Agent 在 2026 年 5 月 9 日发布重要更新,带来多项...