打开网易新闻 查看精彩图片

全球超过4亿台服务器在用的NGINX,被一个视频文件攻破了。CVE-2026-32647,CVSS v4.0评分8.5——这是今年开年以来Web服务器领域最严重的本地提权漏洞之一。

F5安全公告里的措辞很克制:"允许本地认证攻击者触发拒绝服务或潜在执行任意代码。"翻译成人话:如果你有服务器账号,上传一个精心构造的MP4,就能让NGINX worker进程崩溃,甚至拿到shell。

漏洞藏在最不起眼的模块里

漏洞藏在最不起眼的模块里

出问题的是ngx_http_mp4_module,一个处理MP4流媒体的老模块。这个模块从NGINX 1.1.19版本就存在,至今已经14年。

漏洞类型是CWE-125,越界读取。攻击者构造的恶意MP4会让worker进程在解析时发生缓冲区溢出或下溢,进程直接被系统杀死。NGINX主进程会尝试重启worker,但在此期间,活跃连接全部中断。

更麻烦的是内存损坏的连锁反应。安全研究者Xint Code和Pavel Kohout来自Aisle Research,他们在协调披露时发现:这个内存破坏点理论上可以被利用来执行远程代码。虽然F5公告里用了"潜在"这种模糊词,但8.5的CVSS评分已经说明问题严重性。

影响范围划得很清楚:NGINX Plus R32到R36全中,NGINX开源版1.1.19到1.29.6全中。修复版本分别是R36 P3、R35 P2、R32 P5,以及开源版的1.28.3和1.29.7。

有个细节很多人没注意:NGINX Plus默认打包了这个模块,开箱即用即风险。开源版用户相对安全——除非你手动编译时加了--with-http_mp4_module,并且在配置文件里写了mp4指令。

打开网易新闻 查看精彩图片

攻击面比想象中窄,但刚好打在痛点上

攻击面比想象中窄,但刚好打在痛点上

这个漏洞的利用条件有三层:本地访问、认证账号、目标服务器启用了MP4模块。看起来门槛很高,但恰好命中一类特殊场景。

内容分发网络、视频网站、在线教育平台——这些地方的运维人员往往有服务器账号,而业务又重度依赖MP4切片。攻击者不需要外部渗透,内部一个被控制的账号就能触发。

F5的缓解方案分两种。能立即打补丁的,直接升级。不能立即升级的,手动注释掉所有mp4指令,然后nginx -t检查语法,最后reload。

这里有个坑:很多管理员以为reload是热更新,不会断连接。但在这个场景下,reload本身就会触发worker重启,短暂中断不可避免。高并发业务需要评估窗口期。

BIG-IP、BIG-IQ、F5OS、F5 Distributed Cloud用户可以放心——公告明确说这些产品线完全不受影响。漏洞被隔离在NGINX的数据平面,控制平面没有暴露。

14年老代码的遗产问题

14年老代码的遗产问题

ngx_http_mp4_module的代码最后一次大规模重构是什么时候?查提交记录会发现,核心解析逻辑多年未动。MP4格式本身复杂,box嵌套、版本差异、厂商扩展,解析器很容易在边界处理上栽跟头。

打开网易新闻 查看精彩图片

这次漏洞的深层启示是:NGINX的模块化架构既是优势也是负债。mp4模块不是默认启用,但一旦启用就深度集成在worker进程里。一个模块的内存安全问题,能直接拉垮整个请求处理流水线。

对比Apache的MP4处理方案,NGINX选择把解析逻辑放在worker内部而非独立进程。性能上赢了,隔离性上输了。这是架构层面的trade-off,14年前没人觉得有问题。

Aisle Research的两位研究者值得注意。Xint Code这个名字在2024年的CVE记录里出现过两次,都是内存安全方向。Pavel Kohout的背景更偏向二进制分析。他们的组合技:Code负责构造触发样本,Kohout负责分析利用路径。

F5的致谢名单里还有协调披露的时间线。从报告到补丁发布,典型的90天周期。这期间受影响用户没有公开信息,全靠厂商私下通知。这种披露模式的安全性和透明性,业内争论了十几年。

补丁之外的长尾问题

补丁之外的长尾问题

升级容易,验证难。很多生产环境的NGINX是发行版自带的,比如Ubuntu LTS、RHEL EPEL。这些渠道的补丁往往滞后上游数周甚至数月。

更隐蔽的是配置漂移。十年前某个工程师加了mp4指令,后来人走茶凉,配置没人敢动。现在安全团队扫描漏洞,发现版本号在受影响范围内,但根本没人记得哪个location在用MP4功能。

云厂商的托管NGINX服务是另一片盲区。AWS ALB、Azure Front Door、Cloudflare的底层是不是NGINX?是不是用了mp4模块?这些细节不会写在文档里。用户只能等厂商公告,或者主动开ticket追问。

开源版的版本号管理也是个历史包袱。1.28.x是稳定分支,1.29.x是主线分支,两个分支同时维护。这次补丁1.28.3和1.29.7一起发,但很多自动化脚本只跟踪主线,稳定分支用户反而漏掉更新。

最后问一句:你的NGINX配置里,有没有一行被遗忘的mp4指令?检查/etc/nginx/nginx.conf和所有include文件,成本不到五分钟。但如果被攻击者先找到,成本就是一次P0级事故复盘。