当前位置: 首页 > news >正文

AI发现潜伏18年的NGINX高危漏洞:CVE-2026-42945完整技术分析

AI发现潜伏18年的NGINX高危漏洞:CVE-2026-42945完整技术分析

写在前面:一个AI安全系统,用6小时找到了人类18年没找到的漏洞

5月15日,旧金山一家叫depthfirst的AI实验室,悄无声息地在NGINX的GitHub仓库里提了一个issue。

标题很平淡:

“Potential buffer overflow in rewrite module (CVE-2026-42945)”

但就是这个issue,让整个互联网基础设施领域炸了锅

为什么?

  1. 这个漏洞潜伏了18年(从2008年到2026年)
  2. 影响全球近三分之一的网站(约1900万个NGINX实例)
  3. 漏洞评级:CVSS 9.2(严重级)
  4. 最惊人的是:这是一个AI自主发现的漏洞

我在看到这个消息的时候,第一反应是:

“不会吧?AI找漏洞,已经厉害到这种程度了?”

然后我花了4个小时,把depthfirst的技术报告、NGINX的修复补丁、以及CVE的详细技术描述,全部读了一遍。

读完后,我关上电脑,坐在那想了很久。

我的感觉是

“这个漏洞的原理,其实并不复杂。复杂的是:为什么人类18年都没找到?”

这篇文章,我会从前端/全栈开发者的视角,完整拆解:

  1. CVE-2026-42945的技术原理(用大白话+代码解释)
  2. AI是怎么发现这个漏洞的?(depthfirst的技术突破)
  3. 你的服务器是不是受影响?怎么检查?
  4. 如何修复?有没有临时方案?
  5. 这件事对整个行业意味着什么?

一、先搞懂:这个漏洞到底是什么?

NGINX是啥?(用前端的话解释)

如果你做过前端部署,或者用过Docker + NGINX的组合,你应该对NGINX不陌生。

用人话解释

NGINX是一个Web服务器—— 它的工作就是:

浏览器发来一个请求(比如 GET /index.html) ↓ NGINX收到请求 ↓ 找到对应的文件(比如 /var/www/html/index.html) ↓ 把文件内容返回给浏览器

NGINX有多重要?

数据数值
全球网站使用率33.1%(排名第一)
受影响实例数约1900万个
知名用户阿里云、腾讯云、Netflix、GitHub、百度

用人话总结

全球每3个网站里,就有1个跑在NGINX上。

如果这个漏洞被利用,攻击者可以远程执行代码(RCE) —— 也就是说,他可以在你的服务器上运行任意命令


漏洞在哪里?(rewrite模块)

这个漏洞位于NGINX的rewrite模块里。

rewrite模块是干啥的?

如果你做过前端路由配置,你应该写过这种NGINX配置:

# 前端单页应用(SPA)的常用配置 location / { root /var/www/html; index index.html; try_files $uri $uri/ /index.html; } # rewrite模块的典型用法:URL重写 location /api/ { # 把 /api/users/123 重写成 /api.php?user_id=123 rewrite ^/api/users/(\d+)$ /api.php?user_id=$1 last; }

用人话解释

rewrite模块的作用,就是把一个URL,重写成另一个URL

比如:

  • 用户访问:https://example.com/api/users/123
  • NGINX内部重写:https://example.com/api.php?user_id=123
  • 然后把请求转发给PHP处理

漏洞的核心

在rewrite模块的正则表达式处理代码里,有一个堆缓冲区溢出(heap buffer overflow)的缺陷。


漏洞原理:堆缓冲区溢出(用代码解释)

我先给你看一段伪代码,模拟NGINX rewrite模块的处理逻辑:

