Nginx 二十年漏洞大盘点:Rift 危机来了,赶紧打补丁!
Nginx 漏洞藏了18年:NGINX Rift 漏洞,你得马上打补丁
老代码总有隐患,这话说烂了。但要是这个隐患窝在 Nginx 这么火的 web 服务器里,足足18年呢?
F5 刚放出补丁,修了四个 Nginx 漏洞。最狠的那个 CVE-2026-42945,被发现者 depthfirst 叫“NGINX Rift”。基础设施团队,赶紧动起来吧。
为什么这么危险?老毛病,新麻烦
来拆解下这个坑:
漏洞根源:rewrite 模块里藏了个 heap buffer overflow。从 2008 年的 0.6.27 版就开始了。那时候 Docker 还没影儿,智能手机也刚起步,大家还纠结用 Nginx 还是 Apache。
怎么攻击:黑客不用登录,随便发个精心组的 HTTP 请求就行。不用复杂链条,不用钓鱼,不偷密码。一个请求,够了。
后果多严重:没开 ASLR 的系统,直接远程执行代码,全完蛋。开了 ASLR?也别高兴太早,服务器会反复崩溃,重启 worker,DoS 稳稳的。
CVSS 分数:9.2,Critical 级别。离满分 10 只差一点。
为什么这么老的 bug 还没死?
关键问题:它咋活了20年?答案戳中软件安全痛点。
Nginx rewrite 模块用 PCRE 处理 URL 匹配。要是用无名捕获($1、$2 啥的),后面再跟 rewrite、if 或 set 指令,就容易写超堆内存。经典 buffer overflow,本该代码审查就抓出来,结果溜过去了。
这告诉我们:再牛的开源项目,再多人用,也挡不住老 bug。Nginx 全球百万服务器在跑,影响范围超大。
谁得赶紧行动
NGINX Plus 用户:R32 到 R36 版的中招。打 R32 P6 或 R36 P4 补丁。
开源版用户:1.0.0 到 1.30.0 全中枪。立马升到 1.30.1 或 1.31.0。
倒霉蛋:还卡在 0.6.27 到 0.9.7 的古董 EOL 版?F5 不修了。必须全盘升级,没商量。
暂时打不了补丁?试试这个权宜之计
正卡在变更冻结,或老依赖升级风险高?有个临时招:
rewrite 指令里,把无名捕获换成命名捕获。别用 $1、$2,用 $(?<名字>...) 这样的。不是根治,但能堵住触发路径。
举例:
# 危险写法
rewrite ^/user/([0-9]+)$ /profile?id=$1 last;
# 临时安全版
rewrite ^/user/(?<id>[0-9]+)$ /profile?id=$id last;
这只是止血,别当真药。能补丁就补。
这次还修了仨 CVE
NGINX Rift 最吸睛,但 F5 顺手修了三个:
- CVE-2026-42946 (CVSS 8.3 High):SCGI 和 uWSGI 模块内存爆棚,特定代理配置下 DoS。
- CVE-2026-40701 (CVSS 6.3 Medium):SSL 模块 use-after-free,某些 ssl_verify_client 和 ssl_ocsp 设置触发。
- CVE-2026-42934 (CVSS 4.8 Medium):charset 模块越界读。
都不如 NGINX Rift 急,但下次维护别漏。
基础设施安全,几点血泪教训
这个漏洞敲醒我们:
- 火爆不等于刀枪不入。Nginx 到处是,还藏了18年。
- 老代码不是优点。时间长了,问题只会堆更多。
- 安全看最慢的那个。分布式环境,一台没补丁的 Nginx 就能拖垮全家。
- 监控不能少。就算 ASLR 挡着,DoS 也能瞬间瘫服务。
总结:别拖,赶紧补
用 Nginx 的,不管开源还是 Plus,这次补丁就是紧急任务。18年老洞、简单攻击、高危级别,优先级拉满。
这周就更新。先 staging 测试,生产别磨蹭。留洞的风险,比更新稳如老狗的 Nginx 大多了。
顺便审审配置,尤其是 rewrite 规则。检查下全网有没有老版本。安全第一,稳住!