MCP安全隐患:一个全面的演示库
⚠️ 警告:此存储库包含用于教育目的的故意易受攻击的代码。 不要 在生产系统中使用易受攻击的示例。
🎯 目的
此存储库提供了模型上下文协议(MCP)服务器中安全漏洞的全面演示,专为演示、安全培训和开发人员教育而设计。每个威胁向量都包括易受攻击和安全的实现,并附有详细的解释。
📋 目录
🔍 概述
模型上下文协议(MCP)是一种新兴的标准,用于将大型语言模型(LLM)连接到外部数据源和工具。虽然它承诺简化集成,但最近的安全研究揭示了与过去几十年基本安全问题相呼应的漏洞。
关键安全问题
- 无默认身份验证 -MCP服务器通常无需身份验证即可访问
- 协议设计缺陷 -URL中的会话标识符,最低限度的安全指导
- 乐观信任模型 -假设句法正确性意味着语义安全
- 成熟度差距 -缺乏既定的安全模式和最佳实践
🏗️ MCP架构
┌─────────────────┐
│ MCP Hosts │ (Claude Desktop, IDEs, AI Tools)
│ (Applications)│
└────────┬────────┘
│
▼
┌─────────────────┐
│ MCP Clients │ (Protocol implementations)
└────────┬────────┘
│
▼
┌─────────────────┐
│ MCP Servers │ (Backend services exposing tools/data)
└────────┬────────┘
│
▼
┌─────────────────┐
│ Data Sources │ (Files, DBs, APIs, Resources)
└─────────────────┘🎭 威胁媒介
该存储库涵盖了六大类MCP安全漏洞:
1.💉 命令注入
使用用户控制的输入直接执行shell命令,允许执行任意命令。
- 影响:完全系统妥协
- 患病率43%的测试实现
- 位置:
src/command-injection/
2.📁 路径遍历
通过目录遍历攻击进行未经授权的文件系统访问。
- 影响:任意文件读/写
- 患病率:22%的测试实现
- 位置:
src/path-traversal/
3.🌐 服务器端请求伪造(SSRF)
无限制的URL获取,允许访问内部系统。
- 影响:内部网络暴露、数据泄露
- 患病率:30%的测试实现
- 位置:
src/ssrf/
4.🧪 工具中毒(TPA)
LLM执行的工具描述中嵌入的恶意指令。
- 影响:数据泄露、未经授权的行为
- 攻击面:工具描述字段
- 位置:
src/tool-poisoning/
5.🧬 全模式中毒(FSP)
跨所有JSON模式元素(名称、类型、默认值、枚举)的注入攻击。
- 影响:全面的LLM操作
- 攻击面:整个工具架构
- 位置:
src/full-schema-poisoning/
6.🎪 高级工具中毒(ATPA)
利用LLM解释动态工具输出和错误消息。
- 影响:行为攻击,难以检测
- 攻击面:工具执行输出
- 位置:
src/advanced-tool-poisoning/
📂 存储库结构
mcp-security-dangers/
├── src/
│ ├── command-injection/
│ │ ├── vulnerable/
│ │ │ ├── server.ts # Vulnerable implementation
│ │ │ └── examples.ts # Attack examples
│ │ ├── secure/
│ │ │ ├── server.ts # Secure implementation
│ │ │ └── validation.ts # Security controls
│ │ ├── README.md # Detailed threat documentation
│ │ └── demo.ts # Interactive demonstration
│ │
│ ├── path-traversal/ # Same structure as above
│ ├── ssrf/ # Same structure as above
│ ├── tool-poisoning/ # Same structure as above
│ ├── full-schema-poisoning/ # Same structure as above
│ ├── advanced-tool-poisoning/ # Same structure as above
│ │
│ ├── security-utils/
│ │ ├── prompt-shield.ts # Prompt injection detection
│ │ ├── input-validator.ts # Input validation utilities
│ │ ├── output-analyzer.ts # Output analysis for ATPA
│ │ └── monitoring.ts # Security monitoring tools
│ │
│ └── types/
│ └── mcp.ts # MCP protocol type definitions
│
├── docs/
│ ├── PRESENTATION_GUIDE.md # How to present this material
│ ├── THREAT_ANALYSIS.md # Deep dive into threat landscape
│ └── MITIGATION_STRATEGIES.md # Comprehensive security guidance
│
├── examples/
│ ├── payloads/ # Attack payload examples
│ └── outputs/ # Expected demonstration outputs
│
├── package.json
├── tsconfig.json
└── README.md🚀 入门指南
先决条件
- Node.js 18+和npm
- TypeScript 5.3+
- 对MCP协议的基本理解
- 熟悉安全概念
安装
# Clone the repository
git clone
cd mcp-security-dangers
# Install dependencies
npm install
# Build the project
npm run build🎬 运行演示
每个威胁向量都有一个交互式演示:
# Run individual demos
npm run demo:command-injection
npm run demo:path-traversal
npm run demo:ssrf
npm run demo:tool-poisoning
npm run demo:full-schema-poisoning
npm run demo:advanced-tool-poisoning
# Run all demos in sequence
npm run demo:all演示输出
每个演示将:
- 显示易受攻击的实现
- 演示攻击
- 显示安全实施
- 解释差异
- 提供缓解建议
📊 演示指南
推荐流量
- 引言 (5分钟)
- MCP概述和架构 - 为什么MCP安全很重要 - 脆弱性流行率统计
- 直接漏洞 (15分钟)
- 命令注入演示 - Path Traversal演示 - SSRF演示 - 现场袭击示威
- 间接攻击 (20分钟)
- 工具中毒(TPA)演示 - 全模式中毒(FSP)演示 - 高级工具中毒(ATPA)演示 - 现实世界场景
- 缓解策略 (15分钟)
- 安全实用程序演练 - 最佳实践 - 实施指南
- 问答 (5分钟)
关键谈话要点
- “现在是2025年,但我们看到了2000年的漏洞”
- “每个模式元素都是一个潜在的注入向量”
- “LLM将整个JSON模式作为推理上下文进行处理”
- “工具输出可以像输入一样被武器化”
- “零信任模型对人工智能系统至关重要”
🛡️ 缓解策略
基本防御
- AI提示护盾 -部署快速注射检测系统
- 严格验证 -允许列表架构和参数
- 增强分析 -静态和运行时安全扫描
- 上下文完整性 -培训LLM质疑异常请求
- 供应链安全 -集成前验证所有组件
- 安全基础 -MFA、最低权限、补丁、数据保护
速效方案
✅ 在所有MCP端点上启用输入验证 ✅ 对可疑模式实施输出监控 ✅ 使用参数化命令而不是shell执行 ✅ 应用路径规范化和分配列表 ✅ 限制出站网络访问 ✅ 部署提示屏蔽API ✅ 实施全面的日志记录和监控
📚 额外资源
⚠️ 道德使用
此存储库用于 仅用于教育目的易受攻击的代码示例故意不安全,以证明安全风险。
不要:
- 在生产中使用易受攻击的示例
- 未经授权在真实系统中利用这些漏洞
- 在没有适当安全控制的情况下部署MCP服务器
做:
- 从安全实施中学习
- 在项目中应用缓解策略
- 与您的团队分享安全知识
- 测试您自己的系统是否存在这些漏洞
🤝 贡献
欢迎投稿!拜托:
- 添加具有易受攻击和安全示例的新威胁向量
- 改进检测和缓解工具
- 加强文件和演示材料
- 分享真实世界的案例研究(匿名)
📄 许可证
MIT许可证-有关详细信息,请参阅许可证文件
🙏 致谢
此存储库基于以下安全研究:
- Equixly(Alessio Dalla Piazza)
- CyberArk实验室(辛查·科斯曼)
- 微软安全团队
- 不变实验室
______________________________________________________________________
记住:安全性不是一项功能,而是一项要求。保持警惕! 🔒
