作者: Evan Harris
风险:
受影响组件: thirdweb MCP Server

引言

作为我们对 Model Context Protocol (MCP) 服务器持续开展的安全研究的一部分,我们在 thirdweb MCP Server 中发现了一处重大安全漏洞,它通过未经身份验证的网络访问,使未授权的加密货币交易成为可能。

漏洞概述

thirdweb MCP Server 在使用 --transport sse 标志启动时,会暴露一个未经身份验证的 Server-Sent Events (SSE) 接口,该接口默认绑定到 0.0.0.0:8000。这种配置允许远程攻击者从受害者的钱包发起未授权的加密货币交易。

技术细节

问题所在

当配置为 SSE 传输时,该服务器:

  • 绑定到 0.0.0.0:8000,使其可从网络上的任意主机访问
  • 未对 /sse 端点提供任何身份验证机制
  • 信任任意已连接的客户端执行特权操作,包括加密货币交易

攻击场景

攻击者可以:

  1. 发现暴露的端点,地址为 http://victim_ip:8000/sse
  2. 使用标准 MCP 工具连接,例如 MCP Inspector
  3. 使用 send_transaction 工具执行未授权交易
  4. 将加密货币从受害者的钱包转移到自己的地址

概念验证

存在漏洞的配置

thirdweb-mcp \
  --transport sse \
  --secret-key=sk_... \
  --engine-url=railway_hosted_engine_url \
  --engine-auth-jwt=eyJ... \
  --engine-backend-wallet-address=0xVictimWallet

未授权交易的执行

借助 MCP Inspector,攻击者可以连接到 http://victim_ip:8000/sse,并使用适当的参数执行 send_transaction 工具,将加密货币从受害者的钱包转移到攻击者控制的地址。

[技术细节在补丁发布前予以隐去]

这会导致在没有任何身份验证或用户同意的情况下,未授权地从受害者的钱包转移加密货币。

影响评估

该漏洞可导致:

  • 在未经用户同意的情况下直接从受害者钱包窃取加密货币
  • 网络范围内的暴露,影响咖啡店、办公室、公共网络以及任何被入侵的私有网络

风险因素

  • 网络暴露:默认绑定到 0.0.0.0 使该服务在整个网络范围内可访问
  • 无身份验证:任意客户端均可连接并执行特权操作
  • 高价值目标:可直接访问加密货币交易
  • 无声运行:攻击可能在用户不知情的情况下发生

建议的缓解措施

面向用户(立即)

  • 避免在共享网络环境中使用 --transport sse
  • 通过修改默认配置使用 localhost 绑定
  • 实施网络层面的限制(防火墙、VPN)

面向开发者(长期)

  • 将默认绑定0.0.0.0 改为 127.0.0.1
  • 为所有传输接口实施身份验证
  • 在文档和 CLI 输出中添加安全警告
  • 考虑针对具体传输的安全模型

该漏洞已通过负责任的披露实践报告给 thirdweb 团队。我们建议用户在补丁可用后立即更新到最新版本。

更广泛的影响

这一发现凸显了 MCP 服务器需要重视的若干安全考量:

  1. 对于任何可通过网络访问的 MCP 服务,身份验证机制都是必不可少的
  2. 网络绑定的默认值应将安全置于便利之上
  3. 应使用传输层安全来缓解基于 HTTP 的攻击
  4. 安全文档应阐明部署风险

披露时间线

  • 2025-05-23:发现漏洞并报告给 thirdweb 团队
  • 2025-07-18:发送跟进邮件,请求确认收到披露报告
  • 2025-09-02:最终确认,报告将被公开
  • 2025-09-03:公开披露并发布安全公告

结论

thirdweb MCP Server 中的未授权交易能力表明,在集成区块链与 AI 的开发工具中,安全的默认设置至关重要。

随着 MCP 采用度的提升,实施稳健的安全措施对于保护用户的数字资产以及维护生态系统的信任变得更加重要。

部署 MCP 服务器的组织和个人应进行全面的安全审查,实施纵深防御策略,并对网络暴露风险保持警觉。

参考资料