Skip to main content
Glama

不安全的 MCP 演示

概述

该项目演示了一个存在漏洞的 MCP 服务器和多个客户端,包括一个 PoC 攻击客户端和一个正常客户端。该项目旨在用于教学目的,展示 MCP 服务器中潜在的安全漏洞。

Related MCP server: MCP Toolbox for Databases

项目结构

  • vuln-mcp.py :易受攻击的 MCP 服务器暴露不安全的工具。

  • good-mcp-client.py :用于正常交互(插入/查询记录)的常规良好客户端。

  • attack-mcp-client.py :自动攻击客户端,演示如何利用服务器漏洞。

  • requirements.txt :项目的 Python 依赖项。

功能和漏洞

暴露的服务器工具

  1. 插入记录

    • 将姓名/地址记录插入数据库。

    • **漏洞:**由于将用户输入的字符串直接插入到 SQL 查询中,因此容易受到 SQL 注入。

  2. 查询记录

    • 列出数据库中的所有记录。

    • **漏洞:**无需身份验证或访问控制即可暴露所有数据。

  3. 执行sql

    • 执行客户端提供的任意 SQL 查询。

    • **漏洞:**允许任何 SQL 命令,包括破坏性命令(例如,数据泄露、模式更改)。

  4. 获取环境变量

    • 返回所请求的任何环境变量的值。

    • **漏洞:**泄露敏感环境变量(例如,机密、API 密钥)。

如何运行

1.安装依赖项

pip install -r requirements.txt

2.启动服务器和Good客户端

在一个终端中:

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_sqlget_env_variable类的工具。

    • 仅公开必要的功能。

  3. 实施身份验证和授权:

    • 要求用户在允许访问敏感工具或数据之前进行身份验证和检查权限。

  4. 验证并清理输入:

    • 检查并清理所有用户输入,尤其是与数据库或系统交互的输入。

  5. 限制环境变量访问:

    • 仅允许访问非敏感变量,或者完全删除此工具。

  6. 审计和监控使用情况:

    • 记录所有工具调用并监控可疑或滥用行为。

  7. 最小特权原则:

    • 以最小权限运行服务器并尽可能限制数据库和操作系统访问。

免责声明

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


如有疑问或需要进一步改进,请提出问题或联系项目维护者。

-
security - not tested
F
license - not found
-
quality - not tested

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kenhuangus/mcp-vulnerable-server-demo'

If you have feedback or need assistance with the MCP directory API, please join our Discord server