kenhuangus
服务介绍
不安全的MCP演示
概述
该项目展示了易受攻击的MCP服务器和多个客户端,包括一个概念验证攻击客户端和一个良好的客户端。它旨在通过教育目的展示MCP服务器中可能存在的安全漏洞。
项目结构
vuln-mcp.py:暴露不安全工具的易受攻击的MCP服务器。good-mcp-client.py:用于正常交互(插入/查询记录)的常规良好客户端。attack-mcp-client.py:自动攻击客户端,展示对服务器漏洞的利用。requirements.txt:项目的Python依赖项。
功能与漏洞
暴露的服务器工具
- insert_record
- 将名称/地址记录插入数据库。
- 漏洞:由于直接将用户输入字符串插值到SQL查询中,容易受到SQL注入攻击。
- query_records
- 列出数据库中的所有记录。
- 漏洞:在没有身份验证或访问控制的情况下暴露所有数据。
- execute_sql
- 执行客户端提供的任意SQL查询。
- 漏洞:允许执行任何SQL命令,包括破坏性的命令(例如,数据泄露、模式更改)。
- get_env_variable
- 返回请求的任何环境变量的值。
- 漏洞:泄露敏感环境变量(例如,密钥、API密钥)。
如何运行
1. 安装依赖项
bash
pip install -r requirements.txt
2. 启动服务器和良好客户端
在一个终端中:
bash
python good-mcp-client.py vuln-mcp.py
按照提示交互式地插入/查询记录。
3. 运行攻击客户端
在另一个终端中:
bash
python attack-mcp-client.py vuln-mcp.py
这将自动执行以下操作:
- 尝试SQL注入攻击
- 执行任意SQL查询
- 尝试读取几个常见的环境变量
示例输出
- 攻击客户端将显示哪些有效载荷成功或失败,并在可访问时打印数据库内容和环境变量值。
展示的漏洞
- SQL注入:用户输入未经处理,允许攻击者操纵SQL逻辑并插入任意数据。
- 任意代码执行:
execute_sql工具允许攻击者运行任何SQL命令,包括数据盗窃或破坏。 - 敏感数据暴露:
get_env_variable工具允许攻击者读取密钥和配置值。 - 缺乏访问控制:任何人都可以运行所有工具并在未经身份验证的情况下访问所有数据。
缓解策略
为了保护实际的MCP服务器,您应该:
-
使用参数化查询:
- 对于SQL查询,始终使用参数替换而不是字符串插值以防止注入。
- 示例(安全):
python
cursor.execute("INSERT INTO records (name, address) VALUES (?, ?)", (name, address))
-
限制危险工具:
- 移除或严格限制像
execute_sql和get_env_variable这样的工具。 - 只暴露必要的功能。
- 移除或严格限制像
-
实现身份验证与授权:
- 要求用户进行身份验证,并在允许访问敏感工具或数据之前检查权限。
-
验证和清理输入:
- 检查并清理所有用户输入,特别是那些与数据库或系统交互的输入。
-
限制环境变量访问:
- 只允许访问非敏感变量,或者完全移除此工具。
-
审计和监控使用情况:
- 记录所有工具调用并监控可疑或滥用行为。
-
最小特权原则:
- 以最小权限运行服务器,并尽可能限制数据库和操作系统访问。
免责声明
本项目仅用于教育和演示目的。请勿在生产环境中部署此代码。
对于问题或进一步改进,请打开一个问题或联系项目维护者。