2026年5月F5官方披露的CVE-2026-42945漏洞,颠覆了很多运维和安全人员对NGINX核心代码安全性的认知。这款潜伏18年、覆盖几乎全量NGINX版本的堆溢出漏洞,没有复杂的利用前置条件,无需后台权限、无需用户交互,公网任意匿名攻击者只要找到合规的漏洞触发配置,就能实现服务瘫痪甚至远程代码执行。
不同于普通组件漏洞,该漏洞根植于NGINX核心重写模块的底层逻辑设计,而非简单的代码拼写错误。过往绝大多数安全审计、开源扫描工具都无法有效发现该缺陷,这也是它能长期潜伏、未被曝光的核心原因。目前全网大量政企站点、云负载均衡、反向代理网关仍存在可被直接利用的风险,批量入侵、批量宕机的攻击事件已经出现。
本文从底层代码逻辑、触发机制、真实攻击链路出发,完整拆解CVE-2026-42945漏洞细节,提供可直接部署的批量检测脚本、临时规避配置、永久修复方案,同时梳理常态化防御手段,适配生产环境、测试环境、容器化环境的不同落地场景,帮运维和安全从业者快速完成资产排查与漏洞整改。
一、漏洞基础信息与风险定位
1.1 核心漏洞基础参数
CVE-2026-42945,行业通用代号NGINX Rift,是NGINX HTTP重写模块存在的高危堆缓冲区溢出漏洞。F5官方评级Critical,CVSS 4.0评分9.2,CVSS 3.1评分8.1,属于可远程无认证利用的超高危漏洞。
该漏洞代码逻辑在2008年NGINX 0.6.27版本首次并入主线代码库,此后18年所有迭代版本均未修复该逻辑缺陷,直至2026年5月官方推送专属补丁与修复版本。市面上主流的LNMP一键部署包、宝塔面板集成NGINX、云厂商默认NGINX镜像,全部受该漏洞影响。
漏洞核心风险点非常明确:攻击者仅构造特定格式的超长HTTP请求,无需任何交互和权限,就能触发NGINX Worker进程堆内存越界写入。普通利用方式可直接造成业务服务宕机,精准利用可绕过常规内存防护机制,实现服务器远程代码执行。
1.2 资产影响范围与真实威胁场景
Netcraft 2026年全网服务器统计数据显示,NGINX服务承载全球37.2%的公网Web业务,对应超1.3亿台在线服务器。该漏洞不局限于普通网站,所有基于NGINX二次开发的网关、负载均衡、API转发服务、静态资源服务器都会受到影响。
日常运维中,很多企业为了实现URL重写、参数透传、路由转发,会大量使用rewrite正则匹配+参数拼接的配置,这恰恰是漏洞触发的必要条件。大量运维团队照搬通用配置模板,完全没有意识到这类常规路由配置暗藏高危漏洞,导致大量核心业务资产长期暴露在攻击面中。
高风险业务场景集中在四类:政企官网与业务系统、互联网企业反向代理网关、云服务器容器化NGINX服务、内网核心API负载均衡节点。这类资产一旦被利用,会直接造成业务停摆、数据泄露、内网渗透等严重安全事故。
二、漏洞底层原理与运行机制实战拆解
2.1 漏洞根因:双阶段逻辑不一致的底层缺陷
绝大多数普通漏洞源于参数校验缺失、边界判断疏漏,而CVE-2026-42945是典型的架构级逻辑缺陷。NGINX重写模块处理带正则捕获变量的URL跳转规则时,固定分为两个执行阶段:内存长度预计算、字符串内存拷贝写入。
正常业务逻辑中,两个阶段的字符统计规则完全统一,预计算的缓冲区大小可以完全容纳最终拼接的URL字符串,不会出现越界情况。开发者在设计代码时,默认所有URL字符都会被完整统计,匹配、分配、写入流程闭环可靠。
但在包含问号参数拼接、且后置脚本指令的特殊配置场景下,内核逻辑出现撕裂。预计算阶段的代码会错误将问号后的所有字符判定为非有效路径字符,直接截断长度统计,计算出的缓冲区尺寸远小于实际字符串长度。拷贝写入阶段不会遵循截断规则,会完整拼接用户传入的所有可控字符,超长字符串强行写入偏小的堆缓冲区,直接覆盖相邻堆内存块,触发堆缓冲区溢出。
缺陷代码固定位于NGINX源码src/http/ngx_http_script.c文件的ngx_http_script_regex_end_code函数,是重写模块的核心执行函数,无法通过简单模块禁用规避,只能通过改代码、升版本、改配置三种方式处理。
2.2 漏洞完整触发执行流程
为清晰展示漏洞触发全流程,这里梳理完整执行链路,从请求接入到内存溢出、服务异常的每一步动作都可复现。
A[攻击者构造超长URL请求] --> B[NGINX接收请求匹配location规则]
B --> C[触发rewrite正则捕获$1变量]
C --> D[进入长度预计算逻辑:截断?后字符,偏小内存申请]
D --> E[内核完整拼接全部用户可控字符]
E --> F[超长字符串写入偏小堆缓冲区]
F --> G[堆内存结构被破坏,Chunk头/函数指针被覆盖]
G --> H{溢出利用方式}
H --> H1[普通溢出:Worker进程崩溃,服务重启DoS]
H --> H2[精准构造:劫持执行流,实现RCE]
```
整个流程没有任何额外门槛,请求无需Cookie、无需Token、无需IP白名单,公网任意节点均可发起攻击。这也是该漏洞危害等级远超普通高危漏洞的核心原因。
2.3 内存溢出细节拆解
NGINX采用自主实现的内存池与堆内存管理机制,Worker进程处理每一个请求时,都会临时申请堆内存用于存储URL重写后的字符串数据。预计算阶段出错后,系统分配的内存Chunk尺寸不足,用户可控的超长字符串会持续向后覆盖内存数据。
轻微溢出只会破坏空闲堆内存结构,触发NGINX内存校验机制,直接杀死当前Worker进程,实现单次服务拒绝攻击。持续批量发送恶意请求,会让Worker进程反复崩溃重启,CPU资源被持续占用,最终导致整机业务卡死、端口无法响应。
在未开启完整内存防护的服务器环境中,攻击者可以精准控制溢出长度,篡改内存中的函数调用指针。NGINX进程在执行后续逻辑时,会调用被篡改的指针地址,攻击者借此劫持程序执行流,执行任意系统命令。
三、漏洞精准触发条件与真实配置漏洞样例
该漏洞不会在默认NGINX配置下触发,必须满足服务端配置+客户端请求双重条件。很多安全人员扫描不到该漏洞,就是因为只检测版本,没有校验站点真实路由配置,导致漏判、误判。
3.1 服务端高危配置必备特征
站点配置同时满足三个特征,即可判定为高危可利用配置,也是全网资产排查的核心依据:
第一,配置文件存在 rewrite 正则匹配规则,使用 $1、$2 等正则捕获变量接收用户请求参数;第二,rewrite 跳转路径中包含英文问号 ?,用于拼接自定义参数;第三,当前 location 规则块内,rewrite 指令后紧跟 set、if、二次 rewrite 等脚本指令。
以下是生产环境高频出现的漏洞可复现完整配置,可直接用于自测验证:
# 高危可触发漏洞的NGINX配置样例 server { listen 80; server_name test.vuln.com; location /api/ { # 正则捕获+问号参数拼接 rewrite ^/api/(.+)$ /backend/$1? source=nginx_rift last; # 后置set脚本指令,触发逻辑缺陷 set $api_path $1; } location /backend/ { proxy_pass http://127.0.0.1:8080; } }上述配置是企业路由转发、接口代理的通用写法,几乎没有安全人员会意识到该常规配置暗藏远程溢出漏洞,这也是本次漏洞影响面极广的关键。
3.2 客户端攻击请求特征
攻击者仅需要向高危配置节点发送超长字符请求,填充正则捕获变量,即可突破内存缓冲区限制。最简攻击请求格式如下:
GET /api/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA HTTP/1.1 Host: test.vuln.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Accept: */*超长A字符会完整填充$1变量,预计算阶段截断问号后字符,分配小尺寸内存,写入阶段超长字符直接溢出,触发进程崩溃。加长字符长度、精准构造特殊字符,即可实现稳定溢出与高阶利用。
四、漏洞危害分级与真实攻击链路复盘
4.1 一级危害:无认证远程DoS(全网通用)
所有存在高危配置的NGINX节点,无论是否开启内存防护机制,都会被触发DoS攻击。恶意请求触发堆内存越界后,NGINX内置的内存校验机制会判定内存损坏,主动终止当前Worker进程。
单条恶意请求可瞬时断开当前所有连接,高频批量请求会让服务器持续创建、销毁进程,CPU占用率飙升至100%,端口监听阻塞,正常用户请求无法接入。对于电商、支付、政务等高可用要求的业务,单次短时间攻击即可造成直接业务损失。
4.2 二级危害:远程代码执行RCE(高危环境)
服务器关闭ASLR地址随机化、DEP数据执行保护等内存防护机制时,攻击者可以稳定利用该漏洞实现RCE。低权限NGINX进程权限虽有限,但攻击者可通过进程权限读取服务器配置、窃取网站源码、抓取数据库账号密码。
若服务器存在配置漏洞,NGINX进程拥有较高权限,攻击者可直接提权至root,完全控制服务器,植入持久化木马、搭建后门、横向渗透内网其他资产,形成持续性安全威胁。
4.3 完整真实攻击链路
结合全网监测的真实攻击行为,整理出攻击者标准入侵流程,所有步骤均可自动化批量执行:
攻击者通过端口扫描、资产测绘批量探测公网80/443端口NGINX资产 → 遍历站点路由配置,匹配高危rewrite规则特征 → 发送超长测试请求验证漏洞可用性 → 批量发起DoS攻击瘫痪业务,或精准构造Payload实现RCE → 植入后门留存权限、窃取核心数据。
五、受影响版本与资产精准排查方案
5.1 精准版本范围
漏洞引入版本:NGINX 0.6.27(2008年),全量中间版本均受影响。
受影响版本区间:0.6.27 ≤ NGINX版本 ≤ 1.30.0
官方修复版本:稳定分支 1.30.1及以上、长期支持分支 1.28.1及以上
所有第三方二次打包、面板集成、云镜像NGINX,只要内核版本落在上述区间,均存在漏洞,与部署方式无关。
5.2 一键批量检测脚本(可直接复制执行)
这里提供Linux服务器一键检测脚本,自动识别NGINX版本、扫描高危配置,适配CentOS、Ubuntu、Debian全系列系统,执行后直接输出风险结论。
#!/bin/bash# CVE-2026-42945 一键漏洞检测脚本# 适配所有Linux NGINX环境echo"========== CVE-2026-42945 漏洞检测开始 =========="# 1. 检测NGINX版本NGINX_VER=$(nginx-v2>&1|awk-F'/''{print $2}')echo"当前NGINX版本:$NGINX_VER"# 版本风险判断if[[-z$NGINX_VER]];thenecho"[异常] 未检测到NGINX服务"else# 判断版本是否处于漏洞区间VER_MAJOR=$(echo$NGINX_VER|cut-d'.'-f1)VER_MINOR=$(echo$NGINX_VER|cut-d'.'-f2)if[[$VER_MAJOR-lt1]];thenecho"[高危] 当前版本存在CVE-2026-42945漏洞"elif[[$VER_MAJOR-eq1&&$VER_MINOR-le30]];thenecho"[高危] 当前版本存在CVE-2026-42945漏洞"elseecho"[安全] 当前版本已修复漏洞"fifi# 2. 扫描高危rewrite配置echo-e"\n========== 扫描高危配置规则 =========="NGINX_CONF_DIR="/etc/nginx"VULN_CONF_NUM=$(grep-rE"rewrite.*\$[0-9].*\?"$NGINX_CONF_DIR--include="*.conf"2>/dev/null|wc-l)if[[$VULN_CONF_NUM-gt0]];thenecho"[警告] 检测到$VULN_CONF_NUM条高危漏洞配置,存在被攻击风险"grep-rE"rewrite.*\$[0-9].*\?"$NGINX_CONF_DIR--include="*.conf"2>/dev/nullelseecho"[安全] 未检测到高危触发配置"fiecho-e"\n========== 检测完成 =========="使用方式:新建scan.sh文件,粘贴代码,授权执行后运行,3秒即可完成单服务器全量检测。
chmod+x scan.sh ./scan.sh六、生产环境分级修复方案(零停机/应急/永久)
针对不同生产环境的运维需求,分为临时应急规避、无停机热修复、永久版本升级三套方案,用户可根据业务可用性要求自由选择。
6.1 应急规避:配置修改(零业务影响,立即生效)
无法停机、无法升级的核心业务,优先使用配置规避方案,彻底阻断漏洞触发条件。核心逻辑是消除“正则捕获变量+问号参数+后置脚本”的组合配置。
安全改造后的合规配置(可直接替换高危配置):
# 修复后安全配置 location /api/ { # 拆分参数拼接逻辑,移除触发条件 rewrite ^/api/(.+)$ /backend/$1 last; # 参数统一在proxy阶段透传,不占用rewrite阶段拼接 proxy_set_header X-Query-String "source=nginx_safe"; }同时新增全局请求长度限制,阻断恶意超长Payload攻击,全局配置添加:
# 全局防护配置 client_header_buffer_size 4k; large_client_header_buffers 2 4k; # 限制URL最大长度,杜绝溢出攻击 limit_req_zone $binary_remote_addr zone=url_limit:10m rate=100r/s;修改后执行nginx -t校验配置,nginx -s reload平滑生效,全程无业务中断。
6.2 无停机热补丁修复
F5官方提供NGINX动态热补丁,支持不重启、不重载服务的漏洞修复方式,适配核心高可用业务。补丁仅修复双阶段长度计算逻辑,不改动其他内核功能,兼容性极强。
补丁部署后,内核自动统一预计算与拷贝阶段的字符统计规则,彻底消除溢出风险,待业务低峰期再完成版本升级即可。
6.3 永久修复:版本升级(唯一根治方案)
所有临时方案仅能规避攻击,无法根除漏洞底层缺陷。长期安全稳定运行的服务器,必须完成版本升级。
版本升级适配规则:存量LTS长期业务升级至1.28.1及以上,新业务、迭代业务升级至1.30.1及以上最新稳定版。升级过程保留原有所有配置,无需重构业务路由规则。
七、常态化安全加固与防御体系搭建
7.1 系统与服务基础加固
服务器默认开启ASLR地址空间随机化、DEP数据执行保护两大内存防护机制,直接杜绝该漏洞的RCE利用路径,仅保留DoS风险。
严格采用最小权限原则运行NGINX服务,禁止root用户启动进程,使用专用低权限nginx/www-data用户运行,即便漏洞被利用,攻击者也无法获取高权限控制系统。
关闭NGINX不必要的script、rewrite模块,无路由重写需求的服务直接禁用模块,缩减攻击面。
7.2 流量侧检测与拦截防御
WAF设备、云WAF、自建防护规则中,新增超长URL请求拦截策略,对单URL长度超过2048字符的异常请求直接拦截,阻断漏洞利用Payload传入。
搭建日志监控告警机制,实时监测NGINX Worker进程异常重启、短时间内高频502/504报错,一旦出现批量异常,立即判定存在攻击行为,自动触发告警与流量封禁。
7.3 资产常态化运维规范
企业需建立NGINX资产台账,统一记录版本号、核心配置、部署场景,每月完成一次版本巡检与漏洞扫描。优先整改公网暴露、无WAF防护、承载核心业务的高危资产,杜绝漏洞长期潜伏。
八、漏洞复盘与行业安全启示
CVE-2026-42945的曝光,暴露了基础设施安全运维的普遍短板。18年超长潜伏周期,不是因为漏洞利用难度高,而是因为漏洞触发条件贴合常规业务配置、缺陷根植内核底层逻辑,常规的版本扫描、工具审计完全无法识别。
很多运维人员长期依赖模板化配置搭建业务,从不深究配置背后的安全风险,导致通用配置变成高危攻击入口。同时行业普遍存在“新版NGINX无高危漏洞”的固有认知,放松了对核心中间件的常态化安全检测。
对于企业安全建设而言,单纯依赖工具扫描、被动补丁更新已经无法应对这类底层逻辑漏洞。必须结合配置审计、流量监测、代码层级校验的多维检测方式,才能提前发现潜伏型安全风险。
互动提问
1. 你所在的业务环境中,是否大量使用带参数拼接的NGINX rewrite配置?
2. 针对这类长期潜伏的中间件底层漏洞,你认为企业最有效的常态化防御手段是什么?欢迎在评论区留言交流。