MCP服务器动态安全测试工具

mcpfuzz是一款针对MCP服务器的动态安全测试工具,通过发送精心设计的输入来验证服务器的实际行为,确保其安全处理各种输入。

  • by 8endit
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 8endit/mcpfuzz

使用说明

麦克普夫兹

MCP服务器的动态安全测试。

现有工具扫描哪些MCP服务器 声称 mcpfuzz测试它们 实际上 同上

静态扫描仪读取工具说明。mcpfuzz连接、发送精心编制的输入,并验证您的服务器是否安全地处理它们。

安装

pip install -e .

快速开始

# Scan a local MCP server (stdio transport)
mcpfuzz scan --stdio "python my_server.py"

# Discovery only (list tools, no testing)
mcpfuzz discover --stdio "python my_server.py"

# Run specific patterns only
mcpfuzz scan --stdio "python my_server.py" --patterns path_traversal,ssrf

# JSON output for CI/CD
mcpfuzz scan --stdio "python my_server.py" --format json --output report.json

# Markdown report
mcpfuzz scan --stdio "python my_server.py" --format md --output report.md

它测试了什么

mcpfuzz附带了7种安全测试模式:

模式 严重性 测试内容
路径遍历 临界 文件路径参数允许 ../../etc/passwd 样式访问
命令注入 CRITICAL shell命令中的字符串参数
服务器端请求伪造 CRITICAL URL参数允许对内部/元数据端点的请求
错误泄漏 HIGH 错误响应泄漏堆栈跟踪、路径、数据库连接字符串
提示注入 高 未经过滤返回的外部数据(LLM注入风险)
输入验证 MEDIUM 处理空字符串、空字节、超大有效载荷
资源耗竭 中等 缺少速率限制、超时、输入大小限制

运作原理

  1. 连接 通过stdio(子进程)或HTTP连接到MCP服务器
  2. 发现 所有工具及其参数模式通过 tools/list
  3. 匹配 基于参数名称和类型的适用测试模式工具
  4. 执行 通过以下方式为每个工具制作有效载荷 tools/call
  5. 分析 脆弱性指标的应对措施
  6. 报告 严重程度、证据和评分结果

模式匹配

mcpfuzz自动确定针对哪些工具运行哪些模式:

  • 一个带有 path 参数获取路径遍历测试
  • 一个带有 url 参数获取SSRF测试
  • 一个带有 cmd 参数获取命令注入测试
  • 针对所有工具运行输入验证、错误泄漏和资源耗尽

使用Docker安全运行(推荐)

mcpfuzz向MCP服务器发送精心编制的有效载荷。如果服务器易受攻击,则这些有效负载将在运行服务器的机器上执行。 始终在隔离的Docker容器中运行扫描 --永远不要在主机系统上。

# Build the container
docker compose build

# Scan demo servers (fully isolated — no network, no host access)
docker compose run --rm scan-vulnerable
docker compose run --rm scan-secure

# Run tests inside container
docker compose run --rm test

# Scan your own server (mount read-only)
docker compose run --rm -v /path/to/server:/target:ro scan-custom \
  scan --stdio "python /target/server.py"

容器运行时:

  • network_mode: none --无网络访问
  • read_only 文件系统+ tmpfs 用于温度传感器
  • 所有Linux功能都下降了(cap_drop: ALL)
  • no-new-privileges --无特权升级
  • 内存/CPU/PID限制--杀死失控进程
  • 容器内的非root用户

演示服务器

包括两个演示服务器用于开发和测试:

# Via Docker (recommended)
docker compose run --rm scan-vulnerable
docker compose run --rm scan-secure

# Direct (only for development, NOT for untrusted servers)
mcpfuzz scan --stdio "python demo_servers/vulnerable_server.py"
mcpfuzz scan --stdio "python demo_servers/secure_server.py"

添加自定义图案

看 docs/ADDING_PATTERNS.md 了解如何编写自己的YAML测试模式。

已知限制

  • 回显假阳性:在响应中回应用户输入的工具(例如。, search_db return“找到0个结果: “)当输入包含检测标记时,可能会触发命令注入误报。
  • 平台特定有效载荷:路径遍历有效载荷是平台感知的(Unix vs Windows),但可能存在一些跨平台边缘情况。
  • 连接器:需要 aiohttp (不包括在基础依赖关系中)。单独安装: pip install aiohttp.

发展

pip install -e ".[dev]"
pytest tests/ -v

许可证

麻省理工学院