MCP漏洞演示

一个展示MCP服务器安全漏洞的教育项目,包括易受攻击的服务器和多个客户端,用于演示SQL注入、任意代码执行等安全问题。

  • by kenhuangus
  • Python
  • 本地部署
  • 4 星标
  • 更新于
在 GitHub 查看 kenhuangus/mcp-vulnerable-server-demo

使用说明

不安全的MCP演示

概述

该项目演示了一个易受攻击的MCP服务器和多个客户端,包括一个概念验证攻击客户端和一个好客户端。它旨在用于教育目的,以展示MCP服务器中的潜在安全漏洞。

项目结构

  • vuln-mcp.py:易受攻击的MCP服务器暴露了不安全的工具。
  • good-mcp-client.py:正常交互(插入/查询记录)的常规良好客户端。
  • attack-mcp-client.py:演示利用服务器漏洞的自动攻击客户端。
  • requirements.txt:项目的Python依赖关系。

功能和漏洞

暴露的服务器工具

  1. insert_record
    • 将姓名/地址记录插入数据库。
    • 脆弱性: 由于将用户输入直接插入到SQL查询中,容易导致SQL注入。
  2. 查询记录
    • 列出数据库中的所有记录。
    • 脆弱性: 在没有身份验证或访问控制的情况下公开所有数据。
  3. execute_sql
    • 执行客户端提供的任意SQL查询。
    • 脆弱性: 允许任何SQL命令,包括破坏性命令(例如,数据泄露、模式更改)。
  4. get_env_变量
    • 返回所请求的任何环境变量的值。
    • 脆弱性: 泄漏敏感的环境变量(例如机密、API密钥)。

如何跑步

1.安装依赖项

pip install -r requirements.txt

2.启动服务器和良好的客户端

在一个终端中:

python good-mcp-client.py vuln-mcp.py

按照提示以交互方式插入/查询记录。

3.运行攻击客户端

在另一个终端中:

python attack-mcp-client.py vuln-mcp.py

这将自动:

  • 尝试SQL注入攻击
  • 执行任意SQL查询
  • 尝试读取几个常见的环境变量

输出示例

  • 攻击客户端将显示哪些有效载荷成功或失败,并打印出数据库内容和环境变量值(如果可以访问)。

已证明的漏洞

  • SQL注入: 用户输入未经消毒,允许攻击者操纵SQL逻辑并插入任意数据。
  • 任意代码执行: 这 execute_sql 该工具允许攻击者运行任何SQL命令,包括数据窃取或销毁。
  • 敏感数据暴露: 这 get_env_variable 该工具允许攻击者读取机密和配置值。
  • 缺乏访问控制: 任何人都可以运行所有工具并访问所有数据,而无需身份验证。

缓解策略

要保护真实世界的MCP服务器,您应该:

  1. 使用参数化查询:
    • 对于SQL查询,始终使用参数替换而不是字符串插值来防止注入。
    • 示例(安全):
      cursor.execute("INSERT INTO records (name, address) VALUES (?, ?)", (name, address))
      
  2. 限制危险工具:
    • 删除或严格限制工具,如 execute_sql 和 get_env_variable.
    • 仅公开必要的功能。
  3. 实施身份验证和授权:
    • 要求用户在允许访问敏感工具或数据之前进行身份验证和权限检查。
  4. 验证和消毒输入:
    • 检查并清理所有用户输入,特别是与数据库或系统交互的输入。
  5. 限制环境变量访问:
    • 只允许访问非敏感变量,或完全删除此工具。
  6. 审核和监控使用情况:
    • 记录所有工具调用,并监控可疑或滥用行为。
  7. 最小特权原则:
    • 以最低权限运行服务器,并尽可能限制数据库和操作系统访问。

免责声明

本项目仅用于教育和示范目的。 不要在生产环境中部署此代码。


如有疑问或需要进一步改进,请打开问题或联系项目维护人员。