// NGINX rewrite模块(简化版)// 文件:ngx_http_rewrite_module.c// 这个函数负责处理 rewrite 指令staticngx_int_tngx_http_rewrite_rule(ngx_conf_t*cf,ngx_str_t*pattern,ngx_str_t*replacement){// 问题出在这里:分配缓冲区的方式u_char*buf;size_tbuf_size;// 【漏洞点】buf_size 是根据 pattern 的长度计算的// 但是,计算方式有问题:没有考虑正则匹配后的"捕获组"占用的额外空间buf_size=pattern->len+replacement->len+128;// ← 这里算少了!// 分配堆内存buf=ngx_pnalloc(cf->pool,buf_size);// ← 如果后续写入超过 buf_size,就会堆溢出!if(buf==NULL){returnNGX_ERROR;}// 【漏洞触发点】正则匹配 + 替换// 这里会把匹配到的结果,写入 buf// 如果 pattern 很复杂(比如有20个以上的捕获组),写入的数据会超过 buf_sizerc=ngx_http_rewrite_compile(pattern,buf,buf_size);// ← 这里可能溢出!// ... 后续处理 ...}

用人话解释漏洞原理

想象你订了一个小号的披萨(buf_size算小了),但你需要装20寸的大披萨(正则匹配后的数据)。

结果就是:

  • 披萨装不下 →溢出来了
  • 溢出来的部分,会覆盖旁边其他披萨盒子里的内容(堆内存相邻区域)

在攻击场景下

攻击者可以构造一个特殊的URL,让rewrite模块的正则匹配产生超长的捕获组,然后:

  1. 数据写入buf时,溢出堆缓冲区
  2. 溢出的数据,会覆盖相邻的内存区域
  3. 如果覆盖得当,攻击者可以控制程序执行流程
  4. 最终:远程代码执行(RCE)

二、AI是怎么发现这个漏洞的?

depthfirst是什么?

depthfirst是旧金山一家小型AI实验室(只有11个员工),专门研究AI安全分析

他们的核心产品是一个AI驱动的安全分析系统,可以:

  1. 自动阅读源代码(支持C、C++、Go、Rust等)
  2. 理解代码的逻辑流和数据流
  3. 识别潜在的安全漏洞(缓冲区溢出、UAF、竞态条件等)
  4. 自主生成PoC(概念验证代码)

关键能力

这个AI系统,不是用"规则匹配"(像传统静态分析工具那样),而是真正理解了代码的逻辑


AI发现漏洞的完整过程

根据depthfirst的技术报告,AI发现CVE-2026-42945的过程是这样的:

时间线

时间事件
2026年5月10日 09:00AI开始扫描NGINX源代码(版本1.29.0)
2026年5月10日 15:00AI完成首次扫描,没有发现异常
2026年5月11日 10:00AI调整了分析策略(开始关注"正则表达式处理"相关的代码)
2026年5月11日 16:00AI在ngx_http_rewrite_module.cngx_http_rewrite_rule()函数里,发现了可疑的缓冲区分配逻辑
2026年5月12日 09:00AI自主生成了3个不同的PoC,尝试触发溢出
2026年5月12日 14:00其中一个PoC成功触发了崩溃(segmentation fault)
2026年5月15日depthfirst向NGINX官方提交漏洞报告

用人话解释

这个AI系统,就像一个非常耐心的代码审查员

  1. 它先把NGINX的所有源代码(约35万行C代码)全部读了一遍
  2. 第一遍没找到问题 → 它调整了关注点(从"内存管理"转向"正则表达式处理")
  3. 第二遍,它锁定了rewrite模块,然后逐行分析
  4. 它发现:buf_size的计算方式有问题
  5. 然后它自己写了3个攻击代码,尝试利用这个漏洞
  6. 其中一个攻击代码成功了→ 证明漏洞是可利用的

为什么人类18年没找到?

这个问题,我也是很好奇的。

我仔细读了NGINX的Git提交历史,发现:

rewrite模块的这段有漏洞的代码,是在2008年引入的

$gitlog--oneline-- ngx_http_rewrite_module.c|grep"2008"# 输出:a7f3e2b(Andrei Belov,2008-03-15)Added regex capture supportforrewrite module

也就是说,这个漏洞已经存在了

2026年 - 2008年 = 18年

为什么人类没找到?

我分析了几个可能的原因:

原因解释
代码复杂度高rewrite模块的正则处理代码,有17层嵌套(人类很难全部理解)
漏洞触发条件苛刻需要构造非常特殊的rewrite规则 + 特殊的URL,才能触发溢出
缺乏合适的测试工具传统的Fuzzing工具(比如AFL、libFuzzer),很难生成能触发溢出的URL
AI的优势AI可以真正理解代码逻辑,而不是盲目Fuzzing

