从MCP Inspector 历史漏洞分析 MCP Hosts 攻击面
文章目录
简介
MCP Hosts 指的是运行 MCP 服务的主机或环境,claudemcp 的一张图比较清晰地介绍了 MCP 的架构及其组成。
MCP Inspector 是一个由 Anthropic 官方推出的专为模型上下文协议(Model Context Protocol,MCP)服务器设计的交互式开发者工具,旨在帮助开发者高效测试和调试 MCP 服务器。
MCP Inspector 在 NPM 源的累计下载量已突破百万次,近一周下载超 6 万次,被广泛用于开发,构建、测试 MCP 工具中。
安装 MCP Inspector
MCP Inspector 使用 TyepScript 开发,需要安装 Node.js 环境,打开 Node.js 官方网站(https://nodejs.org/)下载对应操作系统的 LTS 版本进行安装。
安装完成后使用 Node.js 附带的命令行工具 npx 安装 MCP Inspector 并启动。
|
|
如果需要安装特定版本则在包名后加上@版本号
,如npx -y @modelcontextprotocol/inspector@0.16.5
。
MCP Inspector 系统架构
MCP Inspector 采用三层架构,明确区分客户端界面、代理服务器和 MCP 服务器
其中界面默认部署在6274端口,代理默认在6277端口,开发者在界面上进行调试,实际是发送请求到6277端口,并由代理在服务端与MCP Server进行交互。
MCP Inspector 漏洞剖析
CVE-2025-49596
2025年6月27号,国外安全研究员披露了 MCP Inspector 的未授权命令执行漏洞,并写了一篇深度分析文章。 https://www.oligo.security/blog/critical-rce-vulnerability-in-anthropic-mcp-inspector-cve-2025-49596
本质是 MCP Inspector 安装 Stdio MCP Server 时允许执行任意命令。
由于缺乏身份认证机制,导致任何能访问 MCP Inspector的攻击者可通过此功能执行任意命令。
也就是开放在0.0.0.0的话,攻击者可直接构造恶意 Payload 执行系统命令。
又由于其启动端口固定,且执行安装Stdio MCP Server的请求为GET请求,缺乏CORS保护。部署在本地的情况,攻击者也可通过CSRF的方式进行攻击。
文章给出的 Payload 较为简单,简单在服务器上创建了一个文件。
如果要对此漏洞进行检测的话,想到的应该是用命令执行OOB的方式,但还有其它更加优雅的方式吗?写文件到静态文件?
在构造命令执行时,由于命令执行错误,我发现MCP Inspector 会返回标准错误。
我们能执行命令,是否可以利用重定向,将标准输出重定向到标准错误中,实验告诉我们确实是可以的,最终实现直接回显。
|
|
但此路由只在 0.11.0 版本及以后可用,在 0.11.0版本以前用的是另外一个路由。
|
|
此变化是由于 0.11.0 开始支持 Streamable HTTP Server,官方将路由进行了拆分。
https://github.com/modelcontextprotocol/inspector/compare/0.10.2…0.11.0-amended
让我们回到这个漏洞,该漏洞在0.14.0.1版本进行了修复,官方增加了认证机制,默认会生成一个32位的随机Session token,并限制了来源 Origin和增加 DNS 重绑定,启动默认绑定在 localhost。
https://github.com/modelcontextprotocol/inspector/compare/0.14.0…0.14.1
CVE-2025-58444
当 MCP Inspector 连接不可信 MCP Server,在处理 OAuth 认证流程时,由于没有正确验证 MCP Server 返回的授权服务器(authorization_endpoint)地址,存在 XSS 漏洞,攻击者可通过 XSS 漏洞获取 Session token,利用安装 Stdio MCP Server 功能远程执行任意命令,获取系统权限。
也就是利用 XSS 窃取 Session Token 绕过身份认证,最后利用 Stdio MCP Server 来执行命令。
漏洞触发点实际出现在 OAuth Flow a 标签 href 属性上。
也就是实际利用需要点击,属于 1 Click RCE。
漏洞条件为 < 0.16.6 版本,先部署一个恶意的MCP Server。
恶意 MCP Server 代码:https://gist.github.com/r00tuser111/ef66e2b03bf6187f5067975df0787320,在构造发送命令执行的请求时,发现并非是简单在 GET 请求中带上 MCP_PROXY_AUTH_TOKEN 参数,Session Token 是通过 x-mcp-proxy-auth 请求头传输的。
验证代码只适配 Mac 环境,触发 XSS 后会打开计算器。
选择一个通信类型如 Steamable HTTP,不需要 connect ,点击Open Auth Settings
展开再点击Quick Auth Flow
进行触发。
效果可看 X 上的视频:https://x.com/_r00tuser/status/1966020715481829675。
authorization_endpoint 这个利用点最早应该是 MCP-Remote 漏洞中的(https://jfrog.com/blog/2025-6514-critical-mcp-remote-rce-vulnerability/),而后被广大安全研究员应用挖掘。
Cherry Studio 也曾受这个影响:https://github.com/CherryHQ/cherry-studio/security/advisories/GHSA-gjp6-9cvg-8w93
Oauth 的实现应该是一个通用类库的实现,导致许多基于 Node.js 开发的MCP Hosts 都存在这个问题,我曾在 Github 通过简单的代码搜索过,发现此问题只出现在 Node.js 开发的应用中。
此漏洞的修复较为简单,官方对 authorization_endpoint 在前端展示的所有地方进行了校验,只能是 http 和 https 协议的 URL,详情参考前文的 commit 链接。
总结
基于 MCP Inspector 的历史漏洞,结合MCP-Remote,Cherry Studio等多个历史漏洞。
我们可以总结出在对MCP Hosts 的安全审计中应特别留意的两个攻击面:
Stdio MCP Server 安装限制不严带来的命令执行
Oauth 认证缺乏过滤带来的 XSS 或 RCE
随着时间的推移,安全的需求,跨平台的需求,MCP协议可能会进行各方面的扩展,势必也会带来更多的安全风险。