该死的易受攻击模型上下文协议(DVMCP)
为教育目的而故意脆弱地实现模型上下文协议(MCP)。
概述
该死的脆弱模型上下文协议(DVMCP)是一个教育项目,旨在展示MCP实现中的安全漏洞。它包含10个难度越来越大的挑战,展示了不同类型的漏洞和攻击媒介。
该项目旨在让安全研究人员、开发人员和人工智能安全专业人员了解MCP实施中的潜在安全问题以及如何缓解这些问题。
什么是MCP?
这 模型上下文协议(MCP) 是一种标准化的协议,允许应用程序以结构化的方式为大型语言模型(LLM)提供上下文。它将提供上下文的关注点与实际的LLM交互分开,使应用程序能够向LLM公开资源、工具和提示。
推荐的MCP客户端
Olama MCP客户 (含)--使用以下方式运行:
./venv/bin/python fixes/ollama_mcp_client.py您还可以将任何与SSE兼容的MCP客户端(例如Cursor、Cline)直接连接到下表中列出的SSE端点。
有关Cline(VSCode扩展),请参阅 连接到远程服务器-Cline 用于连接说明。
快速开始
选项1-Linux(推荐)
git clone
cd damn-vulnerable-MCP-server
chmod +x install.sh && ./install.sh脚本将:
- 安装Python 3.10+并创建虚拟环境
- 安装所有Python依赖项
- 安装Ollama并拉取您选择的模型
- 设置挑战临时目录
- 打印运行说明
安装后,打开 两个终端:
# Terminal 1 — start all challenge servers
./start_sse_servers.sh
# Terminal 2 — start the MCP client
./venv/bin/python fixes/ollama_mcp_client.py选项2-Docker
docker build -t dvmcp .
docker run -p 9001-9010:9001-9010 dvmcp注: Docker模式不包括Ollama。你仍然需要跑步 ./venv/bin/python fixes/ollama_mcp_client.py 分别指向你的Ollama实例。______________________________________________________________________
挑战
所有挑战服务器都在以下位置公开一个SSE端点 http://localhost: /sse.
🟢 简单
| # | 挑战 | 端口 | SSE端点 | OWASP LLM风险 | 提示 |
|---|---|---|---|---|---|
| 1 | 基本快速注射 | 9001 | http://localhost:9001/sse | MCP06 –通过上下文有效载荷快速注入 | echo 该工具通过LLM直接反映您的输入。尝试制作一条覆盖系统提示的消息,并强制模型显示信息或改变其行为。 |
| 2 | 工具中毒 | 9002 | http://localhost:9002/sse | MCP03 –工具中毒 | 仔细阅读工具描述——它们可能包含用户看不见但模型可见的隐藏指令。你能让LLM按照工具描述中嵌入的指令行事吗? |
| 3 | 权限范围过大 | 9003 | http://localhost:9003/sse | MCP02 –通过作用域爬行进行权限升级 | 文件读取器工具应该仅限于公共目录。探索路径遍历技术,以访问预期范围之外的文件,特别是 /private 目录。 |
🟡 中等
| # | 挑战 | 端口 | SSE端点 | OWASP LLM风险 | 提示 |
|---|---|---|---|---|---|
| 4 | 拉臀攻击 | 9004 | http://localhost:9004/sse | MCP03 工具中毒 get_weather 该工具在前几个调用中表现正常。重复几次请求,观察工具描述是如何变化的,以及模型被指示做什么 | |
| 5 | 工具阴影 | 9005 | http://localhost:9005/sse | MCP02 –通过作用域爬行进行特权升级 | 与合法工具同名注册的恶意工具可以悄无声息地覆盖它。调查模型实际调用的工具版本,看看是否可以触发影子工具的隐藏行为。 |
| 6 | 间接快速注射 | 9006 | http://localhost:9006/sse | MCP06 –通过上下文有效载荷进行提示注入 | 文档处理工具读取外部内容并将其传递给模型。尝试在文档文本中嵌入提示注入有效负载——你能让LLM执行隐藏在它处理的数据中的指令吗? |
| 7 | 代币盗窃 | 9007 | http://localhost:9007/sse | MCP01 –令牌管理不善和秘密暴露 | 身份验证令牌在MCP上下文中存储和引用。以普通用户身份进行身份验证,然后寻找方法提取或重用通过工具响应或资源元数据公开的管理令牌。 |
🔴 困难
| # | 挑战 | 端口 | SSE端点 | OWASP LLM风险 | 提示 |
|---|---|---|---|---|---|
| 8 | 恶意代码执行 | 9008 | http://localhost:9008/sse | MCP05 –命令注入和执行 | 代码执行工具在没有适当沙盒的情况下运行Python代码片段。制作一个从文件系统读取敏感文件或执行系统命令的有效负载——凭据文件位于 /tmp/dvmcp_challenge8/sensitive/credentials.txt. |
| 9 | 远程访问控制 | 9009 | http://localhost:9009/sse | MCP10 –上下文注入和过度共享 | 笔记工具存储每个用户的数据,但依赖于客户端提供用户名。如果您提供了不同的用户名,会发生什么?你能阅读属于的笔记吗 admin? |
| 10 | 多矢量攻击 | 9010 | http://localhost:9010/sse | MCP01 / MCP06 / MCP07 –令牌管理不当、及时注入和身份验证不足 | 此挑战会链接多个漏洞。首先在工具元数据中查找泄漏的令牌,然后使用提示注入来升级权限,最后访问受保护的云配置资源。分阶段思考——每一步都会开启下一步。 |
______________________________________________________________________
OWASP LLM前10名——参考
| ID | 标题 | 描述 |
|---|---|---|
| MCP01 | 令牌管理不善和秘密暴露 | 存储在模型内存或协议日志中的硬编码凭据、长期令牌和秘密可能会使敏感环境暴露于未经授权的访问。 |
| MCP02 | 通过作用域爬行进行特权升级 | MCP服务器内的临时或松散定义的权限通常会随着时间的推移而扩展,从而赋予代理过多的能力。 |
| MCP03 | 工具中毒 | 攻击者破坏工具/插件或其输出,注入恶意、误导或有偏见的上下文来操纵模型行为。 |
| MCP04 | 软件供应链攻击和依赖篡改 | 受损的依赖关系可能会改变代理行为或引入执行级后门。 |
| MCP05 | 命令注入和执行 | AI代理在没有适当验证或净化的情况下,使用不受信任的输入构建和执行系统命令或代码片段。 |
| MCP06 | 通过上下文有效载荷进行提示注入 | “解释器”是模型,“有效载荷”是文本。因为模型遵循自然语言指令,所以提示注入攻击既强大又微妙。 |
| MCP07 | 身份验证和授权不足 | MCP服务器或代理无法正确验证身份或实施访问控制,从而暴露了关键的攻击路径。 |
| MCP08 | 缺乏审计和遥测 | 有限的遥测阻碍了调查和事件响应。维护工具调用和上下文更改的详细日志。 |
| MCP09 | 影子MCP服务器 | 在安全治理之外运行的未经批准或无监督的MCP部署——通常使用默认凭据或许可配置。 |
| MCP10 | 上下文注入和过度共享 | 共享、持久或作用域不足的上下文窗口将敏感信息从一个任务、用户或代理暴露给另一个。 |
______________________________________________________________________
项目结构
damn-vulnerable-MCP-server/
├── README.md # This file
├── requirements.txt # Python dependencies
├── start_sse_servers.sh # Start all 10 challenge servers
├── startup.sh # Docker entrypoint setup
├── supervisord.conf # Process supervisor config (Docker)
├── Dockerfile # Docker image definition
├── fixes/
│ └── ollama_mcp_client.py # Main MCP client (Ollama-based)
├── challenges/
│ ├── easy/ # Challenges 1–3 (ports 9001–9003)
│ ├── medium/ # Challenges 4–7 (ports 9004–9007)
│ └── hard/ # Challenges 8–10 (ports 9008–9010)
├── docs/
│ ├── challenges.md # Challenge descriptions
│ ├── cursor_sse_compatibility.md
│ ├── mcp_overview.md # MCP protocol overview
│ ├── project_structure.md
│ ├── README_SSE.md # SSE connection guide
│ └── setup.md # Setup instructions
└── common/ # Shared utilities解决方案
没有提供解决方案。自己尝试每个挑战——使用上面挑战表中的提示和OWASP参考作为指导。
免责声明
本项目仅用于教育目的。这里展示的漏洞应该 从不 在生产系统中实施。在实施MCP服务器时,始终遵循安全最佳实践。
许可证
此项目在MIT许可证下获得许可——有关详细信息,请参阅许可证文件。
作者
该项目由Harish Santanalakshmi Ganesan使用Cursor IDE和Manus AI创建。
