mcpField
I
Insecure MCP Demo

Insecure MCP Demo

本地服务
github.com/kenhuangus安全479 周前更新

关于 Insecure MCP Demo

Insecure MCP Demo 是用于教学的项目,包含故意存在漏洞的 MCP 服务,以及常规和攻击客户端。它演示 SQL 注入、任意 SQL 执行、环境变量泄露和缺少访问控制,不适用于生产环境。

主要功能

  1. 01演示 SQL 注入
  2. 02开放任意 SQL 执行
  3. 03展示环境变量泄露
  4. 04包含常规与攻击客户端
  5. 05说明缓解措施

适用场景

  1. 01讲解 MCP 服务安全风险
  2. 02在受控环境中演示攻击
  3. 03学习安全缓解方法

MCP 相关

示例服务以 MCP 工具形式提供记录插入与查询、任意 SQL 执行和环境变量读取。配套客户端演示这些工具的常规使用及攻击方式。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

不安全的 MCP 演示

概述

本项目演示了一个存在漏洞的 MCP 服务和多个客户端,包括一个概念验证攻击客户端和一个安全客户端。本项目旨在用于教学,展示 MCP 服务中可能存在的安全漏洞。

项目结构

  • vuln-mcp.py:存在漏洞的 MCP 服务,提供不安全的工具。
  • good-mcp-client.py:用于常规交互(插入/查询记录)的普通安全客户端。
  • attack-mcp-client.py:自动化攻击客户端,用于演示如何利用服务端漏洞。
  • requirements.txt:项目的 Python 依赖项。

功能与漏洞

暴露的服务端工具
  1. insert_record
    • 向数据库插入姓名/地址记录。
    • **漏洞:**由于直接将用户输入插入 SQL 查询字符串,容易受到 SQL 注入攻击。
  2. query_records
    • 列出数据库中的所有记录。
    • **漏洞:**没有身份验证或访问控制,会暴露所有数据。
  3. execute_sql
    • 执行客户端提供的任意 SQL 查询。
    • **漏洞:**允许执行任何 SQL 命令,包括破坏性命令(例如,数据窃取、架构更改)。
  4. get_env_variable
    • 返回请求的任意环境变量的值。
    • **漏洞:**会泄露敏感环境变量(例如,机密信息、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. 最小权限原则:
    • 以最低权限运行服务端,并尽可能限制对数据库和操作系统的访问。

免责声明

本项目仅用于教学和演示。请勿在生产环境中部署此代码。


如有疑问或希望进一步改进,请提交 issue 或联系项目维护者。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。