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

Nginx CVE-2026-42945

🚨 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 字节 堆缓冲区溢出

具体流程

  1. rewrite 指令包含未命名捕获 $1/$2
  2. 替换字符串包含 ?,触发 is_args = 1
  3. 长度计算阶段:使用新初始化的子引擎,is_args = 0
  4. 返回原始长度:分配过小的堆缓冲区
  5. 数据复制阶段:使用主引擎,is_args = 1
  6. 调用 ngx_escape_uri:扩展字节,溢出缓冲区
  7. 攻击者可控 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 已公开

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

PoC 仓库https://github.com/DepthFirstDisclosures/Nginx-Rift

技术分析https://depthfirst.com/research/nginx-rift

暂无介绍....

延伸阅读:

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

🚨 Nginx 潜伏 18 年高危漏洞 CVE-2026-42945:原理、PoC 及修复方案2026年5月13日,安全...

itadol5j
2026年5月15日
GPT-5.5-Cyber独立完成网络攻击:从域名到Shell全自动

🚨 GPT-5.5-Cyber 已能独立完成网络攻击:从域名到 Shell 全自动OpenAI 发布了 GPT-5.5-...

itadol5j
2026年5月14日
支付宝收钱Skill:AI助手帮你收款

💰 支付宝"收钱"Skill 来了:AI 助手帮你收款支付宝"收钱"Skill来了——这是 OpenClaw 的一个新 ...

itadol5j
2026年5月13日
腾讯元宝群聊总结:一键提取关键信息

💬 腾讯元宝支持微信群聊一键总结:群聊信息不再漏腾讯元宝(基于腾讯混元大模型)现已支持微信群聊一键总结功能:一键总结:自...

itadol5j
2026年5月13日
Hermes Agent 2026.05.09 更新

AI Agent 领域再次迎来重要进展。Hermes Agent 在 2026 年 5 月 9 日发布重要更新,带来多项...

itadol5j
2026年5月10日