technology 10 分钟阅读

GitLab 12年RCE漏洞暴露CI/CD供应链风险

CVSS 10.0 的未授权远程代码执行漏洞影响 GitLab 2014 年以来所有自托管版本。补丁时间线为依赖该平台的 DevOps 团队带来紧迫升级压力。

  • 身份漏洞
  • 关键基础设施
  • CVSS 10.0
  • 未授权RCE
  • 自托管

CI/CD 管线中的十二年幽灵

GitLab 悄然承认,其自管版软件在过去十五年间发布的每一个版本中都存在一项关键安全缺陷。该漏洞编号为 CVE-2026-110264,CVSS 评分满分 10.0,允许未认证的攻击者在 GitLab 服务器上执行任意代码。追溯而言,它最早可至 2014 年 4 月发布的 7.0 版本。

其影响远不止一次漏掉的补丁。对于已将 GitLab 深度融入持续集成与部署(CI/CD)管线的组织而言,这一缺陷意味着系统性暴露:原本用于自动化软件交付的工具链,如今携带着一枚无需凭据、无需先期访问、甚至可能无法被察觉即可触发的休眠武器。

谁会获利?扫描配置不当或过时 GitLab 实例的黑客。谁会受损?负责维护内部开发平台安全的 DevOps 团队、安全工程师和工程管理层。接下来会发生什么?一场争分夺秒的升级潮,而补丁时间线带来的不是清晰,而是困惑。

一项无视补丁政策的缺陷

GitLab 的标准维护模式仅支持当前版本及前两个月度版本。截至 2025 年 10 月下旬,这意味着版本 19.5、19.4 和 19.3。然而 CVE-2026-110264 并不受此边界约束。在 10 月 21 日的通告中,GitLab 将修复反向移植至六个额外的发布分支,包括 18.11、19.0、19.1 和 19.2——这些版本在公司正常生命周期结束后数月便已被放弃。

紧迫感因 10 月 12 日提前发布的一处修复而进一步加剧。该更新仅针对 19.2 及以上版本修复了另一项相关正则表达式溢出漏洞(CVE-2026-97229)。由于新补丁均位于此前修正的一个次版本号之上,任何在 10 月 12 日完成升级的实例都会陷入一个空白地带:尽管运行的是相对较新的版本,却仍然易受 CVE-2026-110264 攻击。

这不是一个可以轻描淡写的文档问题。它迫使管理员同时跟踪多条升级路径、测试不同的版本列车,并在过渡期承担系统仍处于 unprotected 状态的风险。GitLab 决定追溯性扩展支持,这彰显了严重性,但也暴露出当漏洞深入遗留代码时,安全政策是多么脆弱。

根因:嵌入式依赖风险

该缺陷存在于 Onigmo 之中——这是 Ruby 使用的正则表达式编译器,也被嵌入到 GitLab 自身的包内。GitLab 在每个版本中构建、修补并分发这一引擎,这一架构选择在整合功能的同时也集中了风险。当 Onigmo 出现弱点时,它会传播到所有曾捆绑它的 GitLab 版本。

这一模式与 Log4Shell 等高曝光事件中所见的更广泛的供应链困境如出一辙。两种情况下,一个基础组件深深嵌入广泛部署的软件中,使得补丁工作变成一场追赶而非主动防御。GitLab 的情况稍窄,因为 Onigmo 并不像 Apache Log4j 那样无处不在,但原则完全相同:你不能仅仅因为某个第三方依赖由另一个团队维护,就假定它是安全的。

GitLab 尚未披露触发该整数溢出的确切条件。在不知晓攻击者是否需要特定端点访问、特定请求格式或任何配置异常的情况下,组织无法通过访问控制或网络分段来缓解风险。公司发布了两个 Sigma 检测规则——一个监控"Onigmo 原生工作进程崩溃"事件,另一个监控"Org mode 渲染错误爆发"——但这些属于事后反应,旨在发现已发生的利用行为,而非预防。

目前没有临时缓解措施。唯一确定的防护手段是升级。

检测与响应挑战

截至 10 月 22 日,GitLab 报告尚无活跃利用的证据,该漏洞也未被列入美国 CISA 已知利用漏洞目录。但这种平静可能只是暂时的。一个拥有十二年历史、无需认证即可远程执行代码的漏洞,正是在细节公开后会迅速吸引利用的经典类型。

对于自管 GitLab 实例(唯一受影响的类别),前路清晰但操作痛苦。管理员必须将每个受支持的分支升级至对应的修复版本:

  • 低于 19.5.1 的版本 → 升级至 19.5.1
  • 低于 19.4.3 的版本 → 升级至 19.4.3
  • 低于 19.3.6 的版本 → 升级至 19.3.6
  • 低于 19.2.9 的版本 → 升级至 19.2.9
  • 低于 19.1.9 的版本 → 升级至 19.1.9
  • 低于 19.0.10 的版本 → 升级至 19.0.10
  • 7.0 至 18.11.x 版本 → 升级至 18.11.13

升级过程本身又增添了另一层复杂性。19.4.3 和 19.3.6 包含必须在安装过程中执行的数据库 schema 变更。在单节点部署中,这意味着停机——可能持续数分钟到数小时,具体取决于实例规模和基础设施。多节点集群可通过 GitLab 指定的流程实现零停机打补丁,但并非所有组织都具备这种拓扑结构。

更大图景:安全债务与厂商责任

这是本月同一研究人员(网络 ID 为 joaxcar)报告的第四个 GitLab 正则表达式引擎代码执行漏洞。前三项已在 19.2 及以上版本中修复;CVE-2026-110264 是首个突破早期分支的。这种重复表明了一种模式:正则表达式编译器可能隐藏着某一类难以一次性根除的弱点。

GitLab 在标准政策之外反向移植修复的决定,凸显了维护广泛历史记录与确保及时安全覆盖之间的张力。那些出于稳定性或兼容性原因滞留旧版本的组织,现在将面临严酷的现实:它们的"稳定"版本同时也是高风险版本。

更广泛的行业教训是:在没有持续、全版本审计的情况下嵌入第三方安全关键组件,会制造潜伏的债务。GitLab 客户很可能会要求对 Onigmo 等依赖的补丁方式、测试方法和跨分支集成有更高的透明度。预计其他将核心库捆绑进自身分发的 DevOps 平台也将面临类似的审查。

接下来会发生什么

短期内,自管 GitLab 管理员必须优先升级。每一小时停留在未修补实例上,都是给攻击者提供的机会窗口。团队应查阅 GitLab 官方通告,核实当前版本,并在维护窗口期间安排升级——尤其是单节点部署。

展望未来,GitLab 的发版节奏可能会向更频繁地为遗留分支提供安全焦点补丁的方向转变,或者公司可能恢复版本特定安全通告以减少混淆。与此同时,安全研究人员将继续探测正则表达式引擎,未来数月我们可能会看到更多 CVE。

对于 CI/CD 生态而言,此次事件 reinforcing 了一个朴素真理:你的部署管道的可靠性,仅与其中最薄弱的依赖一样强。GitLab 已关上了一扇十二年的旧门,但这扇门竟长期敞开的事实,是一个值得铭记的警告。

将此次更新视为例行维护任务的组织今夜会睡得更安稳。那些拖延的人,则可能醒来时发现一场始于 2014 年的数据泄露正在发生。