AI 发现潜伏 18 年的 NGINX 高危漏洞 CVE-2026-42945:rewrite 模块堆溢出,1900 万实例受影响

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 被全球数千万开发者使用、审查、调试,但这个漏洞一直没被发现。原因有三:

  1. 代码复杂度高:rewrite 模块的正则处理代码有 17 层嵌套,人类很难完全理解;
  2. 触发条件苛刻:需要构造非常特殊的 rewrite 规则 + 特殊 URL 才能触发溢出;
  3. 传统工具覆盖不到: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 长度和正则注入特征进行匹配。建议配置:

  1. 新建自定义规则,匹配条件为「URL 长度 > 4096 字节」→ 拦截;
  2. 同时启用 Web 基础防护的「高级」策略集,拦截异常 rewrite 利用的 payload;
  3. 通过 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 年前的漏洞,你的防御也需要跟上时代。

给TA打赏
共{{data.count}}人
人已打赏
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
在线客服
在线客服
热线电话
QQ客服
电子邮箱
suduwangluo