> 技术文档 > 【紧急预警】大模型安全再爆一洞:mcp-remote 严重命令注入漏洞CVE-2025-6514 深度剖析

【紧急预警】大模型安全再爆一洞:mcp-remote 严重命令注入漏洞CVE-2025-6514 深度剖析


一、漏洞概述:从 \"代理工具\" 到 \"安全隐患\"

2025 年 7 月 9 日,JFrog 安全研究团队披露了一个编号为CVE-2025-6514的严重远程代码执行(RCE)漏洞,该漏洞存在于热门工具mcp-remote中,CVSS 评分高达9.6(CRITICAL 级别)。这一漏洞允许攻击者通过构造恶意 MCP 服务器,在受害者连接时执行任意操作系统命令,可能导致完全的系统接管。

1.1 什么是 mcp-remote?

要理解漏洞的影响,首先需要明确mcp-remote的作用。
mcp-remote是一个代理工具,诞生于Model Context Protocol(MCP 协议) 的发展过程中。MCP 协议是 2024 年 11 月出现的开放标准,用于让 AI 助手(如 Claude、Cursor 等 LLM 客户端)实时连接外部数据源、工具和服务。

早期的 MCP 服务器多为本地部署(与 LLM 客户端同机运行),但随着远程 MCP 服务器的兴起,mcp-remote逐渐流行 —— 它能让仅支持本地 MCP 连接(如通过 STDIO)的客户端(如 Claude Desktop、Cursor)通过 HTTP 协议连接远程 MCP 服务器,成为本地与远程的 \"桥梁\"。

目前,mcp-remote已被广泛采用,Cloudflare、Auth0、Hugging Face 等平台的文档中均有提及,是 LLM 生态中连接远程 MCP 服务的关键工具。

1.2 漏洞核心特征

项目 详情 漏洞编号 CVE-2025-6514 漏洞类型 OS 命令注入(远程代码执行) CVSS 评分 9.6(CRITICAL) 受影响版本 mcp-remote 0.0.5 ~ 0.1.15 修复版本 0.1.16 及以上 远程可利用 是 发现者 JFrog 安全研究团队的 Or Peles

二、受影响范围与风险场景

2.1 受影响的系统与用户

  • 直接受影响:使用mcp-remote 0.0.5 ~ 0.1.15版本连接远程 MCP 服务器的用户,尤其是依赖 Claude Desktop、Cursor 等 LLM 客户端的开发者和企业。
  • 操作系统差异
    • Windows:可实现完全的任意命令执行(包括参数控制);
    • macOS/Linux:可执行任意程序,但参数控制受限(进一步研究可能实现完全命令执行)。

2.2 典型攻击场景

场景 1:连接不可信的 MCP 服务器

受害者配置mcp-remote连接一个被攻击者控制的恶意 MCP 服务器。当mcp-remote与服务器建立连接并进行授权流程时,恶意服务器返回构造的authorization_endpoint URL,触发命令注入。

场景 2:局域网中间人攻击

受害者通过 HTTP(非加密)连接可信 MCP 服务器,但局域网内的攻击者通过中间人(MITM)攻击劫持流量,篡改服务器返回的authorization_endpoint URL,植入恶意命令。
这种场景在企业内网中尤为常见 —— 用户通常对局域网内的服务器缺乏警惕,且可能使用 HTTP 进行 \"信任内\" 通信。

三、漏洞技术细节:从授权流程到命令执行

3.1 漏洞触发的核心链路

mcp-remote的漏洞源于对authorization_endpoint URL 的不安全处理。该 URL 用于 OAuth 授权流程中引导用户跳转至登录页面,而mcp-remote在处理该 URL 时,直接将其传递给系统命令执行函数,导致注入风险。

完整触发链路如下:

用户配置LLM客户端连接远程MCP服务器 → mcp-remote启动并与服务器通信 → 服务器返回恶意authorization_endpoint URL → mcp-remote调用系统工具打开该URL → 恶意URL被解析为系统命令并执行

3.2 关键代码解析

步骤 1:配置与初始化

用户通过 LLM 客户端(如 Claude Desktop)的配置文件指定远程 MCP 服务器地址,示例配置如下:

