Announcement

👇Official Account👇

Welcome to join the group & private message

Article first/tail QR code

Skip to content

GitLab CVE-2026-85706 深度分析:CVSS 10.0 路径穿越漏洞,未认证读取任意文件并在披露当日即遭在野探测

导语

2026 年 9 月 11 日,GitLab 发布安全更新,修复了一个评分 CVSS 10.0(满分) 的严重漏洞 CVE-2026-85706

  • 组件:repository commits API
  • 缺陷类型路径穿越(CWE-22) 叠加 认证执行缺失
  • 结果未认证攻击者可在特定条件下读取任意文件,包括日志与 GitLab 配置文件,进而窃取数据库凭据、密钥等敏感信息

更令人生畏的是:watchTowr 观察到,该漏洞披露后的几个小时内(自 2026-09-11 06:00 UTC 起),互联网上就出现了在野探测活动——攻击者正在利用该漏洞扫描未修补的 GitLab 实例。CISA 已将其纳入 KEV 目录,联邦机构须在 2026-09-14 前完成修补。

CVECVE-2026-85706
CVSS10.0AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N
CWECWE-22(路径穿越)
攻击向量远程、未认证
影响任意文件读取 → 凭据/密钥泄露
影响版本CE/EE 18.7–19.1.7、19.2–19.2.5、19.3–19.3.1
修复版本19.1.8 / 19.2.6 / 19.3.2
上报渠道HackerOne(研究员 s3ntago,报告 #3909881)
KEV 收录2026-09-11,FCEB 截止 2026-09-14

一、漏洞根因:commits API 的路径约束与认证执行双重缺失

什么是 repository commits API

GitLab 的 commits API 是供开发工具、CI/CD 流水线查询提交历史的公开端点,典型调用:

GET /api/v4/projects/:id/repository/commits
GET /api/v4/projects/:id/repository/commits/:sha

这类端点本应在 项目级访问控制 内工作——仅允许认证用户访问有权限的仓库。CVE-2026-85706 的实现缺陷在于两层:

  1. 路径约束缺失(Path Confinement):API 在处理提交相关的文件路径参数时,未正确限制路径范围,攻击者可通过 ../ 序列逃逸出预期目录边界
  2. 认证执行缺失(Authentication Enforcement):部分代码路径在未验证请求者身份/权限的情况下继续执行

两者叠加后,攻击者无需登录即可向 commits 相关端点发送构造的路径参数,越过仓库隔离,读取服务器上的任意文件:

未认证攻击者

   │  GET /api/v4/projects/:id/repository/commits/../../../etc/gitlab/gitlab.rb
   │         (路径穿越:逃出仓库目录边界)

路径约束缺失(CWE-22)

认证执行缺失(请求未通过权限校验即被执行)

返回任意文件内容:gitlab.rb(含 DB 口令)、secrets.yml、日志…

为什么是 CVSS 10.0

AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N——网络可达、无复杂度门槛、无需认证、无需用户交互、影响范围跨越安全边界(S:C)且机密性与完整性均为高。任何暴露在互联网上的受影响 GitLab 实例,都等于把服务器文件系统敞开在公网面前。

二、攻击价值:从文件读取到实例沦陷

未认证任意文件读取的杀伤力取决于能读到什么。GitLab 实例上最值得读的目标:

  1. /etc/gitlab/gitlab.rb:包含数据库密码、对象存储密钥、gitlab_rails['secret_token']
  2. /etc/gitlab/gitlab-secrets.json:加密密钥库,可用于伪造 GitLab 内部凭据
  3. config/secrets.yml:生产密钥
  4. 日志文件(/var/log/gitlab/*:可能泄露 API token、调用管线、内部主机信息
  5. 环境变量/进程文件:CI 变量、部署令牌

一旦拿到数据库凭据,攻击者可直连 PostgreSQL 导出全部用户哈希、CI 变量、部署令牌——等于接管整个 GitLab 实例及其承载的代码资产。这也是同一披露周期内两份安全建议(GitLab 官方 + CISA 预警)都将修复标记为"紧急"的原因。

三、在野探测:披露当日的 0day 猎杀

watchTowr 的威胁观察是整个事件里最值得注意的部分:

  • 2026-09-11 06:00 UTC 起:漏洞公开后的数小时内,即观察到在野探测活动
  • 行为特征:攻击者扫描未修补 GitLab 实例的 commits API 端点,测试路径遍历载荷,尝试读取日志文件(判断实例版本与暴露面)、乃至 GitLab 配置(企图提取凭据)

这意味着:补丁与披露之间存在一个极短的利用窗口——没有在这个窗口内升级的实例,正在被自动化扫描与手工渗透同时猎杀。这也解释了 CISA 为何在同一天将其收录进 KEV 并给联邦机构仅 3 天的修补时限。

同批修复的第二个严重漏洞:CVE-2026-87719

与 CVE-2026-85706 同批修复的还有 CVE-2026-87719——GitLab GraphQL 订阅(subscription)序列化器中的不安全反序列化

  • 可被用于访问 Advanced Search 实例的配置与敏感凭据
  • 与路径穿越漏洞形成互补:一个打通文件读取,一个打通配置态泄露

GitLab 建议自托管管理员同时验证两个 CVE 的修复状态,不要只盯着满分的那一个。

四、影响范围与修复

受影响版本(CE 与 EE 同源受波及)

分支受影响版本修复版本
19.118.7.0 – 19.1.719.1.8
19.219.2.0 – 19.2.519.2.6
19.319.3.0 – 19.3.119.3.2

注:官方通告影响范围覆盖 18.7.0 及以上所有受影响分支;自托管(Omnibus/Docker/Helm)均有对应修复版本。

修复动作清单

  1. 立即升级到 19.1.8 / 19.2.6 / 19.3.2(FedRAMP/SOC2 合规环境按变更窗口优先安排但不要拖过 KEV 截止
  2. 升级后轮换密码与密钥:数据库口令、对象存储密钥、API token——一旦旧配置被读取,轮换是唯一兜底
  3. 审计访问日志:检索 2026-09-11 起 commits API 的异常请求(路径含 ..、返回 200 的大响应体)
  4. 若为公有云托管(GitLab.com),无需操作,平台侧已修复

无法立即升级的缓解

  • 反向代理/WAF 层拦截 commits API 的路径穿越载荷(%2e%2e..、双重编码变体)
  • 限制管理面暴露:将 GitLab Web/API 收敛到受控网络,不直接暴露公网
  • 监控 repository/commits 端点异常 4xx/5xx 与超大响应

五、上下文:GitLab 已成为高级攻击者的重点猎场

CVE-2026-85706 并非孤例,而是 GitLab 2026 年漏洞潮的一部分:

时间CVE严重度类型
2026-08CVE-2026-194789.4GraphQL 代码注入(披露后即遭在野利用)
2026-09-11CVE-2026-8570610.0commits API 路径穿越 + 认证缺失
2026-09-11CVE-2026-87719GraphQL 订阅序列化器反序列化

GitLab 拥有 3000 万+ 注册用户、覆盖 财富 100 强中过半企业,是软件供应链的核心枢纽。对攻击者而言,GitLab 实例 = 代码 + 密钥 + 发版管道的三合一目标。连续两个月出现可利用级别漏洞,且每次披露后都在极短时间内被在野利用/探测——自托管 GitLab 的运维团队必须把安全补丁的响应速度提升到"小时级",而不是"批次级"。

参考链接

  1. GitLab 官方安全公告:CVE-2026-85706 / CVE-2026-87719
  2. NVD:CVE-2026-85706
  3. BleepingComputer:GitLab urges users to patch max-severity path traversal flaw
  4. The Hacker News:GitLab Users Urged to Patch Critical Flaws Immediately
  5. watchTowr Labs:GitLab CVE-2026-85706 在野探测观察
  6. IONIX:CVE-2026-85706 Threat Analysis
  7. CISA KEV 目录(CVE-2026-85706 条目)

上次更新于: