一个沉睡了整整15年的漏洞终于被唤醒,影响范围几乎覆盖所有Nginx版本,攻击者甚至不需要任何认证就能远程拿到服务器控制权。更糟糕的是,之前打过的那些补丁完全无法阻止它。
紧急:Nginx的“化石级”漏洞
2026年7月15日,F5官方拉响了安全警报,一口气修复了Nginx开源版和商业Plus版中的三个高危内存漏洞。其中编号CVE-2026-42533的那个尤其扎眼——它在Nginx代码里悄悄躲了15年,CVSS v4评分高达9.2,妥妥的“严重”级别。
该漏洞由安全研究员 Stan Shaw(网名cyberstan)发现并报告给F5安全应急响应团队(SIRT),目前已在最新版本中得到修复。
⚠️ 影响范围大得惊人:从Nginx 0.9.6到1.30.3(稳定版)以及1.31.2(主线版),换句话说,2011年3月至今的所有Nginx版本统统中招。
漏洞到底是怎么触发的?
问题出在Nginx内部脚本引擎的一个陈年旧账上。
处理请求时,Nginx会用两轮评估来拼凑字符串表达式:先跑一遍LEN轮(测量轮)算算需要多大的缓冲区,再用VALUE轮(写入轮)把实际数据填进去。这两轮都靠一个叫 r->captures 的共享数组来保存正则捕获组(比如$1、$2)的内容。
但致命的是,Nginx根本没在两次评估之间保存和恢复这个数组的状态。当map指令的正则表达式在两次捕获引用之间被执行时,它会悄无声息地覆盖掉共享状态。结果呢?LEN轮估算的缓冲区大小和VALUE轮实际写入的数据量就对不上了。
两种攻击套路:偷数据 + 堆溢出
大小对不上了,攻击者立刻就有了可乘之机。
堆缓冲区溢出
如果被覆盖的捕获组比原来的大,VALUE轮就会往缓冲区外多写数据,造成堆内存溢出。溢出的长度和内容全由攻击者通过HTTP请求说了算。
信息泄露
反过来,如果被覆盖的捕获组更小,缓冲区会被分配得过大,响应里就会泄露未初始化的堆内存数据,其中就包括libc指针和堆指针。
💡 最可怕的是,把这两招结合起来,攻击者只用一次未认证的GET请求就能偷到足够绕过ASLR(地址空间布局随机化)的内存指针。再配合大约40个“喷射”连接和一次触发溢出的请求,就能在启用完整ASLR的Ubuntu 24.04上实现100%可靠的远程代码执行。
远不止单个指令的问题
漏洞的触角比想象中更长。根据Cyberstan的技术报告,该漏洞横跨了9个源文件中至少13个独立调用点,HTTP模块和Stream模块无一幸免。任何把正则捕获源和后续基于正则的map变量组合起来的配置都可能被利用。
常见受影响的指令如下:

⚠️ 特别注意:捕获引用和map变量不必出现在同一条指令里——同一个location块中不同指令的组合就足够引爆漏洞。
额外风险:命名捕获组的变体
还有一个更烫手的山芋:通过命名捕获组((?P<name>...))触发的漏洞变体。由于缓存机制不同,只修编号捕获的补丁搞不定它。也就是说,即便打了补丁,用了命名捕获组的配置依然可能踩雷。
尤为需要警惕的是,近期针对其他Nginx漏洞(CVE-2026-42945、CVE-2026-9256、CVE-2026-42055和CVE-2026-48142)的修复并不能解决CVE-2026-42533。如果你只更新到了针对那些漏洞的版本,现在依然是裸奔状态。
F5在官方公告里说,在ASLR被禁用或被绕过时,漏洞可能允许远程代码执行。但研究员Stan Shaw给出了更严重的判断:
“阅读F5安全公告的人可能会合理地认为,在默认系统上该漏洞仅导致拒绝服务。但事实并非如此。”
Shaw指出,漏洞本身就提供了绕过ASLR的手段——在默认的Ubuntu 24.04系统上,一次未认证的GET请求就能恢复攻击所需的内存地址。他自己测试的可靠性达到了10/10。目前,肖决定暂不公开完整的PoC和利用细节,给管理员留出打补丁的窗口。这一做法多少吸取了之前CVE-2026-42945(”Nginx Rift”)PoC公开后迅速被武器化的教训。
立即行动:防御清单
✅第一优先级:升级
马上对照下表,将你的Nginx升级到修复版本:

✅第二优先级:配置审计
研究员已发布静态配置扫描器(github.com/0xCyberstan/CVE-2026-42533-Config-Scanner)。该工具可以自动识别有漏洞的指令顺序、区分可利用与安全的排列,并支持JSON输出,而且不会对运行中的服务器造成任何影响。建议立刻对生产环境配置跑一遍。
✅第三优先级:配置重构
审计所有location块,检查有没有正则表达式捕获与基于正则的map变量同时出现的情况。如果有,最好重构配置,拆散这种危险组合。
资讯来源:
- F5官方安全公告(K000162097)
- The Hacker News
- Stan Shaw(cyberstan)技术分析报告:cyberstan.co.uk/nginx-rce