type
status
date
slug
summary
tags
category
icon
password
漏洞描述
MCP Inspector 服务端组件在
0.14.1 之前的版本中存在一个严重的安全漏洞。该漏洞允许未经身份验证的远程攻击者通过构造一个特制的网络请求,在运行 MCP Inspector 服务的服务器上执行任意操作系统命令。此漏洞源于一个调试接口在设计上完全缺少身份验证和权限控制机制。影响范围
MCP Inspector 是一款用于检测和调试 MCP服务的工具,它可以帮助开发者快速查看 MCP 服务器暴露的能力(如工具、资源、配置等),验证服务端的元数据是否符合规范,并在本地进行交互式调用测试。该漏洞影响MCP Inspector
0.14.1 之前的所有版本。复现环境
unbuntu 22.04
安装nodejs:
克隆源码,然后运行:
这样可以启动服务:

漏洞分析
在源码的
server/src/index.ts里:该类从URL中提取命令和参数,并且能够执行命令。具体地:
const command = query.command as string;: 代码从 URL 中获取command参数的值,并将其存入command变量。代码完全没有对这个字符串进行任何验证、过滤或清理,完全信任了用户的输入。
const transport = new StdioClientTransport(...): 代码使用这个用户提供的、未经处理的command变量来实例化一个StdioClientTransport对象。这个对象的目的是去执行系统命令。
await transport.start();: 这行代码是漏洞的触发点。StdioClientTransport实例的start方法会调用 Node.js 底层的child_process模块,在服务器上启动一个新的 Shell 进程,并执行command变量中的内容。
另一方面,
GET /stdio 路由的处理函数将来自外部网络(req.query)的数据视为可信的内部指令,没有进行任何安全过滤、转义或验证。它直接将用户可控的字符串用作后续程序执行参数:createTransport(req)。当然post啥的也是类似情况。漏洞复现
这里用get的payload简单演示一下漏洞:

这里执行的命令是在tmp目录新建文件。可以看到命令已经成功写入了。

漏洞修复
引入认证中间件,解决校验缺失的问题:

主要是通过originValidationMiddleware检查 HTTP 请求的
Origin 或 Referer 头,保证来源可靠;另一方面authMiddleware会检查请求中是否包含有效的身份凭证(例如,在 Header 中的 Authorization 令牌、Cookie 中的 session ID 等),完成身份认证。