社区所有版块导航
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

NGINX 再曝 0day RCE:这次我慌不慌?

黑白之道 • 4 月前 • 142 次点击  

导语:早上刷到这条消息的时候,我手心微微出汗——我手上跑着好几个 NGINX 反代,全是默认配置,5 月 21 日刚爆出 nginx-poolslip 0day,攻击者可以远程代码执行,没有认证,没有补丁。我第一反应是:要凉了?


一、0day 来了,先别慌

事情是这样的:5 月 21 日,NebSec 团队的安全研究员 Vega 在 X(原 Twitter)上公开发布了一篇技术帖,披露了名为 "nginx-poolslip" 的零日漏洞—— affecting NGINX 1.31.0,也就是截至目前的最新稳定版。

The Cyber News 第一时间跟进报道,一小时内转发超过 50 次,浏览量 17,000+。

事情的重点:

漏洞靶向 NGINX 内部内存池(memory pool)处理机制。内存池是 NGINX 管理请求生命周期分配的核心数据结构——任何一个地方出错,都可能影响整个请求链。

攻击者无需认证,只需发送精心构造的 HTTP 请求,即可在服务器上实现远程代码执行(RCE)。

目前尚无官方补丁,处于纯 0day 状态。

影响面:全球估计 30-40% 的网站都在用 NGINX,国内占比尤其高。你说影响大不大?大。但具体到你身上,先往下看。


二、漏洞原理:内存池是怎么被"钻空子"的

NGINX 的每个 worker 进程都维护着自己的内存池(ngx_pool_t),用于分配和处理请求过程中的所有内存。这个设计非常高效——但高效的代价是,一旦内存池里的某个指针被搞乱了,整个池子的结构都会被污染。

nginx-poolslip 的核心思路,就是通过构造特殊的 HTTP 请求,让 NGINX 在内存池分配和释放的过程中,发生地址越界或释放后重用的情况。

NGINX 内存池安全概念图

具体的利用链我这边不展开,因为截至目前,完整的利用细节尚未公开——Vega 只透露了漏洞的标题和大致分类,具体构造 PoC 的方式只有安全社区内部掌握。

但根据目前已知的信息,漏洞利用的触发需要触发 NGINX 内存池中的特定状态转换路径,这需要特定的 NGINX 配置才能被触发。

换句话说:漏洞确实存在,但你的 NGINX 不一定能被这个漏洞利用。


三、你的 NGINX 真的中招了吗?

正当我准备改好几百个 Nginx 配置的时候,安全社区的分析泼了盆冷水——而且方向不太一样。

XorNinja(独立安全研究员)问了 Claude 一件事:下载并分析 GitHub 上超过 4,000 个 NGINX 配置文件,看看有多少是 nginx-rift 和 nginx-poolslip 可利用的配置。

结果:全部为 0。

也就是说,在 4,000 个公开的、真实的 NGINX 配置样本里,没有一家能触发 nginx-poolslip 的利用链。

另一位研究员 Yanir_ 更直接:"那些 ASLR 绕过都是白费力气,因为那个配置模式根本不存在于真实的 NGINX 实例中。退一步说,如果你能读主机上的文件,你已经赢了。别制造 FUD。"

这里的 FUD 指的是"恐惧、不确定和怀疑"——用严重但实际不存在的威胁来制造焦虑。

这让我冷静下来思考:

漏洞是 0day → 是真的,需要重视 但漏洞利用需要特定配置 → 你的标准反代大概率不满足 完整的 PoC 未公开 → 现在还只是个声明阶段 4,000 个真实配置无一命中 → 实际部署风险可能被夸大了


四、这波操作之后:NGINX 系列漏洞全回顾

这事儿不是 NGINX 今年第一次上头条了。来,把最近几轮串起来看看。

nginx-rift(CVE-2026-42945)

5 月 13 日,DepthFirst AI 披露了"NGINX Rift"——一套由 4 个 CVE 组成的漏洞链,其中最严重的 CVE-2026-42945(CVSS 9.2)是 NGINX ngx_http_rewrite_module 的堆缓冲区溢出。它需要特定的 rewrite + set 指令组合配置。

