社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  NGINX

15年历史的NGINX漏洞可致Worker崩溃并实现远程代码执行

FreeBuf • 2 周前 • 178 次点击  
FreeBuf


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


推荐阅读


电报讨论


扫码加入AI安全交流群

下载FreeBuf知识大陆APP

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/199023