文章总结: CVE-2026-42533是nginxmap指令脚本引擎中一个存在15年的预身份验证远程代码执行漏洞,源于pcre捕获状态未保存/恢复,导致堆缓冲区溢出和信息泄露,可组合实现可靠RCE。影响nginx0.9.6至1.30.3等版本,已发布修复。建议使用配置扫描器审核配置。 综合评分: 90 文章分类: 漏洞分析,web安全,红队,安全工具,漏洞预警
15年前的NGINX漏洞允许攻击者使工作进程崩溃并实现远程代码执行
原创
ZM ZM
暗镜
2026年7月26日 07:00 北京
在小说阅读器读本章
去阅读
个新披露的漏洞(编号为CVE-2026-42533)影响mapnginx 的脚本引擎,自 2011 年 3 月该指令获得正则表达式支持以来,一直可以被悄悄利用。安全研究员 Stan Shaw 向 F5 SIRT 报告了该漏洞,F5 SIRT 协调在 nginx 1.30.4(稳定版)和 1.31.3(主线版)中发布了修复程序,以及 NGINX Plus R33–R36(在 R36 P7 中修复)和 37.0.0.1–37.0.2.1(在 37.0.3.1 中修复)的相应补丁。
该漏洞是一个预身份验证远程代码执行缺陷,其根源在于 nginx 内部脚本引擎中缺少 PCRE 捕获状态的保存/恢复。
nginx 会分两次执行表达式:一次是 LEN 遍历,用于测量缓冲区大小;另一次是 VALUE 遍历,用于写入实际数据。这两次都依赖于一个名为 <request> 的共享可变数组r->captures。当一个map带有正则表达式模式的指令在两次对捕获组的引用之间执行时(例如 <request> $1“),它会静默地覆盖该共享状态,导致 LEN 遍历和 VALUE 遍历得到的大小不一致。
存在15年的NGINX漏洞
这种不匹配会产生两种截然不同的攻击原语:
- 堆缓冲区溢出:当被破坏的捕获比原始捕获更大时,VALUE 传递写入的数据比缓冲区的大小要多,从而用攻击者完全控制的内容破坏相邻的堆内存。
- 信息泄露:当被破坏的捕获较小时,缓冲区过大,响应会泄露未初始化的堆字节(包括 libc 和堆指针),足以在单个未经身份验证的 GET 请求中绕过 ASLR。
这两个原语结合起来,攻击者可以使用大约一次泄漏请求、大约 40 次喷射连接和一次溢出触发请求来实现可靠的远程代码执行,据报道,在启用完全 ASLR 的 Ubuntu 24.04 上,可靠性为 10/10。
根据 Cyberstan 的报告,该漏洞并非局限于单个指令。它至少涉及 9 个源文件中的 13 个独立调用点,影响 HTTP 和流模块。任何在同一请求上下文中将正则表达式捕获源(<request>、<request>、 location<request> server_name`rewrite`或`if代码块)与后续计算的基于正则表达式的map`变量结合使用的配置都可能被利用——即使是在同一位置代码块中的不同指令之间。
受影响较大的指令包括:
proxy_set_header,,,,,proxy_method``proxy_pass``fastcgi_param``uwsgi_param``scgi_paramgrpc_set_header,,,,return``add_header``rewrite``setroot,,,以及其他alias几个access_log
通过命名捕获组((?P<name>...))存在一个单独的、可独立利用的变体,这些变体的缓存方式不同,并且不会通过仅针对编号捕获的补丁来修复。
受影响版本
| 产品 | 受影响版本 | 修复版本 | | — | — | — | | NGINX 开源版(稳定版) | 0.9.6 至 1.30.3 | 1.30.4 | | NGINX 开源版(主线) | 最高版本 1.31.2 | 1.31.3 | | NGINX Plus | R33–R36 | R36 P7 | | NGINX Plus(新系列) | 37.0.0.1–37.0.2.1 | 37.0.3.1 |
值得注意的是,最近针对其他 nginx 漏洞(CVE-2026-42945、CVE-2026-9256、CVE-2026-42055 和 CVE-2026-48142)的修复并没有解决这个问题,这意味着修补了这些漏洞的组织仍然面临风险。
值得注意的是,这种棘手的行为早在十多年前的 2014 年 nginx trac 工单中就被首次指出,当时开发者 Maxim Dounin 承认这是一个缺陷,但它从未作为一个安全关键问题得到彻底修复。
该研究人员在 GitHub 上发布了一个静态配置扫描器(0xCyberstan/CVE-2026-42533-Config-Scanner),该扫描器无需利用任何漏洞即可识别易受攻击的指令顺序,使防御者能够立即审核风险敞口。
完整的概念验证和利用说明将在补丁发布后保留 21 天,以便管理员有时间进行更新。这一决定是基于 CVE-2026-42945(“NGINX Rift”)公开后迅速被武器化的情况而做出的。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:暗镜 ZM ZM《15年前的NGINX漏洞允许攻击者使工作进程崩溃并实现远程代码执行》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论