IPBUF安全漏洞报告
English
CVE-2025-14046 CVSS 6.1 中危

CVE-2025-14046: GitHub Enterprise Server DOM元素ID冲突导致未授权后端交互

披露日期: 2025-12-11

漏洞信息

漏洞编号
CVE-2025-14046
漏洞类型
HTML注入/DOM元素ID冲突
CVSS评分
6.1 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
GitHub Enterprise Server

相关标签

HTML注入DOM XSS数据岛冲突GitHub Enterprise ServerCVE-2025-14046输入验证不充分客户端状态操纵服务器端请求伪造

漏洞概述

CVE-2025-14046是GitHub Enterprise Server中的一个中危安全漏洞,CVSS评分6.1。该漏洞源于不正确的输入中和机制,允许攻击者通过精心构造的HTML内容注入DOM元素,这些元素的ID与服务器端初始化的数据岛(data islands)发生冲突。当用户访问包含恶意内容的页面时,攻击者可以覆盖或遮蔽关键的应用状态对象,从而在用户不知情的情况下触发服务器端POST请求或其他未授权的后端交互操作。成功利用此漏洞需要攻击者具有目标GitHub Enterprise Server实例的访问权限,并通过社会工程学手段诱使特权用户查看包含冲突HTML元素的恶意内容。该漏洞影响了GitHub Enterprise Server的多个版本,构成了客户端驱动的服务器端请求伪造(CSRF)风险。

技术细节

该漏洞的核心问题在于GitHub Enterprise Server的前端JavaScript应用程序依赖DOM元素ID来访问和操作服务器端初始化的数据岛。攻击者利用HTML注入技术,在页面中注入具有特定ID的DOM元素,这些ID与服务器端创建的用于存储应用状态的数据岛ID相同。当浏览器的DOM解析器处理这些冲突的ID时,攻击者注入的DOM元素会覆盖或遮蔽服务器端的数据岛对象。攻击者通过精心设计HTML结构,可以控制被覆盖对象的属性值,从而影响JavaScript应用程序的行为逻辑。由于某些Project视图依赖这些被污染的状态对象进行后续操作,应用程序可能在用户不知情的情况下发起服务器端POST请求或执行其他未授权的backend交互。这种攻击利用了浏览器DOM的默认行为和应用程序对客户端数据的过度信任,属于一种特殊类型的DOM XSS变种。攻击者需要具备实例访问权限,并通过钓鱼或其他方式诱导特权用户访问恶意内容。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者获取目标GitHub Enterprise Server实例的访问权限,了解版本信息和目标组织结构
STEP 2
步骤2: 构造恶意内容
攻击者创建包含精心构造HTML的仓库、Issue、Pull Request或Wiki页面,注入具有特定ID的DOM元素以覆盖服务器端数据岛
STEP 3
步骤3: 社会工程攻击
攻击者通过钓鱼邮件、内部消息或其他方式诱导具有管理权限的特权用户访问包含恶意内容的页面
STEP 4
步骤4: DOM元素冲突触发
当特权用户浏览恶意内容时,浏览器DOM解析器处理冲突的ID,攻击者注入的HTML元素覆盖或遮蔽服务器初始化的数据岛对象
STEP 5
步骤5: 应用状态操纵
被污染的状态对象被应用程序的后续逻辑使用,触发原本不应执行的服务器端POST请求或后端交互操作
STEP 6
步骤6: 未授权操作执行
攻击者成功利用漏洞执行删除项目、修改权限或其他管理员级别的操作,完成攻击目标

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<!-- CVE-2025-14046 PoC: DOM Element ID Collision --> <!-- This PoC demonstrates the HTML injection technique that can overwrite server-initialized data islands --> <!DOCTYPE html> <html> <head> <title>CVE-2025-14046 PoC</title> </head> <body> <!-- Attack Scenario: 1. Attacker creates a malicious repository or issue with crafted HTML content 2. When a privileged user views the content, the injected HTML is rendered 3. The injected DOM elements with colliding IDs overwrite server data islands 4. The application state is manipulated, leading to unauthorized backend requests --> <!-- Example: Overwriting a server-initialized data island --> <script type="application/json" id="server-state" data-value="malicious-value"> { "project_id": "12345", "action": "delete", "authenticated_user": "victim-admin" } </script> <!-- Alternative injection vector using data attributes --> <div id="gh-data-owner" data-owner-id="attacker-controlled-id" data-permissions="admin"> </div> <!-- Real-world exploitation would involve: - Crafted Markdown/GitHub Flavored Markdown with HTML tags - Malicious pull request/issue descriptions - Wiki pages with embedded HTML - Comments containing conflicting element IDs Example GFM payload: <script id="app-settings" type="application/json">{"malicious": true}</script> --> <script> // Detection script to verify vulnerability presence console.log('CVE-2025-14046 Detection Script'); const stateElement = document.getElementById('server-state'); if (stateElement && stateElement.dataset.value) { console.log('Potential vulnerable state element detected'); console.log('Value:', stateElement.dataset.value); } </script> </body> </html>

影响范围

GitHub Enterprise Server < 3.18.3
GitHub Enterprise Server < 3.17.9
GitHub Enterprise Server < 3.16.12
GitHub Enterprise Server < 3.15.16
GitHub Enterprise Server < 3.14.21

防御指南

临时缓解措施
对于无法立即升级的情况,建议采取以下临时缓解措施:限制用户提交包含原始HTML内容的能力,使用纯Markdown格式替代;启用内容安全策略(CSP)以减少HTML注入风险;对特权用户进行安全意识培训,要求其在查看未知来源内容时保持警惕;监控和审计异常的管理员操作日志,及时发现潜在的攻击行为;考虑实施网络隔离措施,限制内部用户对GitHub Enterprise Server实例的直接访问。同时建议尽快规划并执行版本升级,以彻底消除该漏洞风险。

参考链接

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