← 全部文章

安全

GitLab 的满分 10.0 已被补上。被读走的密钥没有

CVE-2026-85706 让未经认证的攻击者可以读取自托管 GitLab 服务器上的任意文件,补丁发布次日 CISA 就将其列为已遭在野利用。升级能止住读取,却对已经被拿走的凭据无能为力。

MAI
GitLab 在其新闻资料包中发布的 DevSecOps 生命周期示意图,展示该平台从规划、编码到构建、测试、发布、部署与监控的各个阶段。

GitLab 于 9 月 10 日发布关键补丁版本,修复了仓库 commits API 中的一个路径穿越漏洞 CVE-2026-85706,CVSS 评分 10.0。CISA 在次日将其列入"已知被利用漏洞"(KEV)目录,理由是存在在野利用的证据,并给联邦文职机构设定了三天的修复期限——这是该机构所能下达的最短窗口之一。该期限现已过去。安全公司 watchTowr 报告称,自 9 月 11 日起已观测到在野探测行为。

比其中任何一个日期更重要的是这个顺序。厂商补丁与一份只收录攻击者已在使用的漏洞的政府目录之间,只隔了一天。对于在自有基础设施上运行 GitLab 的组织而言,修复发布到修复落地之间的那段空白,正是这台服务器对任何提出请求的人都可读的时间。

这个漏洞是什么

GitLab 自己的公告写得很直白:

GitLab 已修复一个问题:在特定条件下,由于仓库 commits API 中路径限制不当以及缺少认证强制,未经认证的用户可能读取 GitLab 服务器上的任意文件。

CVSS 向量为 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N——可经网络到达、攻击复杂度低、无需权限、无需用户交互,而把它推到满分的那一项,是范围变更(Scope: Changed)。范围变更是评分体系用来表达"影响半径不止于存在漏洞的那一个组件"的方式。在本例中这个判断是准确的,本文其余部分就是在论证为什么。

该问题通过 GitLab 的 HackerOne 项目上报,研究者署名为 s3ntago。GitLab.com 与 GitLab Dedicated 已运行修补后的代码,因此这完全是自托管环境的问题。

受影响版本修复版本
18.7 至 19.1.719.1.8
19.2.0 至 19.2.519.2.6
19.3.0 至 19.3.119.3.2

同一版本还修复了另一个严重级别的问题——影响企业版的 GraphQL 反序列化漏洞 CVE-2026-87719——以及六个高危缺陷。为了那个文件读取漏洞而升级的组织会一并拿到这些修复,这本身就是选择升级、而不是去寻找一个把其余问题原样留下的缓解措施的理由。

源码管理服务器上的文件读取,不只是文件读取

任意文件读取通常被归为比远程代码执行低一档的问题,在多数场景下这样归类是合理的。但自托管的 GitLab 实例不属于"多数场景"。它是组织有意指定的凭据保管者,那些凭据通往下游的一切:CI/CD 变量、部署令牌、Runner 注册令牌、容器镜像仓库凭据、云服务商密钥、签名材料,以及把它们串起来的配置。一体化 DevSecOps 平台的价值主张,恰恰就在于让这些机密集中存放,好让流水线能够取用。

因此,对这台主机的读取权限并不是对一台服务器的读取权限,而是对它所部署的整片资产的钥匙的读取权限。一个从未在 GitLab 机器上执行过一行代码的攻击者,依然可以以它的身份向其他所有系统完成认证,而其后的一切动作看上去都只是流水线在正常工作。这就是"范围变更"在实务中的含义,也是为什么本案该被放进目录服务被攻陷的心智分类,而不是信息泄露缺陷那一类。

补丁关上了门,但收不回钥匙

这是组织会拖延的部分,也是在补丁落地数日之后仍值得写这个故事的原因。

升级到 19.3.2、19.2.6 或 19.1.8 能止住读取,却对已经被读走的东西毫无作用。升级之前存放在暴露实例上的任何机密,都应当按已泄露处理并轮换。而在一个成熟的 GitLab 部署中,轮换是一件漫长、枯燥、跨团队的工作,要逐一触碰那些一换令牌就会大声报错的流水线。这正是会被排进"下个季度"、然后就不了了之的那类活儿。

Rapid7 在这一点上很直接,建议组织即便已经安装更新,也要排查是否有被入侵的迹象,并指出 CISA 在 BOD 26-04 之下随 KEV 条目附带的取证分类义务。联邦机构必须完成这项工作,其余组织则只是暴露在同一批攻击者面前而已。

安排升级之前还有两个值得知道的运维事项。补丁包含数据库迁移,单节点部署会产生停机时间——应当提前规划,而不是等它发生时才发现。另一个是:判断是否需要轮换时,应当据以推理的数字,是补丁与 KEV 收录之间的那一天。如果一个面向互联网的实例在 9 月 10 日之后的任何时刻仍未打补丁,就应假定它已被触及。

更大的问题

CISA 将路径穿越描述为恶意网络行为者常用的攻击途径,这是用官僚语言指出:这一类缺陷已被充分理解了大约三十年,却仍不断出现在人们运行的最敏感的软件之中。有意思的问题不是一处路径限制检查为何被漏掉,而是为什么如此多的组织把自己拥有的每一份凭据都集中放在一个面向互联网的 Web 应用之后,却从未演练过在这个应用失守时如何更换它们。

补丁已经就位,修复本身也很简单。麻烦的是补丁之后寄来的那张账单,而它多半不会被支付。两者之中,更大的是后者。

Sources: GitLab Critical Patch Release: 19.3.2, 19.2.6, 19.1.8 · Rapid7: CVE-2026-85706 Critical GitLab Path Traversal Exploited in the Wild · BleepingComputer: CISA — hackers now exploit max severity GitLab flaw in attacks · The Register: Perfect-10 GitLab bug under attack days after patch lands · Infosecurity Magazine: Hackers Exploit Maximum Severity Flaw in GitLab · CISA Known Exploited Vulnerabilities Catalog

继续阅读