IPBUF安全漏洞报告
English
CVE-2025-9222 CVSS 8.7 高危

GitLab CE/EE 存储型XSS漏洞 (CVE-2025-9222)

披露日期: 2026-01-09

漏洞信息

漏洞编号
CVE-2025-9222
漏洞类型
存储型跨站脚本攻击 (Stored XSS)
CVSS评分
8.7 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
GitLab CE/EE

相关标签

CVE-2025-9222GitLab存储型XSSCross-Site ScriptingGitLab Flavored Markdown高危漏洞Web安全身份认证绕过会话劫持

漏洞概述

CVE-2025-9222是GitLab Community Edition(CE)和Enterprise Edition(EE)中的一个高危安全漏洞。该漏洞存在于GitLab Flavored Markdown(GFM)渲染处理过程中,攻击者可以通过构造特定的恶意Markdown内容,在目标用户的浏览器中执行任意JavaScript代码。由于是存储型XSS,恶意脚本会被永久存储在GitLab服务器上,所有查看包含该恶意内容的页面(包括问题、评论、维基页面、提交信息等)的用户都会受到攻击。此漏洞影响所有从18.2.2版本开始、低于18.5.5、18.6.3和18.7.1版本的GitLab实例。攻击者需要具备低权限的认证用户身份即可实施攻击,但需要诱导其他用户进行交互(如查看评论或页面),才能触发恶意脚本执行。成功利用此漏洞可能导致会话劫持、敏感信息窃取、权限提升等严重后果。

技术细节

该漏洞的根本原因在于GitLab Flavored Markdown解析器在处理特定Markdown语法时未能正确过滤或转义HTML标签和JavaScript事件处理器。攻击者可以利用GFM的链接语法或图片语法,嵌入带有点击事件处理器或自动执行脚本的HTML属性。例如,通过构造形如[click](javascript:alert(document.cookie))的链接,或利用HTML实体编码绕过过滤机制。当其他用户查看包含此恶意内容的问题、评论或维基页面时,点击链接或页面加载时即会触发JavaScript代码执行。由于GitLab的Markdown渲染允许部分HTML标签通过,且服务器端过滤不完善,攻击者可以构造能够绕过现有安全过滤的payload。存储型XSS的特点使得攻击只需一次注入,所有后续访问该内容的用户都会受到威胁。

攻击链分析

STEP 1
1
攻击者注册并登录GitLab账户(低权限即可),获取有效的认证会话
STEP 2
2
攻击者创建或编辑问题(Issue)、评论(Comment)、MR描述或维基页面
STEP 3
3
攻击者在Markdown内容中插入精心构造的XSS payload,利用GFM解析器漏洞绕过安全过滤
STEP 4
4
恶意内容被保存到GitLab服务器数据库,形成存储型XSS
STEP 5
5
其他用户(如项目成员、评论者)访问包含恶意内容的页面
STEP 6
6
用户与页面交互(点击链接或页面自动加载)触发恶意JavaScript代码执行
STEP 7
7
攻击者通过JavaScript窃取用户会话Cookie、劫持账户或执行其他恶意操作

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2025-9222 PoC - GitLab Stored XSS via GFM // This PoC demonstrates how to inject malicious JavaScript through GitLab Flavored Markdown // Method 1: Using JavaScript protocol in link const maliciousLink = '[Click me](javascript:alert(document.domain))'; // Method 2: Using event handlers in HTML within Markdown const maliciousHTML = '<img src=x onerror=alert(document.cookie)>'; // Method 3: Using SVG element with event handler const maliciousSVG = '[![alt](svg:alert(1))](javascript:prompt(1))'; // Method 4: Using data URI with script const maliciousDataURI = '[link](data:text/html,<script>alert(origin)</script>)'; // Exploitation scenario: // 1. Attacker creates a new issue/comment/MR description // 2. Inserts one of the above payloads in the Markdown content // 3. When any user views the content, the XSS payload executes // 4. Attacker can steal session cookies, perform actions as victim // Recommended test payload (safe version for testing): const testPayload = '[Test XSS](javascript:alert("XSS Vulnerability Confirmed"))'; // Note: This PoC is for educational and security testing purposes only. // Always obtain proper authorization before testing security vulnerabilities.

影响范围

GitLab CE/EE 18.2.2 <= version < 18.5.5
GitLab CE/EE 18.6.0 <= version < 18.6.3
GitLab CE/EE 18.7.0 < version < 18.7.1

防御指南

临时缓解措施
如果无法立即升级到安全版本,可采取以下临时缓解措施:1) 限制Markdown渲染中HTML标签的通过;2) 启用严格的CSP头部配置,阻止内联脚本执行;3) 对所有用户提交的Markdown内容进行服务端安全过滤;4) 限制低权限用户的评论和内容创建功能;5) 监控和审计GitLab实例上的异常用户活动;6) 考虑使用第三方安全网关对GitLab流量进行过滤和检测。

参考链接

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