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
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论