文章总结: CVE-2026-42533是NGINX脚本引擎中一个存在15年的堆缓冲区溢出漏洞,允许远程未认证攻击者通过特制HTTP请求导致工作进程崩溃或可能实现远程代码执行。该漏洞影响nginx0.9.6至1.31.2版本,仅在使用特定正则表达式map配置时触发。F5已发布修复版本1.30.4和1.31.3,建议用户立即升级。临时缓解措施为将编号捕获替换为命名捕获,但并非完全有效。 综合评分: 89 文章分类: 漏洞分析,WEB安全,安全工具
15年历史的NGINX漏洞可致Worker崩溃并实现远程代码执行
FreeBuf
2026年7月20日 16:37 上海
在小说阅读器读本章
去阅读
F5已发布针对NGINX一个严重漏洞的修复方案。该漏洞允许远程未认证攻击者通过精心构造的HTTP请求,在工作进程中触发堆缓冲区溢出。漏洞编号CVE-2026-42533,已于7月15日在nginx 1.30.4(稳定版)和1.31.3(主线版)以及NGINX Plus 37.0.3.1中得到修复;使用更早版本的用户应立即升级。
触发该漏洞可导致工作进程崩溃或重启,造成拒绝服务;F5指出,在ASLR被禁用或可被绕过的情况下,该漏洞还可能允许远程代码执行。
Part01
技术细节:脚本引擎中的捕获覆盖
该溢出存在于nginx的脚本引擎中,即处理请求时由指令拼接字符串的代码。它仅在特定配置下才会出现:使用正则表达式的map指令,其输出变量在字符串表达式中被引用,且该表达式前面还包含来自之前正则匹配的捕获。
在这种模式下,引擎的双遍评估过程会出现问题。第一遍测量结果所需的字节数,并分配合适大小的缓冲区;第二遍则将字节写入。两遍评估都会读取相同的共享捕获状态,而两遍之间对map指令正则表达式的评估会覆盖该状态。
因此,测量遍会为原始捕获(例如来自location匹配的$1引用)分配缓冲区大小,而写入遍则从另一个由攻击者控制的、不同大小的捕获中填入数据。缓冲区因此过小,超出的长度和内容均直接来自请求。
该漏洞并非影响所有nginx服务器;是否暴露取决于配置,而不仅仅是版本。F5的安全公告指出,该漏洞影响的除了核心服务器和NGINX Plus,还包括NGINX Ingress Controller、Gateway Fabric、App Protect WAF和Instance Manager,不过在发布时F5尚未列出这四个产品的修复版本。
Part02
漏洞影响范围与修复措施
F5对该漏洞的CVSS v4评分为9.2,旧版v3.1评分为8.1,并将攻击复杂性评定为“高”。从nginx 0.9.6到1.31.2的所有版本均受影响,这一范围可追溯至2011年——当年map开始支持正则表达式。
CVE-2026-42533由十余位研究人员独立向F5报告;F5感谢他们“独立将这一问题告知我们”。nginx自身的更新日志将修复归功于Winfunc Research的Mufeed VH以及维护者Maxim Dounin。
其中一位报告者Stan Shaw(以cyberstan名义发布)发布了一份详细的技术分析,内容比安全公告更进一步。F5将代码执行的条件限定为ASLR被禁用或可被绕过,而Shaw认为该漏洞本身就能提供绕过手段。他向The Hacker News表示,捕获覆盖也会反向发生:当被覆盖的捕获小于原始捕获时,过大的缓冲区会返回未初始化的堆数据,在默认的Ubuntu 24.04构建中,一次未认证的GET请求就能恢复有效载荷所需的地址。
“阅读F5安全公告的人可能会合理地认为,在默认系统上该漏洞仅导致拒绝服务。但事实并非如此。”Shaw说。这一说法比F5的声明更为严重,据称他在自己的测试中达到了10分(满分10分)。他目前暂不公开利用细节和PoC(概念验证),因此目前尚无法独立验证。
修复方法是升级至nginx 1.30.4或1.31.3,或NGINX Plus 37.0.3.1。对于无法立即修补的用户,F5的临时缓解措施是将受影响的正则map替换为命名捕获。Shaw表示,这能堵住主要攻击路径,覆盖大多数配置。
但他告诉The Hacker News,该缓解措施仍留下一条较窄的路径:如果map定义了与location正则相同的命名组,则可通过第二条代码路径触发相同的溢出。他已通过AddressSanitizer确认了这一点,而F5的安全公告并未提及。“升级至1.30.4 / 1.31.3是唯一的完整修复方案。”他说。
可以通过grep定位的暴露范围很窄:基于正则表达式的map,其变量出现在字符串表达式中,且该表达式同时包含来自之前正则表达式的编号捕获($1、$2),并且捕获写在map变量之前。
Shaw自己的扫描器可自动检查配置,跟踪include文件,并仅标记可利用的顺序;它不进行任何利用,但作为报告者的工具,它并非厂商产品。
Part03
近期关联漏洞与后续建议
这是大约两个月内,nginx表达式求值代码中披露的第三个堆溢出漏洞,前面分别是5月的Rift(CVE-2026-42945)和几天后重写模块中的捕获重叠漏洞(CVE-2026-9256)。
这三个漏洞属于同一类缺陷:nginx的双遍脚本引擎在一遍中测量缓冲区大小,在下一遍中写入,而每次写入都超出了测量的长度。触发因素各不相同——Rift中是过期的标志,重写漏洞中是重叠捕获,而本漏洞中是捕获状态被覆盖。正如研究人员指出的,共同弱点是信任自身测量的双遍设计。
截至7月20日,CVE-2026-42533尚未列入CISA的已知利用漏洞目录,也未出现公开的漏洞利用代码。Shaw表示,他将在补丁发布21天后公开自己的PoC,而Rift是一个警示案例:其漏洞利用在数天内就已公开,并很快被用于实际攻击。这正是为何应在下一个漏洞利用出现之前升级的原因。
The Hacker News就Shaw记录到的变体向F5询问:改用命名捕获是否能完全封堵CVE-2026-42533,以及受影响下游产品的修复版本何时发布。截至发布时,F5尚未回应。
参考来源:
Critical NGINX Vulnerability Can Crash Workers and May Allow Remote Code Execution
https://thehackernews.com/2026/07/critical-nginx-vulnerability-can-crash.html
推荐阅读
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
电报讨论
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:FreeBuf 《15年历史的NGINX漏洞可致Worker崩溃并实现远程代码执行》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论