文章总结: 文档披露NGINX的ngxhttprewritemodule中存在一个编号为CVE-2026-42945的堆缓冲区溢出漏洞,该漏洞自2008年引入,影响0.6.27至1.30.0版本,攻击者可通过rewrite和set指令实现未认证远程代码执行。漏洞成因是脚本引擎两阶段处理时isargs标志不一致导致缓冲区计算错误,利用堆风水技术可触发system()调用。文档提供了PoC代码、靶场环境搭建步骤及修复版本信息,并强调该漏洞由depthfirst安全系统自动发现。 综合评分: 88 文章分类: 漏洞分析,漏洞预警,应急响应,WEB安全,安全工具
NGINX 18 年老洞被挖出:RCE 复现来了(附 PoC + 靶场)
原创
Yn8rt Yn8rt
迷人安全
2026年5月14日 15:43 浙江
在小说阅读器读本章
去阅读
点击箭头处“蓝色字”,关注我们哦!!
现在只对常读和星标的公众号才展示大图推送,建议大家能把迷人安全“设为星标”,否则可能就看不到了啦!
【声明】本文所涉及的技术、思路和工具仅用于安全测试和防御研究,切勿将其用于非法入侵或攻击他人系统以及盈利等目的,一切后果由操作者自行承担!!!
NGINX Rift漏洞
CVE-2026-42945 的 RCE 概念验证代码。该漏洞是 NGINX ngx_http_rewrite_module 中一个严重的堆缓冲区溢出漏洞,于 2008 年被引入。该漏洞可使攻击者在未认证的情况下,对使用 rewrite 和 set 指令的服务器实现远程代码执行。
该漏洞与另外三个内存破坏问题(CVE-2026-42946、CVE-2026-40701、CVE-2026-42934)一起,是由 depthfirst 的安全分析系统在一键导入 NGINX 源码后自动发现的。
想在你自己的代码中发现类似问题?可以尝试使用同一个系统:https://depthfirst.com/open-defense。
漏洞简介(TL;DR)
NGINX 的脚本引擎使用两阶段处理流程:首先计算所需的缓冲区大小,然后再将数据复制进去。
当 rewrite 的替换内容中包含 ? 时,主引擎上的 is_args 标志会被设置。但长度计算阶段运行在一个全新清零的子引擎上。因此:
长度计算阶段看到 is_args = 0 → 返回原始捕获内容长度。
复制阶段看到 is_args = 1 → 使用 NGX_ESCAPE_ARGS 调用 ngx_escape_uri,将每个需要转义的字节扩展为 3 个字节。
随后,复制操作会使用攻击者可控的 URI 数据溢出这个尺寸不足的堆缓冲区。利用过程使用跨请求的堆风水技术,破坏相邻 ngx_pool_t 的 cleanup 指针。由于 URI 字节不能包含空字节,因此通过 POST body 进行喷射,并将其重定向到伪造的 ngx_pool_cleanup_s,在内存池销毁时调用 system()。
更多关于该漏洞的内容,请阅读我们的技术分析文章。
受影响版本与修复版本
| 产品 | 受影响版本 | 修复版本 | | — | — | — | | NGINX Open Source | 0.6.27 – 1.30.0 | 1.31.0、1.30.1 | | NGINX Plus | R32 – R36 | R36 P4、R35 P2、R32 P6 |
完整厂商公告:https://my.f5.com/manage/s/article/K000160932
使用方式
已在 Ubuntu 24.04.3 LTS 上测试。
./setup.sh
构建容器。
docker compose -f env/docker-compose.yml up
启动存在漏洞的 NGINX 服务器。
python3 poc.py --shell
弹出一个 shell。
POC+靶场地址
https://github.com/depthfirstdisclosures/nginx-rift
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:迷人安全 Yn8rt Yn8rt《NGINX 18 年老洞被挖出:RCE 复现来了(附 PoC + 靶场)》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论