麦克普夫兹
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 | 处理空字符串、空字节、超大有效载荷 |
| 资源耗竭 | 中等 | 缺少速率限制、超时、输入大小限制 |
运作原理
- 连接 通过stdio(子进程)或HTTP连接到MCP服务器
- 发现 所有工具及其参数模式通过
tools/list - 匹配 基于参数名称和类型的适用测试模式工具
- 执行 通过以下方式为每个工具制作有效载荷
tools/call - 分析 脆弱性指标的应对措施
- 报告 严重程度、证据和评分结果
模式匹配
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_dbreturn“找到0个结果: “)当输入包含检测标记时,可能会触发命令注入误报。 - 平台特定有效载荷:路径遍历有效载荷是平台感知的(Unix vs Windows),但可能存在一些跨平台边缘情况。
- 连接器:需要
aiohttp(不包括在基础依赖关系中)。单独安装:pip install aiohttp.
发展
pip install -e ".[dev]"
pytest tests/ -v许可证
麻省理工学院
