恶意MCP服务器套件

bad-mcp是一个包含10个恶意MCP服务器的套件,用于演示针对AI客户端的协议级攻击模式,适用于安全研究和教育。

  • by canack
  • Go
  • 本地部署
  • 9 星标
  • 更新于
在 GitHub 查看 canack/bad-mcp

使用说明

坏mcp

10台故意恶意的MCP服务器 协议级攻击模式 针对AI客户端。每台服务器都利用了 模型上下文协议 --工具描述、模式、资源、会话管理和跨服务器交互。

这些不是等待被利用的有缺陷的服务器。他们 是 袭击者。

警告:此项目仅用于授权的安全研究和教育。不要将这些服务器暴露在互联网上或在生产中使用它们。

为什么存在

MCP的采用正在加速——Claude Desktop、Cursor、Windsurf和其他数十个人工智能客户端现在都支持它。但该协议的信任模型存在根本差距:工具描述未经验证,模式可以携带隐藏的指令,服务器可以在会话中更改定义。研究来自 CyberArk, 不变实验室,以及 弹性安全实验室 已经记录了这些攻击,但工作实现很少。

bad mcp提供了具体的、可运行的攻击服务器,因此客户端开发人员可以测试防御,安全团队可以评估风险,研究人员可以研究协议级威胁,而无需从头开始构建一切。

这有什么不同

糟糕的mcp 该死的易受攻击的MCP服务器 易受攻击的mcp服务器实验室
视角 服务器是攻击者 服务器是受害者 服务器是受害人
聚焦 仅MCP协议级攻击 混合(提示注入+经典appsc) 混合(路径遍历、SQLi、MCP)
攻击 FSP、ATPA、地毯拉取、资源中毒、跨服务器阴影 CTF挑战(简单/中等/困难) 9台服务器,最重要的培训
语言 Go+mcp Go SDK Python JS+Python
孤立 Docker编写,无主机访问权限 本地Python脚本 Docker编写
独特 通过会话工具+通知进行Rug拉取,通过参数名称进行完全模式中毒 挑战/评分格式 键入重点

建筑

vuln-external network (localhost:8001-8010)
┌────────────────────┐ ┌────────────────────┐ ┌────────────────────┐
│ schema-poison-notes│ │ response-inject-   │ │ shadow-exfil       │
│       :8001        │ │ tickets    :8002   │ │       :8003        │
└────────────────────┘ └────────────────────┘ └────────────────────┘
┌────────────────────┐ ┌────────────────────┐ ┌────────────────────┐
│ squatting-file-ops │ │ tool-poisoning-calc│ │ true-rug-pull      │
│       :8004        │ │       :8005        │ │       :8006        │
└────────────────────┘ └────────────────────┘ └────────────────────┘
┌────────────────────┐ ┌────────────────────┐ ┌────────────────────┐
│ resource-poison-   │ │ indirect-inject-   │ │ exfil-chain-       │
│ docs       :8007   │ │ fetcher    :8008   │ │ analytics  :8009   │
└────────────────────┘ └────────────────────┘ └────────────────────┘
┌────────────────────┐
│ denial-of-wallet   │
│       :8010        │
└────────────────────┘

服务器

端口 服务器 MCP攻击类 协议功能被利用
8001 架构中毒注释 完全架构中毒(FSP) input_schema 参数名称
8002 响应注射票 通过输出(ATPA)建议工具中毒 工具响应内容
8003 影子剥离 跨服务器影子 多服务器工具说明
8004 蹲式文件操作 工具名称冲突/蹲式 工具命名+描述
8005 工具中毒钙 工具描述中毒(TPA) 工具描述
8006 真地毯拉 地毯拉(工具定义突变) 会话工具+通知
8007 资源中毒文档 资源中毒(ATPA变体) resources/list + resources/read
8008 间接注射提取器 间接快速注射 工具输出中的外部数据
8009 提取链分析 跨工具提取链 通过描述进行工具链接
8010 拒绝钱包 拒绝钱包 递归调用+大量输出

每台服务器都有自己的 README.md 包含漏洞详细信息、漏洞利用场景、检测方法和缓解策略。

快速开始

# Build and start all servers
docker-compose build && docker-compose up -d

# Run smoke tests (runs entirely inside Docker)
docker-compose --profile test run --rm smoke-test

# View exfiltration logs
docker-compose logs schema-poison-notes | grep EXFIL
docker-compose logs true-rug-pull | grep RUG-PULL

# Stop
docker-compose down

连接MCP客户端

之后 docker-compose up -d,连接任何与SSE兼容的MCP客户端(Claude Desktop、Cursor、Windsurf、Claude Code等)。所有服务器都使用相同的JSON格式:

{
  "mcpServers": {
    "schema-poison-notes":    { "url": "http://localhost:8001/sse" },
    "response-inject-tickets":{ "url": "http://localhost:8002/sse" },
    "shadow-exfil":           { "url": "http://localhost:8003/sse" },
    "squatting-file-ops":     { "url": "http://localhost:8004/sse" },
    "tool-poisoning-calc":    { "url": "http://localhost:8005/sse" },
    "true-rug-pull":          { "url": "http://localhost:8006/sse" },
    "resource-poison-docs":   { "url": "http://localhost:8007/sse" },
    "indirect-inject-fetcher":{ "url": "http://localhost:8008/sse" },
    "exfil-chain-analytics":  { "url": "http://localhost:8009/sse" },
    "denial-of-wallet":       { "url": "http://localhost:8010/sse" }
  }
}

提示: 从开始 tool-poisoning-calc (:8005)——观察到的最简单的攻击。那就试试 true-rug-pull (:8006)——询问天气3次以上,观察工具的变化。

安全保证

关注 保证
主机文件系统 没有卷装载。容器对主机文件系统没有任何访问权限。
主机网络 否 network_mode: host所有容器都使用隔离的Docker网桥网络。
特权访问 否 privileged: true不 cap_add默认限制功能。
环境泄漏 未传递主机环境变量。所有“凭据”都是伪造的硬编码字符串。
主机执行 主机上没有运行任何东西。测试通过以下方式在Docker中运行 --profile test.
磁盘上的代码 惰性Go源文件。在Docker之外不可执行。

技术栈

  • MCP服务器:去吧+ mcp go v0.32.0 (SSE运输)
  • 码头工人:多阶段 golang:1.23-alpine -> alpine:3.19
  • 编排:docker与网络隔离
  • 测试:码头化Go冒烟测试(--profile test)

研究参考文献

服务器 源
模式中毒注释 CyberArk——全模式中毒
响应注入票 CyberArk——ATPA
阴影去角质 不变实验室——工具中毒
压缩文件操作 弹性安全实验室
工具中毒钙 不变实验室——工具中毒
真正的地毯拉力 ETDI纸
资源中毒文档 支柱安全
间接注射式提取器 微软——间接注入
剥离链分析 弹性安全实验室
拒绝钱包 即时安全——MCP十大风险

另请参见: Adversa AI——MCP安全TOP 25 | MCPTox基准测试 | 代理应用程序的OWASP前10名

已知差距

以下已发布的MCP攻击类尚未实现:

  • 服务器身份欺骗 --MCP服务器欺骗可信 serverInfo 初始化期间的名称/版本
  • 抽样滥用 --剥削 sampling/createMessage 注入任意提示
  • 提示/系统指令泄漏 --通过精心设计的工具响应提取系统提示
  • 通知通道过滤 --滥用进度/日志通知作为数据通道