论坛首页 漏洞分析研究区 阅读主题

[分享]MCP协议安全:mcp-remote存在远程代码执行漏洞(CVE-2025-6514)

304 浏览 0 回复
#1 楼主 2026-06-01 21:09:08
漏洞名称mcp-remote存在远程代码执行漏洞产品名称mcp-remote产品简介mcp-remote是一个MCP代理工具,被Cloudflare、Auth0、Hugging Face等平台广泛使用影响版本V0.0.5~V0.1.15漏洞编号CVE-2025-6514漏洞成因mcp-remote对authorizationServerUrl的不安全处理,导致攻击者能够通过命令注入实现远程代码执行危害等级高危利用条件受影响的mcp-remote请求外部未知MCP服务器漏洞危害攻击者能够远程接管目标服务主机安全建议1.安全自查;2.及时升级mcp-remote版本到最新;3.限制MCP服务器的连接范围;4.强制加密通信
mcp-remote 是一款广泛使用的 MCP 代理工具,其应用场景覆盖 Cloudflare、Auth0、Hugging Face 等知名平台,累计下载及使用次数已超 43 万次。该工具目前存在一项高危安全漏洞,编号为 CVE-2025-6514,CVSS 评分为 9.6/10(满分 10 分),显示其具备极高危险性。具体而言,攻击者可通过构造恶意 MCP 服务,当受害者连接该恶意服务时,漏洞会被触发,允许攻击者执行任意命令,极端情况下可实现对受害者系统的完全接管。
01组件概述mcp-remote 是一个MCP代理工具,可以让原本只支持本地连接的MCP客户端能够与远程MCP服务器进行交互。目前,mcp-remote作为MCP生态的重要组成部分,下载量已超过 43 万次,其应用场景覆盖 Cloudflare、Auth0、Hugging Face 等知名平台。(图1 mcp-remote实现本地和远程MCP服务器通信)
02漏洞描述mcp-remote 版本V0.0.5 ~ V0.1.15 存在远程代码执行漏洞(CVE-2025-6514),该漏洞源于mcp-remote 对authorizationServerUrl的不安全处理逻辑。具体来说,当远程 MCP 服务器返回 401(未授权)状态时,mcp-remote 会启动授权流程,本意是引导用户完成身份验证。但在此过程中,工具会直接将服务器返回的 authorizationServerUrl作为系统命令参数执行,且未做任何安全校验。这使得当mcp-remote版本在0.0.5至0.1.15之间时,攻击者可以通过构造包含恶意命令的authorizationServerUrl实现攻击。
03漏洞危害攻击者通过实施远程代码执行漏洞(CVE-2025-6514),可能导致的危害如下:    1. 实现未授权的代码执行;    2. 在目标服务器中设置后门,窃取重要敏感信息;    3. 破坏系统运行状态,如触发系统崩溃等。
04漏洞利用场景透过mcp-remote的业务流程及漏洞描述,我们可以明确相关的两个漏洞利用场景。1. mcp-remote 连接到外部恶意的MCP服务器攻击者可以事先在MCP服务管理器中部署一个恶意MCP服务,等待“鱼儿”上钩。当企业内部工作人员通过mcp-remote去连接该MCP 服务时,就会被漏洞利用。这类攻击场景,类似钓鱼邮件、水坑攻击,极易让攻击者绕过企业外部防火墙进入到内网,然后实施破坏。(图2  mcp-remote连接远程恶意MCP服务器)2. mcp-remote与远程MCP服务器之间的流量被劫持由于mcp-remote与远程MCP服务器之间的通信协议默认为http,而http流量是未加密的,极易被攻击者通过流量抓取等手段劫持被篡改,实施中间人攻击。(图3  mcp-remote与远程MCP服务器通信流量被劫持)
05漏洞成因刨析本例中分析的组件源码版本为v0.1.12。在mcp-remote/dist/chunk-CYX6C3U3.js文件中,可以看到当event.code等于401时,会触发未授权处理流程,即进入_authThenStart()方法。而在_authThenStart()方法中的关键函数是auth()。auth()函数是漏洞利用并触发的关键流程。auth()函数如下所示,其主要流程是处理 OAuth 授权逻辑,核心目的是完成客户端与授权服务器之间的身份验证流程,最终返回授权状态或引导用户跳转授权页面。整体流程可以分为如下几个关键步骤:1. 确定authorizationServerUrl;(authorizationServerUrl的值从远程MCP服务器响应内容中获得)2. 通过discoverOAuthMetadata从authorizationServerUrl获取OAuth 相关元数据metadata;3. 通过Promise.resolve 获得 provider.clientInformation()的数据,即MCP客户端的信息;4. 基于前面的信息,通过registerClient来注册获取授权;5. 如果授权不成功,则刷新token,继续后续流程;6. 调用 startAuthorization 生成授权页面 URL(authorizationServerUrl)7. 通过provider.redirectToAuthorization 引导用户跳转到授权页面。
漏洞代码出现在上述的6、7步,具体如下所示。其中 startAuthorization ()获取元数据metadata的authorization_endpoint,并生成授权url。其中provider.redirectToAuthorization ()会采用open方法直接打开前面生成的授权url。open 方法用来执行系统命令,但是这里缺少对输入参数的过滤,这导致如果authorization_endpoint包含一个恶意命令,系统也会执行。这里对前面的分析进行总结,可得到如下结论:本地MCP通过mcp-remote访问远程MCP服务,在初始化访问过程中如果远程MCP服务返回401,则会触发mcp-remote的auth()函数处理未授权处理逻辑。auth()函数从远程MCP服务中通过discoverOAuthMetadata获得元数据metadata,其中包含authorizationServerUrl,然后通过startAuthorization基于authorizationServerUrl直接构造授权URL,最后通过provider.redirectToAuthorization使用系统函数open来执行授权URL。
(图4  mcp-remote漏洞利用流程)
06安全建议基于上述分析,我们建议相关企业应立即采取以下措施:首先,开展全面自查,确保自身的MCP协议不受到该漏洞影响;其次,及时升级mcp-remote 组件,确保其版本不低于0.1.16;然后,本地MCP在连接远程MCP服务时,应确保MCP服务器地址是可信的;最后,由于MCP通信的协议为HTTP,应强制加密,避免中间人攻击。
07参考资料f35K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6B7k6Y4u0G2k6#2)9J5k6h3y4G2L8g2)9J5c8X3u0D9L8$3N6Q4x

...(已截断)

---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-289523.htm

暂无回复,快来抢沙发吧!

请登录后参与讨论

立即登录 注册账号