首页/安全/Vulnerable-file-reader-server

Vulnerable-file-reader-server

查看源码
2025-5-12
Words 719Read Time 2 min
Score:85

一个故意设计为存在命令注入漏洞的MCP服务器,用于演示安全漏洞及其修复方法。

MCP 文件读取器中的命令注入漏洞

本仓库展示了一个 Python MCP(Model Context Protocol)服务器实现中的关键命令注入漏洞。该漏洞允许攻击者通过操纵文件路径参数在主机系统上执行任意 shell 命令。

漏洞描述

该漏洞存在于 read_file 函数中,该函数原本用于从“安全”目录读取文件,但其实现存在严重缺陷:
此代码存在漏洞的原因是:
  1. 使用了 shell=True,这会调用 shell 来执行命令
  1. 直接将用户输入(file_name)插入到命令字符串中,未进行适当的清理
  1. 仅对输入路径进行了表面验证
在文件名周围使用引号('file_name')和不使用引号(file_name)之间的简单语义差异,导致整个系统暴露于命令执行的风险中。

安装

先决条件

  • Python 3.12 或更高版本
  • MCP 库版本 1.6.0

设置

  1. 克隆本仓库:
    1. 安装 MCP 服务器:
      1. 通过编辑 ~/.config/claude-desktop/claude_desktop_config.json 配置 Claude Desktop 使用你的 MCP 服务器:
        1. 请确保将 /ABSOLUTE/PATH/TO/uv 替换为你的 uv 可执行文件的实际路径,并根据需要调整目录路径。
      1. 在开发模式下启动 MCP 服务器:

        演示

        1. 在另一个终端中,安装并运行 MCP 检查器:
          1. 在 MCP 检查器 GUI 中连接到服务器:
              • 将传输类型设置为 "STDIO"
              • 设置命令为:run --with mcp run main.py
              • 点击 "Restart"
          1. 利用漏洞:
              • 转到 "Tools" 选项卡
              • 找到 "read_file" 工具
              • 在 "file_name" 字段中输入:
                • 点击 "Run Tool"
            1. 你应该会看到 test.txt 的内容,后跟你的用户名,这表明命令执行成功。

            其他利用示例

            以下是更多可以尝试的命令注入 payload:

            正确修复方法

            要修复此漏洞,切勿在用户提供的输入中使用 shell=True。相反:

            警告

            ⚠️ 仅供教育用途:此实现包含故意的安全漏洞。切勿在生产环境或包含敏感信息的任何系统上使用此代码。
            上一篇
            travel-itinerary-app
            下一篇
            gitlab-mcp-server