2026 年 5 月 12 日,NGINX 官方发布紧急安全公告,修复了一个潜伏了 18 年的高危漏洞 CVE-2026-42945(代号 NGINX Rift),CVSS 评分 9.2(严重级)。全球约 1900 万个 NGINX 实例受影响——但真正让人后背发凉的不是漏洞本身,而是 发现它的不是人类,而是一个 AI。
旧金山 AI 安全实验室 depthfirst 的 AI 系统,用了 6 个小时,在人类 18 年没找到的地方挖出了一个可利用的远程代码执行漏洞。
一、漏洞速览
| 项目 | 详情 |
|---|---|
| CVE 编号 | CVE-2026-42945 |
| 漏洞代号 | NGINX Rift |
| 漏洞类型 | 堆缓冲区溢出(Heap Buffer Overflow) |
| CVSS 评分 | 9.2(严重级) |
| 影响版本 | NGINX 0.6.27 ~ 1.30.0 |
| 潜伏时间 | 18 年(2008 年 ~ 2026 年) |
| 受影响实例 | 全球约 1900 万个 |
| 发现者 | depthfirst AI 安全分析系统 |
| 修复版本 | NGINX 1.31.0 / 1.30.1 |
二、漏洞出在哪里:rewrite 模块的缓冲区分配错误
问题出在 NGINX 的 rewrite 模块。rewrite 是站长们最常用的功能之一——URL 重写、伪静态、反向代理路径转换,几乎每个 NGINX 配置都会用到。
漏洞核心在于 ngx_http_rewrite_module.c 中的缓冲区分配逻辑:
// NGINX rewrite 模块(简化版)
static ngx_int_t
ngx_http_rewrite_rule(ngx_conf_t *cf, ngx_str_t *pattern, ngx_str_t *replacement)
{
u_char *buf;
size_t buf_size;
// 【漏洞点】buf_size 根据 pattern 长度计算
// 但没考虑正则匹配后"捕获组"占用的额外空间
buf_size = pattern->len + replacement->len + 128; // ← 算少了!
// 分配堆内存
buf = ngx_pnalloc(cf->pool, buf_size);
// 如果后续写入超过 buf_size → 堆溢出
// 【漏洞触发点】正则匹配 + 替换
rc = ngx_http_rewrite_compile(pattern, buf, buf_size);
// 如果 pattern 有 20 个以上的捕获组,写入数据远超 buf_size
}
用人话解释:
你订了一个小号披萨(buf_size 算小了),但你需要装 20 寸大披萨(正则匹配后的数据)。装不下就溢出来,溢出的部分会覆盖旁边披萨盒子里的内容(堆内存相邻区域)。在攻击场景下,攻击者构造一个特殊 URL 让 rewrite 匹配产生超长捕获组,溢出数据覆盖相邻内存,最终实现远程代码执行。
三、AI 是怎么发现这个漏洞的
depthfirst 的 AI 安全分析系统与传统漏洞扫描工具完全不同。它不是在”匹配已知漏洞模式”,而是真正理解代码逻辑。
完整时间线:
| 时间 | 事件 |
|---|---|
| 5 月 10 日 09:00 | AI 开始扫描 NGINX 全部源代码(约 35 万行 C 代码) |
| 5 月 10 日 15:00 | 首次扫描完成,未发现异常 |
| 5 月 11 日 10:00 | AI 自主调整分析策略——从”内存管理”转向”正则表达式处理” |
| 5 月 11 日 16:00 | 在 rewrite 模块中发现可疑的缓冲区分配逻辑 |
| 5 月 12 日 09:00 | AI 自主生成 3 个 PoC,尝试触发溢出 |
| 5 月 12 日 14:00 | 其中一个 PoC 成功触发崩溃(segfault) |
| 5 月 15 日 | depthfirst 向 NGINX 官方提交漏洞报告 |
depthfirst CEO 的原话值得每个站长思考:
“人类代码审查员往往会关注’看起来有问题的地方’。但 AI 不会带偏见——它会平等地检查每一行代码。这个漏洞,就藏在’看起来很正常’的缓冲区分配代码里。”
四、为什么人类 18 年没找到
rewrite 模块这段有漏洞的代码是 2008 年引入的。18 年间,NGINX 被全球数千万开发者使用、审查、调试,但这个漏洞一直没被发现。原因有三:
- 代码复杂度高:rewrite 模块的正则处理代码有 17 层嵌套,人类很难完全理解;
- 触发条件苛刻:需要构造非常特殊的 rewrite 规则 + 特殊 URL 才能触发溢出;
- 传统工具覆盖不到:Fuzzing 工具(AFL、libFuzzer)盲目生成输入,很难撞到能触发溢出的 URL。
而 AI 的做法完全不同——它逐行理解代码,发现”这个 buf_size 的计算方式可能有问题”,然后主动写攻击代码去验证。整个过程就像一个有经验的渗透测试工程师,只不过它能在 6 小时内读完 35 万行代码并完成分析。
五、你的 NGINX 是否受影响
检查版本
nginx -v
| 版本范围 | 是否受影响 |
|---|---|
| 0.6.27 ~ 1.30.0 | ✅ 受影响 |
| < 0.6.27 | ❌ 不受影响(无捕获组功能) |
| >= 1.31.0 或 1.30.1 | ❌ 不受影响(已修复) |
检查是否使用了 rewrite
grep -n "rewrite" /etc/nginx/nginx.conf /etc/nginx/conf.d/*.conf
如果输出为空,你没有用 rewrite 指令,攻击面大幅降低(但仍建议升级)。
六、修复方案
方案一:升级 NGINX(推荐)
# Debian/Ubuntu
sudo apt update && sudo apt install nginx=1.31.0
# 源码编译
wget https://nginx.org/download/nginx-1.31.0.tar.gz
tar -xzf nginx-1.31.0.tar.gz && cd nginx-1.31.0
./configure [你的编译参数]
make && sudo make install
sudo systemctl restart nginx
方案二:Docker 用户
# 原来
FROM nginx:1.29.0
# 改成
FROM nginx:1.31.0
方案三:WAF 临时缓解
如果短期无法升级,可以在 WAF 层面设置防护:
百度云防护(已备案站点可用)的自定义规则支持对 URL 长度和正则注入特征进行匹配。建议配置:
- 新建自定义规则,匹配条件为「URL 长度 > 4096 字节」→ 拦截;
- 同时启用 Web 基础防护的「高级」策略集,拦截异常 rewrite 利用的 payload;
- 通过 UA 和 JA3 指纹对自动化扫描工具进行限速或拦截。
再次强调:WAF 是争取升级时间的缓冲,不能替代 NGINX 升级。升级完成后将策略恢复为「中级」。
七、这件事对整个行业的启示
CVE-2026-42945 的发现是一个里程碑事件:AI 已经可以自主发现高危漏洞,而且是在人类 18 年都没找到的地方。
| 启示 | 说明 |
|---|---|
| 人工代码审查不够了 | 即使几百万人看过 NGINX 的代码,还是会漏掉 |
| AI 辅助安全审计应成为标准 | 像 CI/CD 流水线一样,每次提交都用 AI 做安全分析 |
| 攻击者和防御者都在用 AI | 军备竞赛刚刚开始 |
| 开源软件安全需要更多投入 | NGINX 核心只有约 20 个开发者 |
对站长而言,这条消息最重要的含义是:漏洞发现的速度正在被 AI 加速——攻击者也在用 AI 找漏洞。 过去”等官方发公告再修”的策略不再安全。你需要:
- 建立主动监控机制(关注 CVE 公告、安全邮件列表);
- 保持 NGINX / WordPress / 插件 / 系统补丁的快速更新节奏;
- 在 WAF 层面做纵深防御,不要只依赖单点。
结语
CVE-2026-42945 暴露了三个事实:NGINX 代码里有 18 年的漏洞、人类审查了 18 年没找到、AI 用 6 小时就找到了。 这既是警钟,也是方向——AI 时代的安全攻防,已经不再是”人 vs 人”,而是”人 + AI vs 人 + AI”。
主机吧 | 百度云防护官方合作伙伴
提供 WAF 接入、高防 CDN、高防 IP、高防服务器、SSL 证书一站式服务
AI 能发现 18 年前的漏洞,你的防御也需要跟上时代。
