Nginx高危漏洞CVE-2026-42945CVSS v4.0评分9.2为潜伏约18年的堆缓冲区溢出漏洞攻击者通过构造特定HTTP请求即可利用漏洞导致Nginx worker进程崩溃实现拒绝服务攻击DoS在某些特定环境下还可能实现远程代码执行RCE风险极高。影响 Nginx Open Source 0.6.27 至 1.30.0 版本以及 Nginx Plus R32 至 R36。通过 nginx -v 核查版本。高危配置该漏洞触发必须同时满足以下全部条件· ① 版本在受影响范围内· ② 配置中存在 rewrite 规则后紧跟另一个 rewrite、if 或 set 指令· ③ 规则中使用了未命名捕获组如 $1、$2· ④ 替换字符串中含有问号? 。优先修改配置以快速规避排查完成后若发现高危配置请优先采用修改配置的方式快速规避风险即将 rewrite 规则中的未命名捕获组如 $1、$2替换为命名捕获组如 (?Pname…)如业务允许暂时注释或移除该类规则。升级修复完成配置修改后落实完成上述配置修改后建议有序安排版本升级。优先将 Nginx Open Source 升级至 1.30.1 或 1.31.0 及以上版本或将 Nginx Plus 升级至 R32 P6 / R35 P2 / R36 P4 及以上版本。升级完成后需重启Nginx服务生效。一、满足漏洞触发条件的【高危危险配置】完整样例这个配置同时满足漏洞触发全部 4 个条件一旦使用就会暴露在高危漏洞下server { listen 80; server_name example.com; # # 高危危险写法触发漏洞 # # 条件1rewrite 后紧跟另一个 rewrite / if / set # 条件2使用未命名捕获组 $1、$2 # 条件3替换字符串里包含问号 ? # 条件4版本在 0.6.27 ~ 1.30.0 之间 # 危险样例 1rewrite 后紧跟 rewrite rewrite ^/article/(\d)$ /show?id$1?; rewrite ^/(.*)$ /index.php?$1?; # 危险样例 2rewrite 后紧跟 if rewrite ^/user/(\w)$ /profile?name$1?; if ($host ! example.com) { return 301; } # 危险样例 3rewrite 后紧跟 set rewrite ^/api/(\w)$ /api/v1/$1?; set $api_mode public; }为什么危险rewrite后面紧跟了rewrite/if/set使用了$1$2未命名捕获组替换字符串里有问号?版本在受影响范围 →可被攻击导致崩溃甚至 RCE二、修复方案使用【命名捕获组】的安全配置可直接替换修复规则把(\d)改成(?P变量名\d)把$1改成$变量名安全配置样例修复后server { listen 80; server_name example.com; # # 安全修复写法无漏洞 # # 替换为命名捕获组 (?Pname...) # 不再使用 $1、$2 # 保留原有业务逻辑不变 # 修复 1 rewrite ^/article/(?Pid\d)$ /show?id$id?; rewrite ^/(?Ppath.*)$ /index.php?$path?; # 修复 2 rewrite ^/user/(?Pname\w)$ /profile?name$name?; if ($host ! example.com) { return 301; } # 修复 3 rewrite ^/api/(?Pfunc\w)$ /api/v1/$func?; set $api_mode public; }三、最简单的对照记忆法类型写法是否危险危险rewrite ^/(\w)$ /a?$1?;是安全rewrite ^/(?Px\w)$ /a?$x?;否四、快速自查命令直接复制运行# 查看 Nginx 版本判断是否受影响 nginx -v # 快速扫描配置里是否存在高危写法 grep -r rewrite.*\$[0-9].*? /etc/nginx/如果输出内容说明存在漏洞配置请立即按上面的样例修复。总结危险根源rewrite连用 $1未命名捕获组 字符串含?修复方法统一换成命名捕获组(?P变量...)业务无影响只是写法变更功能完全不变