{ \"mcpServers\": { \"remote-mcp-server-example\": { \"command\": \"npx\", \"args\": [\"mcp-remote\", \"http://remote.server.example.com/mcp\"] } }}

客户端启动时,mcp-remote作为代理启动,开始与http://remote.server.example.com/mcp通信。

步骤 2:授权流程中的漏洞点

当服务器返回 \"401 Unauthorized\" 时,mcp-remote会进入授权流程(调用auth.ts中的auth函数),核心逻辑如下:

// 简化的auth函数export async function auth(provider, {serverUrl}) { // 1. 获取服务器OAuth元数据(包含authorization_endpoint) const metadata = await discoverOAuthMetadata(serverUrl); // 2. 构造授权URL const { authorizationUrl } = await startAuthorization(serverUrl, {metadata}); // 3. 打开授权URL(触发点) await provider.redirectToAuthorization(authorizationUrl);}

startAuthorization函数中,metadata.authorization_endpoint被直接用于构造URL对象:

// 简化的startAuthorization函数async function startAuthorization(serverUrl, {metadata}) { authorizationUrl = new URL(metadata.authorization_endpoint); // 使用恶意URL构造对象 authorizationUrl.searchParams.set(\"response_type\", \"code\"); // 添加查询参数 return { authorizationUrl };}

最终,redirectToAuthorization调用open npm 包打开该 URL:

// node-oauth-client-provider.tsasync redirectToAuthorization(authorizationUrl: URL) { await open(authorizationUrl.toString()); // 直接执行系统命令打开URL}
步骤 3:open包的危险行为

open包是一个用于打开 URL / 文件的工具,但其在 Windows 上的实现存在风险:

  • 调用 PowerShell 执行命令:powershell -EncodedCommand
  • 当传入的 URL 以file:开头时,PowerShell 会将其解析为本地文件路径并执行对应的程序。

3.3 恶意 Payload 构造

攻击者只需让 MCP 服务器返回如下authorization_endpoint即可触发漏洞:

{ \"authorization_endpoint\": \"file:/c:/windows/system32/calc.exe\", \"registration_endpoint\": \"https://remote.server.example.com/register\"}

mcp-remote处理该 URL 时,open包会执行:

Start \"file:/c:/windows/system32/calc.exe?response_type=code...\"

这等价于直接运行calc.exe,在受害者机器上打开计算器(实际攻击中可替换为恶意程序)。

3.4 从 \"执行程序\" 到 \"完全命令注入\"

上述 Payload 只能执行程序,无法传递参数。攻击者通过PowerShell 子表达式可实现更灵活的命令注入:

  • 使用$(...)在 URL 中嵌入命令,例如:
    a:$(cmd.exe /c \"echo hacked > c:\\temp\\pwned.txt\")?response_type=code
  • 由于非标准协议(如a:)不会被 URL 编码,$(...)会被 PowerShell 解析并执行,实现带参数的命令注入。

四、漏洞修复与防御建议

4.1 官方修复方案

mcp-remote0.1.16 版本中修复了该漏洞(参考官方修复提交)。修复核心是对authorization_endpoint URL 进行严格校验,仅允许http:/https:协议,拒绝file:等危险协议。

4.2 紧急防御措施

  1. 立即升级版本
    mcp-remote升级至 0.1.16 及以上:

    npx mcp-remote@latest 
  2. 限制连接范围
    仅允许mcp-remote连接可信的 MCP 服务器,禁止连接未知或第三方服务器。

  3. 强制加密通信
    要求所有 MCP 服务器连接使用 HTTPS(而非 HTTP),避免中间人攻击篡改流量。

  4. 临时监控
    检查系统日志中是否存在异常命令执行记录(如calc.execmd.exe的异常启动),尤其是mcp-remote运行时段。

五、总结与扩展思考

CVE-2025-6514 揭示了 MCP 生态快速发展中潜藏的安全风险 —— 当工具为了便利性简化安全校验时,可能引入致命漏洞。对于开发者和用户:

  • 开发者:在处理外部输入(尤其是 URL、命令参数)时,必须进行严格的协议校验和字符过滤,避免直接传递给系统命令函数。
  • 用户:对 \"代理工具\" 保持警惕,及时关注官方更新,避免连接不可信的第三方服务。

随着 LLM 客户端(如 Cursor、Windsurf)逐渐支持直接连接远程 MCP 服务器,mcp-remote的使用可能减少,但类似的 \"兼容性工具\" 仍可能存在类似风险。安全防护的核心始终是:最小权限原则 + 严格输入校验 + 及时更新