MCP易损试验台
⚠️ 严重警告⚠️
此服务器包含故意的安全漏洞
- 目的:仅测试MCP Inspector安全评估工具
- 不要 在生产中使用
- 不要 暴露于不受信任的网络
- 不要 连接到真实的数据源
- 不要 在本地主机测试环境之外进行部署
目的
此MCP服务器旨在测试MCP检查器工具的安全评估能力。它包含故意易受攻击的工具,这些工具表现出真正的安全漏洞,以验证检测的准确性。
双设置架构:
- 易受攻击的服务器 (
mcp-vulnerable-testbed):故意破坏用于基线测试 - 强化服务器 (
mcp-hardened-testbed):用于测试检验员指导的修复 - 两台服务器并排运行,以便直接比较
工具类别
高风险易损工具(32个工具)
这些工具实际上执行恶意有效载荷,包括命令注入、身份验证绕过、会话漏洞和加密失败:
- 核心执行漏洞(9个工具):计算器、systemexec、data_leak、工具覆盖、配置修饰符、提取器、反序列化器、模板、文件读取器
- 身份验证和状态漏洞(4个工具):auth_bypass、admin_action、chainexecutor、session
- OWASP/DVMCP模式(7个工具):document_processor、service_status、network_dinostic、safeexecutor(黑名单旁路)、crypto_tool、encryption_tool以及AUP违规
- AUP违规(8个工具):政治竞选、欺诈、骚扰、侵犯隐私、医疗建议、绕过drm、雇佣bot、scada
- 挑战#14-22易受攻击(4+工具):天气、目录查找、摘要器、恶意计算、cron、脚本生成器、授权响应、sse_reconnect、内容处理器、过度权限、范围扩展
看 docs/TOOLS-REFERENCE.md 了解每个工具的详细漏洞细分。
中等风险易受攻击工具(10个工具)
- 编码和解析(3个工具):unicode_processor、nested_parser、package_installer
- 时间漏洞(1个工具):rug_pull(需要11次以上的调用才能触发)
- 内容类型漏洞(1个工具):content_processor(挑战#20)
- 附加模式(5个工具):各种编码和黑名单绕过技术
安全控制工具(15个工具)
这些工具不应被标记为易受攻击(假阳性检测):
- 原始9工具:存储、搜索、列表、信息、回显、验证、记录器、jsonformat、url_validator
- 挑战#14安全资源(2个工具):safe_resource_access_tool、safe_resource_validator_tool
- 挑战#15-18安全(4个工具):safe_math_tool、safe_path_validater_tool、safe_common_help_tool、safe_network_check_tool
实用工具(2个工具)
- get_testbed_info -返回服务器元数据、配置和工具计数
- reset_testbed_state -清除所有状态跟踪以进行干净的测试运行
总计:59个工具 (32个高风险+10个中风险+15个安全+2个公用事业)+12个资源
______________________________________________________________________
安全测试挑战
该测试平台包括23个高级安全测试挑战,用于评估安全评估工具的复杂性:
挑战#1:工具注释欺骗
您的安全工具能否检测到工具的行为何时与其自身描述相矛盾?
故意使用的五种高风险工具 欺骗性MCP注释 歪曲他们的行为:
| 工具 | 欺骗性注释 | 实际行为 |
|---|---|---|
| 漏洞计算器工具 | readOnlyHint=True,title=“安全计算器” | 用途 eval() 执行代码 |
| 漏洞系统执行工具 | readOnlyHint=True,title=“安全命令运行器” | 用途 subprocess.run() |
| vulnerable_data_leak_tool | readOnlyHint=True,title=“安全数据查询” | 暴露凭据 |
| 漏洞配置修改工具 | readOnlyHint=True,title=“安全配置查看器” | 修改运行时配置 |
| 易损件_蚀刻工具 | openWorldHint=False,title=“安全URL验证器” | 执行SSRF攻击 |
一个老练的安全审计员应该标记注释和实际代码行为之间的不匹配。
挑战#2:临时拉臀漏洞
您的工具能否检测到仅在多次调用后才显现的漏洞?
这 vulnerable_rug_pull_tool 测试 状态安全分析:
- 调用1-10:行为正常,返回安全响应
- 调用11+:通过执行系统命令
subprocess.run()
一个简单的无状态扫描程序将完全忽略此漏洞。检测要求:
- 跨多个调用跟踪调用状态
- 具有11次以上调用的测试工具
- 分析行为随时间的变化
挑战3:通过无边界输入拒绝服务
您的工具能否识别导致资源耗尽的缺失输入验证?
试验台实现了 故意区别 安全和易受攻击的工具之间:
| 工具类型 | 输入验证 | 行为 |
|---|---|---|
安全工具 (safe_*) | ✅ 强制10KB限制 | 拒绝超大输入并出错 |
易受攻击的工具 (vulnerable_*) | ❌ 无验证 | 处理任何大小的输入 |
测试用例:
# Safe tool rejects 15KB payload
safe_storage_tool(data="A" * 15000)
# → "Input exceeds maximum length of 10000 characters"
# Vulnerable tool processes 15KB payload (DoS risk)
vulnerable_calculator_tool(query="A" * 15000)
# → Processes without rejection安全审计员应检测:
- 缺失
MAX_INPUT_LENGTH易受攻击工具中的验证 - 内存耗尽攻击的可能性
- 工具类别之间的不对称保护
挑战#4-#13:高级MCP特定攻击
挑战#4-#13测试MCP特定漏洞:
- 挑战#4:打开身份验证失败(CVE-2025-52882)-身份验证失败授予访问权限而不是拒绝
- 挑战#5:混合身份验证模式-区分失败打开与失败关闭的实现
- 挑战#6:链式利用-具有输出注入和状态中毒的多工具攻击链
- 挑战#7:基于跨工具状态的授权-通过共享配置状态进行权限升级
- 挑战#8:通过工具输出间接提示注入-工具响应中的未声明内容
- 挑战#9:通过错误消息泄露机密-在详细的错误处理中暴露凭据
- 挑战#10:网络诊断命令注入-shell=True,输入未经消毒
- 挑战#11:弱黑名单绕过-安全控制不完整(黑名单反模式)
- 挑战#12:会话管理漏洞-会话固定、可预测令牌、无超时
- 挑战#13:加密失败(OWASP A02:2021)-弱哈希、ECB模式、硬编码密钥
挑战#14-#20:高级基于资源和持久性攻击
- 挑战#14:基于资源的漏洞-具有注入点的MCP资源(注://{user_id},internal://secrets, company://data/{部门})
- 挑战#15:工具描述中毒-工具描述中嵌入的隐藏指令(天气、目录查找、摘要)
- 挑战#16:多服务器阴影-工具名称冲突攻击(trusted_calculate_Tool vs malicious_calculate-Tool)
- 挑战#17:持久性机制-利用后持久性(cron_tool、script_generator_tool)
- 挑战#18:JWT令牌泄漏-响应中的身份验证令牌暴露(auth_response_tool)
- 挑战#19:SSE会话去同步攻击-可预测的事件ID,无验证,会话范围绕过(SSE_reconnect_tool)
- 挑战#20:内容类型混淆攻击-MIME类型不匹配、多语言攻击、魔术字节绕过(Content_processor_tool)
看 CLAUDE.md 有关完整的挑战规范和测试实现,请参阅 tests/.
安装
cd /home/bryan/mcp-servers/mcp-vulnerable-testbed
docker-compose up -d --build这将启动两台服务器:
- 脆弱的:
http://localhost:10900/mcp - 硬化:
http://localhost:10901/mcp
用法
HTTP传输(默认)
默认情况下,这两台服务器都使用HTTP传输运行,以便于检查器集成。
连接URL:
- 易受攻击的服务器:
http://localhost:10900/mcp - 强化服务器:
http://localhost:10901/mcp
测试连接性:
./test-http-endpoint.shMCP检查器HTTP配置:
{
"mcpServers": {
"vulnerable-testbed": {
"url": "http://localhost:10900/mcp",
"transport": "http"
},
"hardened-testbed": {
"url": "http://localhost:10901/mcp",
"transport": "http"
}
}
}stdio运输(替代)
要使用stdio传输而不是HTTP,请执行以下操作:
- 编辑
docker-compose.yml并设置TRANSPORT=stdio对于这两种服务 - 重新启动容器:
docker-compose restart - 使用stdio连接:
{
"mcpServers": {
"vulnerable-testbed": {
"command": "docker",
"args": [
"exec",
"-i",
"mcp-vulnerable-testbed",
"python3",
"src/server.py"
]
},
"hardened-testbed": {
"command": "docker",
"args": [
"exec",
"-i",
"mcp-hardened-testbed",
"python3",
"src/server.py"
]
}
}
}注: 使用 python3 src/server.py 直接,不是 python3 -m mcp run src/server.py
MCP检查员测试工作流程
- 启动两个容器:
docker-compose up -d - 在易受攻击的服务器上运行检查器(
http://localhost:10900/mcp) - 审查漏洞发现和建议的修复
- 将修复程序应用于加固服务器(
./src-hardened/) - 重建:
docker-compose up -d --build - 在强化服务器上运行检查器(
http://localhost:10901/mcp) - 比较结果以验证修复
MCP检查员评估结果
最新结果(2024年12月)
| 服务器 | 漏洞 | 风险级别 | 状态 |
|---|---|---|---|
| 易受攻击(10900) | 125+ | 高 | ❌ 失败 |
| 硬化(10901) | 0 | 低 | ✅ 通行证 |
关键指标:
- 每台服务器的工具总数:59(32个高,10个中,15个安全,2个实用程序)+12个资源
- 检测率:100%(检测到42个易受攻击的工具)
- 假阳性率:0%(所有15种安全工具均正确分类)
- Pytest验证:在29个测试文件中进行873+次测试(25次基于资源的注入、41次工具描述中毒、40次多服务器阴影、41次持久性机制、35次JWT令牌泄漏、28次SSE会话去同步、28次内容类型混淆、25次过多权限、20次挑战#22修复、6次类型安全,以及额外覆盖)
看 docs/VULNERABILITY-VALIDATION-RESULTS.md 详细分类。
预期评估结果
预期检测(100%召回)
检查员应将这42个工具标记为易受攻击:
高风险(32种工具):
- 核心执行(9):计算器、systemexec、data_leak、tool_override、config_modifier、fetcher、反序列化器、模板、file_reader
- Auth/state(4):Auth_bypass、admin_action、chain_executor、session
- DVMCP/OWSP(7):文档处理器、服务状态、网络不可知、加密工具、加密工具和安全执行器,以及AUP基本模式
- AUP违规行为(8):政治竞选、欺诈、骚扰、隐私侵犯、医疗建议、drm_bypass、雇佣机器人、scada
- 挑战#14-22(4+):天气、目录查找、摘要器、恶意计算、cron、脚本生成器、授权响应、sse_reconnect、内容处理器、过度权限、范围扩展
中等风险(10种工具):
- 编码/解析(3):unicode_processor、nested_parser、package_installer
- 时态(1):rug_pull(需要11次以上的调用)
- 内容类型(1):内容处理器(挑战#20)
- 附加模式(5):各种编码和旁路技术
预期安全分类(0%假阳性)
检查员不应标记这15个工具:
- ✅ safe_storage_tool_mcp、safe_search_tool_mcp、safe_list_tool_mtp、safe_info_tool_mcps、safe_echo_tool_msp
- ✅ safe_validate_tool_mcp、safe_logger_tool_mcp、safe_json_formatter_tool_mtp、safe_url_validater_tool_mcp
- ✅ safe_math_tool、safe_path_validator_tool、安全命令帮助工具、安全网络检查工具
- ✅ safe_resource_access_tool、safe_resource_validator_tool
测试策略
第一阶段:基线测试
# Connect inspector to vulnerable testbed
# Run full assessment
# Verify all 42 tools are tested第2阶段:验证
- 高风险工具:应标记32个
- 中等风险工具:应标记10个
- 安全工具:不应标记15个
- 资源:应测试5个注射点
- 目标:100%检测(42/42),0%假阳性(0/15)
第三阶段:高级挑战
- 挑战#1-#3:注释欺骗、临时地毯拉取、通过无限制输入进行DoS
- 挑战#4-#7:绕过授权、链式利用、跨工具状态
- 挑战#8-#13:间接注入、秘密泄露、网络注入、黑名单绕过、会话管理、加密失败
- 挑战#14-#24:基于资源的注入、工具描述中毒、多服务器阴影、持久化机制、JWT令牌泄漏、SSE会话去同步、内容类型混淆、权限范围过大、多参数模板注入、二进制资源攻击
配置
运输方式
产生 docker-compose.yml:
environment:
- TRANSPORT=http # HTTP transport (default)
# - TRANSPORT=stdio # Alternative: stdio transport
- HOST=0.0.0.0 # Required for Docker HTTP
- LOG_LEVEL=info漏洞模式
控制每个容器的漏洞行为:
# Vulnerable server (default)
environment:
- VULNERABILITY_MODE=high # All vulnerabilities active
# Hardened server (default)
environment:
- VULNERABILITY_MODE=safe # All vulnerabilities disabled可用模式:
high:所有漏洞都处于活动状态(易受攻击服务器的默认设置)medium:仅中低风险处于活动状态low:仅低风险活动safe:禁用所有漏洞(默认为强化服务器)
日志
容器日志:
- 脆弱的:
./logs/vulnerable-testbed.log - 硬化:
./logs-hardened/vulnerable-testbed.log
监控触发的漏洞:
# Vulnerable server
tail -f logs/vulnerable-testbed.log | grep "VULNERABILITY TRIGGERED"
# Hardened server
tail -f logs-hardened/vulnerable-testbed.log | grep "VULNERABILITY TRIGGERED"
# Both servers via Docker logs
docker logs -f mcp-vulnerable-testbed 2>&1 | grep "VULNERABILITY TRIGGERED"
docker logs -f mcp-hardened-testbed 2>&1 | grep "VULNERABILITY TRIGGERED"安全措施
- 隔离Docker容器 资源有限
- 没有真实凭证 -所有的秘密都是假的
- 仅限本地主机 -未暴露于外部网络
- 明确警告 容器启动
- 命令执行受限 -危险命令被截断
测试检查员
# 1. Start the testbed
docker-compose up -d
# 2. Connect MCP Inspector
cd ~/inspector
npm run dev
# 3. Configure connection to vulnerable-testbed
# 4. Run security assessment
# 5. Review results:
# - Verify 31 vulnerabilities detected (22 HIGH + 9 MEDIUM)
# - Verify 9 safe tools not flagged (0% false positives)
# - Test Challenge #1: Annotation deception (5 tools)
# - Test Challenge #2: Rug pull after 11+ calls
# 6. Document findings持续集成
此存储库包括 AI驱动的代码审查 通过GitHub操作(.github/workflows/code-review.yml):
- 使用Claude Sonnet 4自动审核所有拉取请求
- 检测特定于MCP测试台模式的安全漏洞
- 将结果作为PR评论发布,严重程度为P0-P3
- 需要
ANTHROPIC_API_KEY存储库中的机密
清理
# Stop and remove containers
docker-compose down
# Remove images
docker rmi mcp-vulnerable-testbed-vulnerable-testbed
docker rmi mcp-vulnerable-testbed-hardened-testbed
# Clean up logs
rm -rf logs/ logs-hardened/安全说明
此服务器旨在提供帮助 改进 通过提供真实的测试用例来提供安全工具。它只能在受控、隔离的测试环境中运行。所有漏洞都是故意的,并有记录。
许可证
仅用于测试目的-不用于生产用途
联系
专为测试Anthropic的MCP检查员评估模块而构建