关系:同样是 RCE,同样是"需要特定配置",同样是官方修复后才真正清零风险。

njs 模块漏洞(CVE-2026-8711)

5 月 19 日左右,NGINX JavaScript(njs)模块的堆缓冲区溢出被披露,攻击者通过 ngx.fetch() 操作和 js_fetch_proxy 指令触发。同样需要 js_fetch_proxy 开启这个非默认配置。

关系:与前两个漏洞一样,攻击面高度依赖非默认配置。

三者的共同特征

漏洞
披露时间
CVSS
需要非默认配置
0day
官方补丁
CVE-2026-42945 (Rift)
5月13日
9.2
✅ 需 rewrite+set
✅ 已修复
✅
CVE-2026-8711 (njs)
5月19日
高危
✅ 需 js_fetch_proxy
✅ 已修复
✅
nginx-poolslip
5月21日
未定
✅ 需特定配置
🆕 无补丁
❌

值得注意的规律:这三个漏洞的利用都高度依赖特定的非默认配置。这不是巧合,是 NGINX 模块化架构本身的特性——每个功能模块都需要在 nginx.conf 里显式启用,没有启用的功能模块就根本不会出现在请求处理路径里。


五、如果你在用 NGINX,现在该做什么

虽然安全社区的分析显示实际利用门槛不低,但我仍建议做以下几件事:

NGINX配置审计

第一步:确认你的 NGINX 版本

nginx -v
# 输出示例:nginx version: nginx/1.31.0

如果你跑的是 1.31.0,先升级到最新稳定版(官方推荐至少到 1.31.1 或更稳定版本),并持续关注 F5/NGINX 的安全公告。

第二步:检查是否有特殊配置

审查你的 nginx.conf,重点看是否开启了以下配置:

  • ngx_http_rewrite_module 中使用 rewrite + set 的组合
  • ngx_http_js_module 是否启用了 njs
  • js_fetch_proxy 是否开启
  • ngx_http_scgi_module 或 ngx_http_uwsgi_module 是否在使用中

如果你的 NGINX 只是普通反代 + SSL 终止 + 静态文件,大概率跟这些配置不沾边。

第三步:WAF 层面增加防护

在不清楚具体利用构造的情况下,可在 WAF 层面加强:

  • 限制对 NGINX 状态端点( /nginx_status、/status)的外部访问
  • 对超大 HTTP Header、异常请求格式进行过滤
  • 限制 worker 进程权限,尽量以低权限用户运行

第四步:持续关注官方公告

nginx-poolslip 目前是 0day,完整技术细节和 PoC 尚未公开,官方也还没有补丁。这是最需要盯紧的阶段——一旦官方发布补丁,应立即升级。


六、总结:这件事告诉了我们什么

先回应开头那个问题:我手头的 NGINX 慌不慌?

目前来看,我的 NGINX 都是标准反代配置,没有启用 njs 模块,没有复杂的 rewrite + set 链,没有 SCGI/UWSGI。根据目前的安全社区分析,大概率不会被 poolslip 利用。但"大概率"不等于"一定"——因为完整的利用链还没有公开,没人能百分之百打包票。

这个事件的微妙之处在于:安全社区一边在说"这不影响你的 NGINX",一边又说"这是 0day RCE"。这两种说法看起来矛盾,但其实不矛盾——漏洞是 0day 是真的,但它利用路径极窄也是真的。

这不是最紧张的一次 NGINX 漏洞,这可能是 0day 影响被放大的典型 FUD 案例——但也正好提醒我们:NGINX 这么普及、这么核心的组件,任何潜在的漏洞都值得认真对待,而不是靠运气。

我会持续关注官方补丁的进展,一旦有正式修复建议,会第一时间跟进分享。

版权声明:本文由华盟网原创发布,保留所有权利。配图由华盟网授权使用。


👇 点击阅读原文,访问我的网站


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