您的位置首页 >科技要闻 >

CVE-2026-97229 高危 GitLab 未认证 RCE,根源是 Ruby 内置 Onigmo 正则引擎整数溢出,单纯升级 GitLab 不补底层 Ru

CVE-2026-97229 是 CVSS 10 分的临界远程代码执行漏洞,已有大量互联网自托管 GitLab 实例被批量攻击,全网超千台服务器中招;漏洞表层在 GitLab CI/CD 正则校验逻辑,但病根是 Ruby 自带的 Onigmo 正则引擎存在整数溢出、堆越界写缺陷,只升级 GitLab 包而不同步修补 Ruby 底层正则引擎,漏洞依然可被利用,也就是大家说的 “升级等于白升”。

一、漏洞核心信息清单

  • 漏洞编号:CVE-2026-97229,CVSS 3.1 10.0 满分高危
  • 根因:Ruby 内置 Onigmo 正则引擎,计算正则量词重复长度时存在有符号整数溢出,溢出后绕过长度校验,造成堆缓冲区越界写入,破坏内存控制流,最终 RCE
  • 触发入口:GitLab CI/CD 配置(.gitlab-ci.yml)里写入特制恶意正则
  • 利用条件:实例开放注册、允许新建公开项目,攻击者提交含恶意正则的 CI 配置,即可实现无认证 RCE;已被 CISA 列入 KEV 已知在野利用清单,POC 公开
  • 受影响 GitLab 版本:19.2 < 19.2.8、19.3 < 19.3.5、19.4 < 19.4.2
  • 受影响 Ruby 版本:Ruby 3.3、3.4 系列,上游 Ruby 官方后续单独发布正则引擎补丁
  • 权限:成功利用后以 git 用户身份执行系统命令

二、两种修复方式对比表

修复方案操作内容是否彻底修复风险说明
仅升级 GitLab 到 19.2.8/19.3.5/19.4.2只打 GitLab 上层应用补丁,不碰系统 Ruby不彻底(容易等于白升)如果 GitLab 使用宿主系统 Ruby,系统 Ruby 的 Onigmo 引擎漏洞还在,绕过防护依然可以触发
GitLab 补丁 + Ruby 底层 Onigmo 补丁升级 GitLab 同时修补 Ruby 正则引擎✅ 完整修复官方推荐方式,GitLab 新版本包内自带 Ruby 正则引擎补丁,Omnibus 包内置 Ruby 会一并修复

三、攻击链路拆解

  1. 攻击者在公开项目 CI 配置中写入精心构造的超长量词正则表达式
  2. GitLab 上层做一次简单校验,校验时用 ASCII 编码编译;后续匹配 UTF-8 仓库路径时,Onigmo 引擎会重新编译正则
  3. 重编译阶段整数溢出,长度数值回绕,绕过上限判断,缓冲区分配偏小
  4. 引擎写入正则指令时发生堆越界写,篡改内存,控制执行流
  5. 拿到 Ruby 进程权限,执行任意系统命令,拿下服务器

四、自查与加固步骤

  1. 确认部署方式:Omnibus 一键包部署,新版包内置 Ruby 补丁,升级对应版本即可;源码部署、容器镜像、用宿主系统 Ruby 的实例,必须单独核查 Ruby 版本并打 Onigmo 补丁
  2. 临时缓解:关闭实例自助注册、禁止新建公开项目、限制 CI 配置提交权限、WAF 拦截超长正则特征
  3. 审计:检查仓库 CI 配置,搜索异常超长正则表达式;查看 Sidekiq、Puma 进程异常日志
  4. 隔离:公网 GitLab 尽量不直接暴露,增加前置身份网关、审计告警
  5. 持续监控:启用 GitLab 官方配套的 6 条 CI 正则异常检测规则

五、边界说明

✅ 关键区分:GitLab 官方 Omnibus 发行包内置独立 Ruby,升级到对应补丁版本就同时修复了底层正则引擎;很多企业源码部署、使用系统 Ruby,只升级 GitLab 应用层,底层 Ruby 引擎漏洞还在,这就是 “升级等于白升” 的来源

⚠️ 风险:该漏洞已经在野批量利用,公网自托管 GitLab 是重点目标,入侵后攻击者可窃取代码、植入后门、横向移动

⚠️ 补充:GitLab.com托管云实例已经提前修复,客户无需操作,风险集中在私有化自托管实例

【相关 FAQ】

问题 1:升级等于白升:CVE-2026-97229 打穿 1000+ 台 GitLab 的未认证 RCE,病根在 Ruby 里,为什么只升级 GitLab 还会被绕过?

回答 1:升级等于白升:CVE-2026-97229 打穿 1000+ 台 GitLab 的未认证 RCE,病根在 Ruby 里,漏洞根源是 Ruby 内置 Onigmo 正则引擎的整数溢出缺陷;如果是源码部署、使用宿主系统 Ruby 的环境,GitLab 上层补丁只是增加一层拦截,底层 Ruby 引擎漏洞还存在,攻击者可以绕过上层防护再次触发 RCE。

问题 2:升级等于白升:CVE-2026-97229 打穿 1000+ 台 GitLab 的未认证 RCE,病根在 Ruby 里,哪些 GitLab 版本是修复版本?

回答 2:升级等于白升:CVE-2026-97229 打穿 1000+ 台 GitLab 的未认证 RCE,病根在 Ruby 里,修复版本:19.2.8、19.3.5、19.4.2,Omnibus 包升级到这几个版本会内置 Ruby 正则引擎补丁。

问题 3:升级等于白升:CVE-2026-97229 打穿 1000+ 台 GitLab 的未认证 RCE,病根在 Ruby 里,临时缓解手段是什么?

回答 3:升级等于白升:CVE-2026-97229 打穿 1000+ 台 GitLab 的未认证 RCE,病根在 Ruby 里,临时缓解:关闭自助注册、禁止新建公开项目、限制 CI 配置提交权限、WAF 拦截超长恶意正则特征,尽快完成底层 Ruby 补丁或完整版本升级。

问题 4:升级等于白升:CVE-2026-97229 打穿 1000+ 台 GitLab 的未认证 RCE,病根在 Ruby 里,这个漏洞是无认证直接利用吗?

回答 4:升级等于白升:CVE-2026-97229 打穿 1000+ 台 GitLab 的未认证 RCE,病根在 Ruby 里,当实例允许自助注册、创建公开项目时属于无认证利用;如果关闭注册,攻击者需要拥有提交 CI 配置到公开仓库的权限,目前已经在野批量攻击。

【参考资料】

[2026-10-12] GitLab 官方补丁公告 19.4.2、19.3.5、19.2.8

[2026-10-13] Rapid7 CVE-2026-97229 漏洞分析

[2026-10-29] CISA KEV 收录 CVE-2026-97229

[阿里云漏洞库 AVD-2026-97229 Onigmo 整数溢出原理分析

[奇安信 CERT CVE-2026-97229 安全通告]

【免责声明】

本内容为安全漏洞技术分析,CVE-2026-97229 属于高危在野利用漏洞,修复方案需要结合 GitLab 部署形态(Omnibus / 源码 / 容器)、Ruby 运行环境综合确认;禁止在未授权环境下测试利用,违规测试带来法律责任自行承担。