关于 Damn Vulnerable Model Context Protocol (DVMCP)
Damn Vulnerable MCP Server(DVMCP)是一个刻意包含漏洞的 MCP 实现,用于教学。项目包含 10 个难度递增的挑战,面向安全研究人员、开发者和 AI 安全从业者。
主要功能
- 0110 个难度递增的漏洞挑战
- 02涵盖提示词注入、工具投毒等 MCP 风险
- 03提供挑战说明与解决方案指南
- 04基于 Docker 的一键运行环境
- 05MIT 开源许可
适用场景
- 01学习 MCP 实现中的常见安全问题
- 02在安全培训或 CTF 类练习中演示攻击向量
- 03理解缓解措施并改进自有 MCP 服务的安全性
MCP 相关
DVMCP 本身是一个有意存在漏洞的 MCP 服务器,向 MCP 客户端暴露工具、资源和提示词,用于演示相关攻击。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Damn Vulnerable Model Context Protocol (DVMCP)
一个专为教学目的而设计的易受攻击的 Model Context Protocol (MCP) 实现。
概述
Damn Vulnerable Model Context Protocol (DVMCP) 是一个教学项目,旨在展示 MCP 实现中的安全漏洞。项目包含 10 个难度逐渐提升的挑战,展示了不同类型的漏洞和攻击途径。
本项目面向安全研究人员、开发者和 AI 安全专业人士,帮助他们了解 MCP 实现中可能存在的安全问题以及如何缓解这些问题。
什么是 MCP?
Model Context Protocol (MCP) 是一种标准化协议,可让应用以结构化的方式为大语言模型(LLM)提供上下文。它将提供上下文与实际的 LLM 交互分离开来,使应用能够向 LLM 暴露资源、工具和提示词。
推荐的 MCP 客户端
CLINE - VSCode 扩展
请参阅此 Connecting to a Remote Server - Cline,了解如何将 Cline 连接到 MCP 服务
快速开始
克隆代码库后,运行以下命令:
docker build -t dvmcp .
docker run -p 9001-9010:9001-9010 dvmcp
免责声明
本项目在 Windows 环境中并不稳定。如果不想使用 Docker,请使用 Linux 环境。 我推荐使用 Docker 运行实验室,并且我完全确定它在 Docker 环境中可以正常运行
安全风险
MCP 虽然带来了诸多好处,但也引入了新的安全考量。本项目展示了 MCP 实现中可能出现的各种漏洞,包括:
- 提示词注入:通过恶意输入操纵 LLM 的行为
- 工具投毒:在工具描述中隐藏恶意指令
- 权限过度:利用过于宽泛的工具访问权限
- Rug Pull 攻击:利用工具定义变更发起攻击
- 工具劫持:用恶意工具覆盖合法工具
- 间接提示词注入:通过数据源注入指令
- 令牌窃取:利用不安全的令牌存储
- 恶意代码执行:通过易受攻击的工具执行任意代码
- 远程访问控制:获取未经授权的系统访问权限
- 多向量攻击:结合多个漏洞
项目结构
damn-vulnerable-MCP-server/
├── README.md # Project overview
├── requirements.txt # Python dependencies
├── challenges/ # Challenge implementations
│ ├── easy/ # Easy difficulty challenges (1-3)
│ │ ├── challenge1/ # Basic Prompt Injection
│ │ ├── challenge2/ # Tool Poisoning
│ │ └── challenge3/ # Excessive Permission Scope
│ ├── medium/ # Medium difficulty challenges (4-7)
│ │ ├── challenge4/ # Rug Pull Attack
│ │ ├── challenge5/ # Tool Shadowing
│ │ ├── challenge6/ # Indirect Prompt Injection
│ │ └── challenge7/ # Token Theft
│ └── hard/ # Hard difficulty challenges (8-10)
│ ├── challenge8/ # Malicious Code Execution
│ ├── challenge9/ # Remote Access Control
│ └── challenge10/ # Multi-Vector Attack
├── docs/ # Documentation
│ ├── setup.md # Setup instructions
│ ├── challenges.md # Challenge descriptions
│ └── mcp_overview.md # MCP protocol overview
├── solutions/ # Solution guides
└── common/ # Shared code and utilities
开始使用
有关安装和运行这些挑战的详细说明,请参阅设置指南。
挑战
项目包含 10 个挑战,分为三个难度等级:
简单挑战
- 基本提示词注入:利用未经清理的用户输入操纵 LLM 的行为
- 工具投毒:利用工具描述中的隐藏指令
- 权限范围过大:利用权限过于宽泛的工具访问未获授权的资源
中等挑战
- Rug Pull 攻击:利用安装后行为发生变化的工具
- 工具劫持:利用工具名称冲突覆盖合法工具
- 间接提示词注入:通过数据源注入恶意指令
- 令牌窃取:从不安全的存储中提取身份验证令牌
困难挑战
- 恶意代码执行:通过易受攻击的工具执行任意代码
- 远程访问控制:通过命令注入获取系统的远程访问权限
- 多向量攻击:串联多个漏洞实施复杂攻击
有关各项挑战的详细说明,请参阅挑战指南。
解决方案
本项目提供解决方案指南,仅供教学使用。建议先自行尝试挑战,再查看解决方案。
有关各项挑战的详细解决方案,请参阅解决方案指南。
免责声明
本项目仅用于教育目的。本项目中演示的漏洞绝不应在生产系统中实现。实现 MCP 服务时,请始终遵循安全最佳实践。
许可证
本项目采用 MIT 许可证授权,详情请参阅 LICENSE 文件。
作者
本项目由 Harish Santhanalakshmi Ganesan 使用 cursor IDE 和 Manus AI 创建。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。