Exposed by Design: A Dynamic Security Assessment of Internet-Facing MCP Servers at Scale
本文通过开发 Corvus 框架并对数百个生产实例进行分析,展示了首次针对面向互联网的 Model Context Protocol (MCP) 服务器的大规模动态安全性评估,揭示了包括缺失身份验证和 Shell 执行暴露在内的广泛漏洞。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
技术摘要:设计使然的暴露 (Exposed by Design)
问题陈述
由 Anthropic 在 2024 年 11 月发布的模型上下文协议(Model Context Protocol, MCP)已迅速成为智能体 AI 应用的事实标准集成层,将大语言模型(LLM)连接到外部工具和数据源。尽管其采用率已激增至超过 21,000 个公开可达的服务实例,但这些部署的安全态势仍基本处于未知状态。
现有的安全研究主要分为理论威胁建模或对注册表条目及源代码的静态分析。这些方法无法捕捉到实时、面向互联网的服务在运行时的安全态势。本文指出一个关键差距:缺乏关于已部署 MCP 服务中漏洞普遍性的经验数据,特别是那些由于该协议独特的“自然语言工具描述与代码执行结构性耦合”的设计所导致的漏洞。作者认为,将服务暴露为 MCP 端点的极低门槛,导致了当前的部署景观运行在低于传统互联网服务的安全基准之下,其特征是缺乏身份验证、暴露 Shell 执行能力以及快速且短暂的部署周期。
研究方法
本研究采用了一种结合被动发现与主动动态行为测试的两阶段方法论。
1. 被动发现 (Petrel)
作者开发了 Petrel,这是一个聚合了 11 个异构数据源的发现流水线,旨在最大限度地覆盖 MCP 生态系统:
- 证书透明度日志 (Certificate Transparency Logs): 通过
crt.sh查找包含 MCP 指示性子字符串的 SSL/TLS 证书。 - 开发者平台: GitHub(主题搜索、文件名匹配)、HuggingFace Spaces 以及 npm/PyPI 注册表。
- 专门注册表: Smithery、glama.ai 和 pulsemcp.com。
- 互联网扫描器: Censys、FOFA 和 Shodan。
候选实例需经过主动 HTTP 指纹识别,以区分真实的 MCP 服务与误报。Petrel 会探测当前的流式 HTTP 传输方式(通过带有 JSON-RPC initialize 请求的 POST)以及遗留的 SSE 传输方式。只有响应有效协议握手的服务器才会被确认为测试对象。
2. 动态安全测试 (Corvus)
作者引入了 Corvus,这是一个旨在进行动态行为评估的开源框架。Corvus 使确认后的服务器接受 34 个测试模块(13 个静态,21 个动态)的测试,涵盖了基于本研究发现而提出的新漏洞分类法——MCP 安全 Top 10 (MST-10)。
- 执行模型: Corvus 利用多路复用的
StdioTransport读取循环来流水线化 JSON-RPC 请求,从而实现跨并行组的高吞吐量测试。 - 测试策略:
- 工具投毒 (Tool Poisoning): 注入影子工具定义,以测试动态变异(毯 rug-pull 攻击)。
- 注入 (Injection): 提交精心构造的负载,以测试 SQL 注入、命令注入以及通过工具输出进行的提示词注入 (Prompt Injection)。
- SSRF 与 URI 操纵: 测试资源 URI 和分页游标是否存在路径遍历以及针对云元数据服务(如 AWS IMDS)的服务端请求伪造 (SSRF)。
- 模式绕过 (Schema Bypass): 对 JSON-RPC 消息进行模糊测试 (Fuzzing),以识别解析歧义。
- 输出: 结果按置信度(0–100)评分,并以 SARIF 2.1.0 格式输出。高置信度发现将经过人工分拣,并通过 GitHub 安全公告 (GHSA) 进行报告,遵循 90 天的协调披露禁令。
核心贡献
本文的主要贡献有五点:
- 首次动态行为评估: 进行了首次大规模、动态化的面向互联网的 MCP 服务安全审计,确认了 640 个唯一的生产部署,并审计了其中的 414 个。
- Corvus 框架: 发布了一个实现了 34 个测试模块(涵盖所有 10 个 MST-10 类别)的开源工具,支持 Streamable HTTP 和 SSE 两种传输方式。
- 多源发现方法论: 证明了没有任何单一数据源能充分捕获 MCP 群体,必须使用跨越 11 个来源的流水线才能实现全面覆盖。
- 刻画部署变更 (Churn): 提供了 41.6% 的服务器在 72 小时内消失的经验证据,表明其部署模式是由瞬态实验而非稳定的运维安全驱动的。
- 负责任的披露流程: 识别并负责任地披露了 68 个漏洞,包括 SQL 注入、SSRF 和提示词模板注入,在撰写本文时,已有 19 个已公开,49 个处于禁令期内。
研究结果
在 2026 年 7 月的四次测量运行中,研究得出了以下发现:
- 身份验证缺陷: 91.8% 的经动态审计的服务器(380/414)缺乏 OAuth 身份验证。大多数服务器要么不设身份验证,要么使用静态、可预测的 Bearer Token。
- 未授权的 Shell 执行: 在确认的服务池中,共有 687 个工具实例暴露了 Shell 执行能力(例如
bash_execute、run_command),且没有任何访问控制,允许任何网络对手进行远程代码执行。 - 漏洞普遍性: 研究识别出 68 个可报告的漏洞。关键发现包括:
- SQL 注入: 通过语料库搜索工具中的响应大小差异得到证实。
- SSRF: 通过针对 AWS 实例元数据服务时的计时攻击(11.9s 延迟 vs 0.3s 基准)得到证实。
- 提示词模板注入: 通过注入控制序列以覆盖 AI 助手的系统指令得到证实。
- 路径遍历: 通过分页原语中的游标操纵实现。
- 生态系统变更 (Churn): 在一次测量运行中确认的服务器中,有 41.6% 在 72 小时后无法访问。这种变更率表明,许多服务器是 CI/CD 流水线或开发者实验的瞬态产物,这增加了长期监控和补丁验证的难度。
重要性与主张
本文声称提供了 MCP 生态系统安全态势的第一个经验基准。其重要性在于将对 MCP 安全的理解从理论威胁建模转向了观察到的现实。
作者认为,这些安全风险是结构性的,而非偶然的。该协议最初是为本地 stdio 传输设计的,在这种模式下,操作系统进程隔离提供了安全性。随后增加的 HTTP 传输方式,由于缺乏相应的安全默认设置(如强制 OAuth),导致产生了一个“阻力最小路径”,从而默认生成了未经身份验证且面向互联网的服务。
研究结论认为,目前的 MCP 生态系统运行在低于常规互联网服务的最低运维安全基准之下。未授权的 Shell 执行、身份验证层的缺失以及快速且短暂的部署周期相结合,创造了一个攻击面,在此攻击面上,漏洞不仅普遍存在,而且极易被利用。作者断言,其工作证明了 MCP 安全是一个活跃的、可被利用的攻击面,需要 SDK 开发人员、平台提供商和注册表运营商立即予以关注,以强化安全默认设置并改进披露机制。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。