CVE-2026-85706 — GitLab 路径遍历 IOC 扫描与检测工具包。通过 IOC 扫描、Sigma、Suricata/Snort 以及 SIEM 检测规则,检测并追踪针对严重的未认证 GitLab CE/EE 路径遍历漏洞的利用行为。
GitLab CE/EE 仓库提交 API 未认证路径遍历(CVSS 3.1:10.0,严重) 状态:已在野活跃利用 · 已列入 CISA KEV(2026-09-11,截止 2026-09-14)· 已由 GitLab 于 2026-09-10 修复
一个免费、开源的事件响应与威胁狩猎工具包,针对 CVE-2026-85706 —— 一个影响 仓库提交 API 的 GitLab 社区版(CE)与企业版(EE) 严重未认证路径遍历漏洞。本仓库为安全团队、SOC 分析师、检测工程师和 GitLab 管理员提供 可直接运行的 IOC(入侵指标)扫描器、Sigma / Suricata / Snort 检测规则、 Splunk / Elastic / OpenSearch 狩猎查询,以及分步修复指南 —— 检测利用尝试、确认补丁状态并快速响应此 GitLab 零日 / n 日漏洞所需的一切。
🔎 想最快知道"我是否受影响?" 请跳转至 快速开始。
🚨 想知道该升级到哪个版本? 请跳转至 修复版本与补丁。
未认证攻击者可以向 GitLab 的仓库提交 API 发送单个精心构造的 HTTP 请求,
提供包含目录遍历序列(../、URL 编码变体等)的 file.path(或
file_path)参数,使服务器返回预期仓库目录之外的任意文件内容 ——
包括 GitLab 自身的密钥文件、数据库配置、SSH 私钥以及其他敏感服务器端数据。
由于无需任何凭据且请求构造简单,GitLab 和第三方研究人员将其评为最高严重级别
(CVSS 10.0),CISA 也已确认在野活跃利用。
gitlab-secrets.json、database.yml 或 CI/CD runner 令牌,便可转向远比初始
文件读取所暗示的更深层访问。GitLab 于 2026-09-10 在以下版本中修复了 CVE-2026-85706:
任何处于这些分支中更早补丁级别 —— 或完全处于更早主/次版本分支 —— 的自管理
GitLab CE/EE 实例,都应被视为易受攻击并立即升级。GitLab.com 的 SaaS
服务由 GitLab 直接修复,无需客户操作。完整的分步升级与事件响应指南请参见
docs/remediation.md。
升级说明: 在单节点 GitLab 实例上,升级到这些版本会涉及停机,因为数据库 迁移需在 GitLab 重启前完成。多节点实例可按照 GitLab 文档化的零停机升级流程 应用补丁而无需停机。19.3.2 版本还包含在升级完成后运行的后部署迁移 —— 请将此纳入维护窗口的考量。
CVE-2026-85706 是一次共修复 17 个漏洞的关键 GitLab 安全发布中的头条问题。 同一发布中的另外两个问题值得一并跟踪,因为它们影响相似的攻击面和凭据/密钥 泄露风险:
实际要点: 如果你正在为 CVE-2026-85706 打补丁,你已经在同一个 19.3.2 / 19.2.6 / 19.1.8 发布中一并引入了上述所有修复 —— 没有理由只为 CVE-2026-85706 打补丁而推迟其余部分。应将其视为需完整应用的一次发布, 而非可独立安排修复的菜单。
gitlab-cve-2026-85706-ioc/ ├── README.md ← you are here ├── LICENSE ← MIT ├── CHANGELOG.md ├── CONTRIBUTING.md ├── SECURITY.md ├── scanner/ │ ├── gitlab_cve_2026_85706_ioc_scanner.py ← main IOC scanner (stdlib-only Python 3) │ └── requirements.txt ← documents "no dependencies needed" ├── detection/ │ ├── sigma_rule_gitlab_cve_2026_85706.yml ← Sigma rule (SIEM-agnostic) │ ├── network_ids_cve_2026_85706.rules ← Suricata/Snort signatures │ └── siem_hunting_queries.md ← Splunk / Elastic / OpenSearch / grep queries ├── docs/ │ ├── ioc_list.md ← full IOC reference (network, host, post-exploitation) │ ├── remediation.md ← patch & incident-response playbook │ └── timeline.md ← public disclosure & exploitation timeline ├── tests/ │ ├── test_scanner.py ← unit tests (stdlib unittest) │ └── fixtures/sample_production_json.log ← sanitized sample log for testing └── .github/workflows/ci.yml ← GitHub Actions: lint, test, smoke-test on every push
---
## 🚀 快速开始
### 1. 扫描你的 GitLab 日志以查找 IOC
该扫描器是**纯 Python 3 标准库**——无需 `pip install`,因此你可以仅将这一个文件复制到受严格管控的 GitLab 主机上并立即运行。```bash
git clone https://github.com/jithinkrishnanrs/gitlab-cve-2026-85706-ioc.git
cd gitlab-cve-2026-85706-ioc
python3 scanner/gitlab_cve_2026_85706_ioc_scanner.py \
--production-log /var/log/gitlab/gitlab-rails/production_json.log \
--api-log /var/log/gitlab/gitlab-rails/api_json.log \
--nginx-log /var/log/gitlab/nginx/gitlab_access.log \
--format json --out report.json
退出码 1 表示至少发现了一个潜在 IOC——请立即查看
report.json。退出码 0 表示在您提供的日志中未发现匹配项(参见 Limitations——这并不保证系统未被入侵)。
您还可以使用 --generic-log(可重复使用的标志)将其指向任意/轮转日志,并通过 --format text|json|csv 选择报告格式。
python3 scanner/gitlab_cve_2026_85706_ioc_scanner.py --check-version 19.2.3
python3 scanner/gitlab_cve_2026_85706_ioc_scanner.py --check-version 19.2.6
### 3. 将检测规则部署到你的 SIEM / IDS
- 将 [`detection/sigma_rule_gitlab_cve_2026_85706.yml`](https://github.com/jithinkrishnanrs/gitlab-cve-2026-85706-ioc/blob/main/detection/sigma_rule_gitlab_cve_2026_85706.yml)
导入到你的 Sigma 兼容流水线中(通过 `sigma-cli` 接入 Splunk、Elastic
Detection Rules、Microsoft Sentinel、Chronicle 等)。
- 将 [`detection/network_ids_cve_2026_85706.rules`](https://github.com/jithinkrishnanrs/gitlab-cve-2026-85706-ioc/blob/main/detection/network_ids_cve_2026_85706.rules)
部署到 Suricata 或 Snort —— **先以仅告警模式运行**,并根据你的环境调整
SID/阈值,然后再启用阻断。
- 从
[`detection/siem_hunting_queries.md`](https://github.com/jithinkrishnanrs/gitlab-cve-2026-85706-ioc/blob/main/detection/siem_hunting_queries.md)
复制/粘贴现成的查询语句,适用于 Splunk(SPL)、Elastic/Kibana(KQL + DSL)、OpenSearch(PPL)以及纯
`ripgrep`/`grep` 排查。
---
## 扫描器工作原理
`gitlab_cve_2026_85706_ioc_scanner.py` 会解析 GitLab 的结构化 JSON 日志
(`production_json.log`、`api_json.log`)以及通用的 combined 格式
反向代理访问日志,并标记出与 CVE-2026-85706 公开披露的利用模式相匹配的请求:
1. **端点匹配** —— 请求路径命中易受攻击的端点族:
`/api/v4/projects/:id/repository/commits` 及其子资源。
2. **参数匹配** —— 查询字符串、表单正文或 JSON 正文中存在 `file.path` / `file_path` / `path` 风格的
参数。
3. **载荷匹配** —— 该参数的值包含路径遍历
序列(`../`、URL 编码、双重编码、超长 UTF-8 以及
分号路径段变体)**或**引用了已知的敏感
目标文件(`/etc/passwd`、`gitlab-secrets.json`、`secrets.yml`、
`database.yml`、SSH 私钥等)。
4. **认证上下文** —— 扫描器会检查 `PRIVATE-TOKEN`、
`Authorization` 或非空的 `user_id` 字段,以判断该
请求是否经过认证,从而匹配本 CVE 核心的**未认证 / 认证前**
利用条件。
5. **速率启发式** —— 独立于载荷匹配,在短时间内对 commits API 发起异常大量请求的源 IP
会被标记为疑似脚本化侦察。
发现结果会被评为 **CRITICAL / HIGH / MEDIUM**,并导出为
结构化 JSON、CSV 或人类可读文本以供排查。
## 示例输出```text
CVE-2026-85706 IOC Scan Report — 2 finding(s)
============================================================
[CRITICAL] 2026-09-11T02:14:33.120Z src=203.0.113.9 method=POST auth=False
path: /api/v4/projects/42/repository/commits/HEAD
matched: ../../../../etc/passwd
reason: path-traversal sequence in file path parameter; known sensitive/system file referenced; unauthenticated request (matches pre-auth exploitation condition)
log: production_json.log
[CRITICAL] 2026-09-11T02:16:45.501Z src=203.0.113.9 method=POST auth=False
path: /api/v4/projects/17/repository/commits/abc123
matched: ..%2f..%2f..%2fopt%2fgitlab%2fembedded%2fservice%2fgitlab-rails%2fconfig%2fsecrets.yml
reason: path-traversal sequence in file path parameter; unauthenticated request (matches pre-auth exploitation condition)
log: production_json.log
(由 tests/fixtures/ 中的已清理样本 fixture 生成。)
完整详情(包括基于主机和利用后的指标)见
docs/ioc_list.md。主要网络指标:
/api/v4/projects/<id>/repository/commits* 的请求../、%2e%2e%2f、..%2f、%252e%252e%252f 或类似
路径遍历序列的 file.path / file_path 参数/etc/passwd、/etc/shadow、gitlab-secrets.json、
secrets.yml、database.yml、id_rsa、.env 或
/opt/gitlab/embedded/service/gitlab-rails/config/secrets.yml
的引用完整处置手册见 docs/remediation.md。
摘要:
GitLab.com(SaaS)是否受影响? GitLab.com 无需客户采取任何行动 —— GitLab 会直接修补其 SaaS 平台。本工具适用于自管理的 GitLab CE/EE 实例。
利用此漏洞是否需要认证? 不需要 —— 这正是该 CVE 被评为 CVSS 10.0 的原因。它是针对单个 API 端点的未认证路径遍历漏洞。
是否有公开的漏洞利用 / PoC?
截至本文撰写时,尚未确认有公开的概念验证,但已观察到主动扫描/探测
活动。本仓库不包含也不链接漏洞利用代码 —— 原因见
CONTRIBUTING.md,并请始终查阅
官方 GitLab CVE-2026-85706 公告
以获取最新的厂商指导。
扫描器能否确定地告诉我是否遭到入侵? 没有任何工具能保证这一点。它基于你提供的日志执行尽力而为的检测。 参见局限性与免责声明。
我需要什么样的日志保留期?
GitLab 的默认日志轮转可能无法将日志保留至披露日期(2026-09-10)。
如果你的主机日志已经轮转,请从集中式 SIEM/日志归档中提取 —— 参见
detection/siem_hunting_queries.md
中的说明。
本仓库是否适用于 GitLab Helm/Kubernetes 或 Docker 部署?
适用,只要你能将 production_json.log / api_json.log(或
你的 ingress/反向代理访问日志)导出为扫描器可读取的文件;
对于三种命名日志类型之外的任何内容,请使用 --generic-log。
具体哪些版本受影响? GitLab CE/EE 18.7 至(不含)19.1.8、19.2 至(不含) 19.2.6,以及 19.3 至(不含)19.3.2。早于 18.7 分支的任何版本 同样不受支持/已终止生命周期,应视为易受攻击并无论如何都应升级。
这是否真的被利用了,还是仅仅“存在风险”? 已确认遭到利用。watchTowr Labs 在 GitLab 公开披露约 24 小时后 观察到首批在野利用尝试,CISA 随后将 CVE-2026-85706 加入其 KEV 目录,正是因为其确认了真实世界的利用 —— 这不是理论性 或“仅负责任披露”的发现。
CISA BOD 26-04 的“取证分诊”认定对我意味着什么?
CISA 将该 CVE 标记为需要根据第 26-04 号约束性操作指令进行取证分诊,
这意味着对于联邦系统而言,其假设是易受攻击的、面向互联网的实例
可能在被修补之前就已被访问 —— 而不仅仅是理论上的暴露。
同样的假设对任何组织来说都是合理的默认做法:将修补视为事件响应
流程的第一步,而非终点。完整的假定入侵检查清单(密钥轮换、
凭据审查、CI/CD 审计)见 docs/remediation.md。
同一 GitLab 版本中还修复了其他内容吗? 是的 —— 2026 年 9 月 10 日的版本共修复了 17 个安全问题, 包括第二个严重级别问题(GitLab EE 中 GraphQL 订阅序列化器的 不安全反序列化)以及一个高级别的 Unicode 转换包装器中的 缓冲区溢出。参见 同一版本中修复的相关漏洞。 由于这些漏洞都随相同的 19.3.2 / 19.2.6 / 19.1.8 版本发布, 针对 CVE-2026-85706 的修补同时也修复了它们。
docs/ioc_list.md
中的误报说明。CONTRIBUTING.md。欢迎贡献新的 IOC、检测规则移植、误报报告
以及扫描器改进 —— 指南见
CONTRIBUTING.md(包括
禁止漏洞利用代码的政策和数据清理要求)。
完整引用详情及更多背景见
docs/timeline.md。
基于 MIT 许可证发布。检测内容(Sigma、 Suricata/Snort 规则、SIEM 查询)按原样提供用于防御目的; 在将其用于实际运营之前,请根据你自己的环境调整阈值和 误报处理方式。
CVE-2026-85706 GitLab CVE-2026-85706 GitLab path traversal GitLab vulnerability GitLab IOC GitLab indicators of compromise GitLab security advisory GitLab exploit detection GitLab CVSS 10.0 GitLab CISA KEV GitLab repository commits API vulnerability GitLab unauthenticated file read GitLab arbitrary file read path traversal CVE 2026
| CVE ID | CVE-2026-85706 |
| 厂商 / 产品 | GitLab 社区版(CE)与企业版(EE),自管理部署 |
| 漏洞类别 | 路径遍历(CWE-35),属于更广泛的路径名限制不当家族(CWE-22) |
| 受影响组件 | 仓库提交 API(/api/v4/projects/:id/repository/commits...) |
| 根本原因 | 受影响 API 端点中路径限制不当,且缺少身份验证强制 |
| 受影响版本 | GitLab CE/EE 18.7 至(不含)19.1.8、19.2 至(不含)19.2.6、19.3 至(不含)19.3.2 |
| 是否需要认证 | 否 —— 未认证,认证前利用 |
| 攻击向量 | 网络,单个 HTTP 请求 |
| CVSS 3.1 评分 | 10.0(严重) |
| 影响 | GitLab 服务器上的任意文件读取 —— 配置文件、密钥、令牌、源代码,可能还包括 SSH 密钥和数据库凭据 |
| 报告者 | 外部安全研究员(HackerOne 用户名 "s3ntago"),通过 GitLab 的 HackerOne 漏洞赏金计划提交 |
| 披露 / 修复 | 2026 年 9 月 10 日 —— 属于一次关键 GitLab 安全发布,共修复 17 个漏洞(参见相关漏洞) |
| CISA KEV | 于 2026 年 9 月 11 日加入;联邦文职机构修复截止日期为 2026 年 9 月 14 日;CISA 已将该 CVE 标记为需依据约束性操作指令(BOD)26-04 进行取证排查,反映出易受攻击系统可能在打补丁前已被访问的可能性 |
| 利用状态 | 已确认在野观察到活跃扫描 / 探测 —— watchTowr 报告称,在公开披露后约 24 小时内即出现首批在野利用尝试,评估大规模利用很可能随之而来 |
| 公开 PoC | 撰写本文时未确认公开可用 |
| GitLab.com / Dedicated | GitLab.com(SaaS)在披露时已完成修复;GitLab Dedicated 客户无需采取行动。仅自管理 CE/EE 实例需要采取行动 |
| 漏洞 | 严重性 | 备注 |
|---|
| CVE-2026-85706 —— 仓库提交 API 中的路径遍历 | 严重(CVSS 10.0) | 未认证任意文件读取 —— 本仓库的重点 |
| GraphQL 订阅序列化器中的不安全反序列化(GitLab EE) | 严重 | 仅影响 GitLab EE;此类反序列化缺陷视可利用性可能潜在地导致远程代码执行 |
| Unicode 转换包装器中的缓冲区溢出(GitLab EE) | 高 | |
| 计划流水线执行策略测试允许开发者访问受保护的 CI/CD 变量 | 高 | 凭据/密钥泄露风险,与本仓库修复指南中"保护你的 CI/CD 密钥"响应行动相关 |
| Markdown JSON 表格渲染器中的跨站脚本(CE/EE) | 高 | |
| CI/CD 环境变量作用域匹配器中的授权不当(CE/EE) | 高 | |
| GraphQL 复杂度限制器中的拒绝服务(CE/EE) | 高 | |
| SAML SSO 登录限制强制中的认证不当(CE/EE) | 中 | |
| Workhorse senddata 发射器中的凭据保护不足(CE/EE) | 中 | |
| 受保护环境审批规则与合规框架中的若干其他授权绕过和访问控制问题(EE) | 中 |
PRIVATE-TOKEN / Authorization 头
或已认证会话| 文件 | 平台 | 用途 |
|---|
detection/sigma_rule_gitlab_cve_2026_85706.yml | Sigma(SIEM 无关) | 基于日志的检测规则,可转换为 Splunk、Elastic、Sentinel、Chronicle、QRadar 等 |
detection/network_ids_cve_2026_85706.rules | Suricata / Snort | 用于内联 IDS/IPS 传感器的网络层签名 |
detection/siem_hunting_queries.md | Splunk、Elastic/Kibana、OpenSearch、grep/ripgrep | 用于手动/临时调查的即用型狩猎查询 |
GitLab patch 19.3.2GitLab patch 19.2.6GitLab patch 19.1.8GitLab secrets exposureGitLab CI/CD credential theftSigma rule GitLabSuricata rule GitLabSnort rule GitLabSplunk GitLab huntingGitLab incident responseGitLab threat huntingself-managed GitLab security