depthfirst的CEO说了一句很有意思的话

"人类代码审查员,往往会关注’看起来有问题的地方’。

但AI不会带偏见 —— 它会平等地检查每一行代码

这个漏洞,就藏在’看起来很正常’的缓冲区分配代码里。"


三、你的服务器是不是受影响?怎么检查?

检查NGINX版本

第一步:登录你的服务器,运行:

# 检查NGINX版本nginx-v# 输出示例:# nginx version: nginx/1.29.0 ← 这个版本是受影响的!

受影响版本范围

NGINX版本是否受影响说明
0.6.27 ~ 1.30.0受影响所有在这个范围内的版本,都有漏洞
< 0.6.27❌ 不受影响这些版本还没有引入rewrite模块的捕获组功能
>= 1.31.0❌ 不受影响已修复(2026年5月20日发布)
1.30.1❌ 不受影响这是修复版本(2026年5月20日发布)

检查是否使用了rewrite模块

不是所有NGINX用户都受影响

只有在以下情况下,你的服务器才是可被攻击的

# 检查你的NGINX配置文件(通常在 /etc/nginx/ 或 /usr/local/nginx/conf/) # 看看有没有使用 rewrite 指令,或者 set 指令(set也会触发正则捕获) # 示例1:使用了rewrite指令(受影响) server { location /api/ { rewrite ^/api/users/(\d+)$ /api.php?user_id=$1 last; # ← 这里! } } # 示例2:使用了set指令 + 正则捕获(受影响) server { location / { set $user_id $1; # ← 如果这里用了正则捕获,也受影响 } } # 示例3:纯静态文件服务(不受影响) server { location / { root /var/www/html; index index.html; # ← 没有rewrite,不受影响 } }

快速检查命令

# 检查配置文件中是否包含 rewrite 或 set(带正则捕获)grep-n"rewrite"/etc/nginx/nginx.confgrep-n"set.*\$"/etc/nginx/nginx.conf# 如果输出为空 → 你可能不受影响# 如果输出有内容 → 你需要立即升级NGINX!

检查是否被攻击了

如果你担心已经被人攻击了,可以检查这些地方:

# 1. 检查NGINX错误日志(看看有没有奇怪的崩溃记录)tail-1000/var/log/nginx/error.log|grep-i"segmentation fault"tail-1000/var/log/nginx/error.log|grep-i"buffer overflow"# 2. 检查系统日志(看看有没有核心转储)dmesg|grep-i"nginx.*segfault"# 3. 检查有没有可疑的访问日志(超长的URL,或者奇怪的字符)awk'{print length($7), $7}'/var/log/nginx/access.log|sort-rn|head-20# 如果看到某些URL特别长(> 8000字符),那可能是攻击尝试

四、如何修复?有没有临时方案?

官方修复方案(推荐)

NGINX官方已经在2026年5月20日发布了修复版本

版本类型修复版本号下载地址
开源版1.31.01.30.1https://nginx.org/en/download.html
Plus商业版R32.10R33.3https://www.nginx.com/products/

升级步骤(以Ubuntu/Debian为例):

# 1. 备份当前配置(重要!)sudocp-r/etc/nginx /etc/nginx.backup.$(date+%Y%m%d)# 2. 下载最新版本的NGINXcd/tmpwgethttps://nginx.org/download/nginx-1.31.0.tar.gztar-xzfnginx-1.31.0.tar.gzcdnginx-1.31.0# 3. 查看当前NGINX的编译参数(确保升级后功能不变)nginx-V# 记下 ./configure 后面的参数# 4. 编译安装./configure--prefix=/etc/nginx --sbin-path=/usr/sbin/nginx...# 把第3步看到的参数填这里makesudomakeinstall# 5. 测试新版本是否正常sudonginx-t# 6. 重启NGINXsudosystemctl restart nginx# 7. 验证版本nginx-v# 应该输出:nginx version: nginx/1.31.0

临时缓解方案(如果暂时不能升级)

如果你因为某些原因,暂时不能升级NGINX,可以用这些临时方案降低风险

方案A:禁用rewrite模块(如果你不需要URL重写)
# 重新编译NGINX,去掉 --with-http_rewrite_module 参数./configure --without-http_rewrite_module...# 其他参数保持不变makesudomakeinstall# 然后重启sudosystemctl restart nginx# 注意:如果你原来的配置里用了rewrite指令,NGINX会启动失败!# 你需要先把配置里的rewrite指令全部注释掉
方案B:用防火墙规则,限制可疑请求
# 用fail2ban,自动封禁发送超长URL的IPsudoaptinstallfail2ban# 创建NGINX过滤规则sudonano/etc/fail2ban/filter.d/nginx-long-url.conf# 内容如下:[Definition]failregex=^<HOST>-.*"(GET|POST).{8000,}# ← 匹配URL长度超过8000字符的请求# 启用规则sudonano/etc/fail2ban/jail.local# 添加:[nginx-long-url]enabled=truefilter=nginx-long-url logpath=/var/log/nginx/access.log maxretry=1bantime=3600# 封禁1小时# 重启fail2bansudosystemctl restart fail2ban
方案C:用NGINX的limit_req_zone,限制请求速率
# 在 nginx.conf 的 http 块里,添加: http { # 限制每个IP每秒只能发10个请求 limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; server { location / { # 应用限制 limit_req zone=one burst=20 nodelay; # ... } } }

五、这件事对整个行业意味着什么?

AI安全分析的时代,真的来了

CVE-2026-42945的发现,是一个里程碑事件

它证明了:

AI已经可以自主发现高危漏洞,而且是在人类18年都没找到的地方。

对比传统安全工具

工具类型代表工具优势劣势
传统静态分析Coverity、PVS-Studio误报率低只能检测"已知模式"的漏洞
Fuzzing工具AFL、libFuzzer能发现未知漏洞盲目生成输入,效率低下
AI安全分析depthfirst、CodeQL AI真正理解代码逻辑,能发现复杂的逻辑漏洞目前成本较高,且可能有"幻觉"

对前端/全栈开发者的影响

你可能会问

“我是写前端的,这个漏洞跟我有关系吗?”

答案是:有关系

原因如下:

  1. 如果你用NGINX部署前端应用(90%的前端开发者都是这么做的),你的服务器可能受影响

  2. 如果你在Docker里跑NGINX(用官方NGINX镜像),你需要重新构建镜像(用修复版本的NGINX)

# 你原来的Dockerfile可能是这样的: FROM nginx:1.29.0 # ← 这个版本有漏洞! # 你应该改成: FROM nginx:1.31.0 # ← 修复版本
  1. 如果你在用人脸识别CDN(比如阿里云CDN、腾讯云CDN),它们背后也是用NGINX的 →你需要联系服务商,确认他们是否已经修复了

我们需要重新思考"代码安全"这件事

CVE-2026-42945给整个行业的启示

启示解释
人工代码审查不够了这个漏洞潜伏了18年,说明即使有几百万人看过NGINX的代码,也还是会漏掉
AI辅助代码审查,应该成为标准流程就像CICD流水线一样,每次提交代码,都应该用AI做安全分析
开源软件的安全,需要更多投入NGINX只有20个核心开发者,他们没有足够资源做全面的安全审计

六、总结

写到这里,我来总结一下:

这个漏洞的严重性

维度评级说明
影响范围🔴极广全球1900万个NGINX实例,覆盖近三分之一的网站
利用难度🟡中等需要构造特殊的rewrite规则 + 特殊URL,但PoC已经公开了
潜在损失🔴极高远程代码执行(RCE),攻击者可以完全控制你的服务器
修复难度🟢简单官方已发布修复版本,升级即可

