MCP不安全凭据存储漏洞:从配置文件到聊天日志的泄露风险

本文深入分析了MCP环境中长期API密钥以明文形式存储在本地文件系统中的安全风险,包括不安全的配置文件权限和聊天日志泄露,并以Figma为例说明双重风险,最后提出更安全的凭据处理建议。

窃取MCP服务器存储的长期凭据

这是我们关于模型上下文协议(MCP)安全系列的第四篇文章,探讨了一个不同于之前讨论的协议级弱点的漏洞:许多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上,我们发现该文件具有全局可读权限:

1
2
$ ls -la ~/Library/Application\ Support/Claude\ Desktop/claude_desktop_config.json
-rw-r--r--  1 user  staff  2048 Apr 12 10:45 claude_desktop_config.json

此-rw-r–r–权限集允许系统上的任何进程或用户使用标准文件访问操作读取文件内容,包括其中存储的任何明文API密钥。无需特殊权限。

途径2:通过聊天日志泄露的凭据

另一种常见模式涉及用户直接将凭据输入AI聊天界面,依赖模型将其传递给适当的MCP服务器。Supercorp的Superargs包装器明确为期望在参数或环境变量中配置信息的服务器提供了便利。

这种方法带来两个不同的风险。首先,正如我们上一篇文章中详细说明的,恶意MCP服务器可以直接从对话历史中窃取凭据。其次,主机AI应用程序本身通常将整个对话历史(包括任何嵌入的凭据)记录到本地文件中,用于调试或历史功能。

在我们的测试中,我们发现像Cursor和Windsurf这样的应用程序以全局可读权限存储这些对话日志:

1
2
$ ls -la ~/.cursor/logs/conversations/
-rw-r--r--  1 user  staff  15482 Apr 15 12:23 conversation_20240415.json

与配置文件类似,这些权限不安全的日志为本地攻击者或恶意软件提供了另一个易于访问的明文凭据来源。

风险叠加:Figma示例

一些实现同时通过两种途径暴露凭据。社区提供的Figma MCP服务器允许用户通过工具调用设置其API令牌。然而,服务器随后使用Node.js的fs.writeFileSync函数将此凭据保存到用户主目录中的配置文件中。默认情况下,此函数创建具有0666权限(-rw-rw-rw-)的文件,使存储的Figma令牌全局可读,并且根据用户的umask设置,也可能全局可写。

写入配置文件使攻击类似于会话固定,受害者无意中登录到攻击者控制的帐户。对于像Figma这样的设计工具,受害者可能会在帐户中保存商业秘密或其他私人信息,立即将其披露给攻击者。如果下游服务是银行或加密货币交易所,用户可能会被欺骗将资产直接存入或转移到攻击者的帐户中。

更安全凭据处理的步骤

用更好的身份验证方法替换这些泄漏的凭据存储不会一夜之间发生,但多个利益相关者可以帮助推动生态系统向前发展。所有具有面向公众API的Web服务都应添加OAuth支持,包括具有狭窄范围的短期令牌。除了帮助客户端最小化凭据被盗的风险外,OAuth还提供了最佳的用户体验,因为通过浏览器登录通常比摆弄配置文件简单得多。

即使第三方服务不支持OAuth,MCP服务器开发者也可以选择更安全的方法在本地存储凭据。现代桌面操作系统具有专门构建的API,用于具有自动加密的凭据存储,例如Windows的凭据管理API和macOS的钥匙串API。这些API远比使用明文文件存储更可取,即使相关文件仅由其所有者可读。

至于用户,他们能做的最好的事情是仔细审查他们在环境中安装的软件,并仅使用使用OAuth或使用安全操作系统API存储凭据的MCP服务器。或者,仅作为最后的权宜之计,用户可以手动收紧其AI软件留下的任何敏感文件的权限。

当技术领域像AI和MCP这样快速发展时,开发者很容易专注于快速交付而将安全作为事后考虑。但随着MCP成为越来越强大的AI系统的基础,我们需要扭转这一趋势,从一开始就将安全凭据处理作为首要任务。

查看我们关于MCP安全系列的其他文章:

  • 插队:MCP服务器如何在您使用它们之前攻击您
  • MCP服务器如何窃取您的对话历史
  • 使用MCP中的ANSI终端代码欺骗用户

感谢我们的AI/ML安全团队调查此攻击技术的工作!

如果您喜欢这篇文章,请分享: Twitter LinkedIn GitHub Mastodon Hacker News

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计