窃取MCP服务器存储的长期凭据
MCP(Model Context Protocol)安全系列第四篇文章探讨了一个与之前讨论的协议级弱点不同的漏洞:许多MCP环境将第三方服务的长期API密钥以明文形式存储在本地文件系统上,通常具有不安全的全局可读权限。利用此漏洞可能影响连接到LLM应用的每个系统;MCP环境越强大,不安全存储凭据的风险就越大。
这种做法在MCP生态系统中广泛存在。我们在多个MCP工具中观察到这一点,从连接到GitLab、Postgres和Google Maps的官方服务器,到Figma连接器和Superargs包装器等第三方工具。虽然这些只是示例,但它们说明了一个令人担忧的趋势,使攻击者只需一个文件披露漏洞即可窃取您的API密钥并危害第三方服务中的全部数据。无需复杂的漏洞利用,攻击者可以通过多种不同方式从您的系统中读取API密钥:
- 本地恶意软件:旨在窃取信息的用户级恶意软件可以扫描可预测的文件路径(例如,
/Library/Application Support/、/.config/或应用程序日志)并外泄发现的凭据。 - 利用其他漏洞:同一系统上无关软件中的任意文件读取漏洞成为窃取这些明文秘密的直接途径。
- 多用户系统:在共享工作站或服务器上,具有文件系统访问权限的其他用户可以读取存储在全局可读文件中的凭据。
- 云备份:自动备份工具可能会将服务器配置文件同步到云存储,如果备份存储系统配置错误,则将其暴露给提供商甚至其他用户。
本文剖析了MCP软件处理凭据的不安全方式以及它们为攻击者提供的访问数据的路径。我们还讨论了MCP服务器及其连接的第三方服务的开发者可以应用的改进安全实践,以应对这些风险。
途径1:不安全的配置文件
大多数MCP服务器通过命令行参数或环境变量获取凭据,这些参数通常来自主机AI应用程序管理的配置文件。我们在Google Maps、Postgres和GitLab的官方MCP服务器中观察到了这种模式。
当主机应用程序不安全地存储此配置时,安全风险就会出现。例如,Claude Desktop在用户的主目录中创建一个claude_desktop_config.json文件。在macOS上,我们发现该文件具有全局可读权限:
|
|
此-rw-r–r–权限集允许系统上的任何进程或用户使用标准文件访问操作读取文件内容,包括存储在其中的任何明文API密钥。无需特殊权限。
途径2:通过聊天日志泄露的凭据
另一种常见模式涉及用户直接将凭据输入AI聊天界面,依靠模型将它们传递给适当的MCP服务器。Supercorp的Superargs包装器明确为期望在参数或环境变量中配置信息的服务器提供了便利。
这种方法存在两个不同的风险。首先,正如我们上一篇文章中详细说明的,恶意MCP服务器可以直接从对话历史记录中窃取凭据。其次,主机AI应用程序本身通常将整个对话历史记录(包括任何嵌入的凭据)记录到本地文件中,用于调试或历史功能。
在我们的测试过程中,我们发现像Cursor和Windsurf这样的应用程序以全局可读权限存储这些对话日志:
|
|
与配置文件类似,这些权限不安全的日志为本地攻击者或恶意软件提供了另一个易于访问的明文凭据来源。
风险叠加:Figma示例
某些实现同时通过两种途径暴露凭据。社区提供的Figma MCP服务器允许用户通过工具调用设置其API令牌。但是,服务器随后使用Node.js的fs.writeFileSync函数将此凭据保存到用户主目录中的配置文件中。默认情况下,此函数创建具有0666权限(-rw-rw-rw-)的文件,使存储的Figma令牌全局可读,并且根据用户的umask设置,也可能全局可写。
写入配置文件 enables attacks similar to session fixation,受害者会在不知情的情况下登录到攻击者控制的帐户。在设计工具如Figma的情况下,受害者可能会将商业秘密或其他私人信息保存在帐户中,立即将其披露给攻击者。如果下游服务是银行或加密货币交易所,用户可能会被诱骗将资产直接存入或转移到攻击者的帐户中。
更安全凭据处理的步骤
用更好的身份验证方法替换这些易泄露的凭据存储不会一夜之间发生,但多个利益相关者可以帮助推动生态系统向前发展。所有具有面向公众API的Web服务都应添加OAuth支持,包括具有窄范围的短寿命令牌。除了帮助客户端最小化凭据盗窃风险外,OAuth还提供了最佳的用户体验,因为通过浏览器登录通常比摆弄配置文件简单得多。
即使第三方服务不支持OAuth,MCP服务器开发者也可以选择更安全的方法在本地存储凭据。现代桌面操作系统具有专门构建的API,用于具有自动加密的凭据存储,例如Windows的凭据管理API和macOS的钥匙串API。这些API远优于使用明文文件存储,即使相关文件仅由其所有者可读。
至于用户,他们能做的最好的事情是仔细审查他们在环境中安装的软件,并仅使用使用OAuth或使用安全操作系统API存储凭据的MCP服务器。或者,仅作为最后的权宜之计,用户可以手动收紧其AI软件留下的任何敏感文件的权限。
当一个技术领域像AI和MCP这样快速发展时,开发者很容易专注于快速交付而将安全作为事后考虑。但随着MCP成为越来越强大的AI系统的基础,我们需要扭转这一趋势,从一开始就将安全凭据处理作为首要任务。