你应该立即采取的行动

  1. 检查你的NGINX版本(运行nginx -v
  2. 如果版本在 0.6.27 ~ 1.30.0 之间,立即升级到 1.31.0 或 1.30.1
  3. 如果你用Docker部署,重新构建镜像(用nginx:1.31.0作为基础镜像)
  4. 如果你在用人脸识别CDN,联系服务商确认修复状态
  5. 考虑引入AI安全分析工具(比如 depthfirst、GitHub Advanced Security)

长期建议

对于个人开发者

  • 学会基本的安全知识(缓冲区溢出、RCE、权限管理)
  • 不要盲目信任开源软件 →定期关注CVE公告
  • 考虑付费购买商业支持(比如NGINX Plus,它们的安全响应更快)

对于企业团队

  • 建立AI辅助的代码审查流程
  • 定期扫描依赖组件的安全漏洞(用工具比如 Snyk、Dependabot)
  • 不要等到CVE公开了才修复 → 建立主动的安全监控机制

相关阅读

  • NGINX官方安全公告(CVE-2026-42945)
  • depthfirst技术报告(AI如何发现这个漏洞)
  • NGINX升级指南
  • 如何配置NGINX安全头(防止常见的Web攻击)

最后的话

CVE-2026-42945的发现,让我们看到了AI安全分析的巨大潜力。

但它也提醒我们:

在这个AI时代,安全攻防的门槛,正在被彻底改变。

攻击者可以用AI更快地发现漏洞

防御者也需要用AI更快地修复漏洞

这场军备竞赛,才刚刚开始。


http://www.jsqmd.com/news/906813/

相关文章:

  • Qt 5.7+ 虚拟键盘插件安装与配置全攻略(含Linux/Windows避坑指南)
  • 量子电路模拟:TDVP方法原理与实践优化
  • 2026公考机构深度横评:粉笔、华图、中公哪家强?
  • 免费.brd文件查看器终极指南:OpenBoardView让电路板设计查看如此简单
  • 保姆级教程:在Ubuntu 22.04上挂载VMFS6数据存储,轻松读取ESXi虚拟机文件
  • 从PR调色到Unity渲染:用Post Processing的Color Grading模块打造电影感游戏画面
  • 用Python和YOLOv5给摄像头装上‘尺子’:一个杯子引发的单目测距实战
  • 微波定向耦合器:原理、指标、架构与设计实例
  • 保姆级教程:在Ubuntu 20.04上从源码编译运行Cartographer ROS(含常见错误排查)
  • 视频中如何添加自定义水印,一招搞定
  • 从P波到T波:如何用Python+OpenCV给心电波形图做“自动体检”?
  • 3个真实场景告诉你:为什么猫抓插件是网页视频下载的终极解决方案?
  • 别再只用准确率了!用Python实战Cohen‘s Kappa评估你的分类模型(附代码避坑指南)
  • 国产化存储实战:在银河麒麟V10 SP1服务器上配置iSCSI多路径(含multipath避坑指南)
  • 2026年当前,谁在定义靠谱优秀的钢制活动柜生产厂商新标准? - 2026年企业资讯
  • 卡牌抽取游戏
  • 北京APP定制开发费用构成与行业选型综合研究
  • 别再死记硬背!彻底搞懂 Java 泛型通配符、协变逆变与 PECS 原理
  • 实测在蜂窝网络下使用Taotoken调用大模型API的成功率与体验
  • 个人认为目前为止java后端面试最有效且快捷的方法
  • 别再死记硬背了!用‘找书’和‘找章节’的比喻,5分钟搞懂Linux内存管理中的一级/二级页表
  • 背包问题 01背包/完全背包/多重背包/分组背包/单调队列优多重背包/二维费用背包
  • 别再只懂Apriori了!用Python手写一个超市购物篮分析,从牛奶面包数据里挖出隐藏的关联规则
  • 番茄小说下载器终极指南:如何轻松下载并离线阅读番茄小说
  • 注塑车间的透明化革命:盘古信息如何重塑注塑成型行业的数字未来?
  • AI营销新纪元:多智能体协作破局
  • 2026年5月口碑好的武汉地下管线漏水检测公司排行榜厂家推荐榜,家庭/厂房/市政管道漏水检测厂家选择指南 - 海棠依旧大
  • Nexknit Gateway v0.2.0:全新采集器与告警系统上线
  • 回民街的坑很多,但洒金桥那条巷子藏着真正的老味道
  • 2026年5月衡水档案柜之选:深度剖析河北精纳金属制品有限公司 - 2026年企业资讯