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
延伸阅读:
一行命令干翻5个API!阿里云百炼CLI开源,Agent水电煤之战正式开打
5月29日,阿里云干了一件让 Agent 开发者集体高潮的事——百炼核心能力正式 CLI 化,一行命令就能让 AI Ag...
20亿用户握手!PayPal钱包正式接入微信支付,老外来华扫码时代到了
5月27日,支付圈传出来一个让人眼前一亮的消息:腾讯财付通全球与 PayPal World 正式达成合作,PayPal ...
支付宝杭州扔下王炸:3亿笔智能体支付已跑通,AI付Token Pay四件套定义新范式
5月26日下午,支付宝在杭州未来科技城国际会议中心办了一场叫"AI 支付生态大会"的活动。表面看是常规的产品发布会,实际...
渗透圈一夜变天!Xalgorix 22阶段全自动 AI 攻击平台开源,国产模型直接接
渗透测试这行最累的是什么?不是写报告,是重复劳动——侦察、目录爆破、注入点测试、SSRF 验证、CORS 检查……一个标...
Claude Mythos 企业版挖出超1万高危漏洞:Anthropic 联手13家巨头建AI安全联盟
Anthropic 最近搞了个大动作,但这次不是发新模型那么简单。4月7日,它联合了一串你可能做梦都想不到会站在一起的公...