[控场AI]
· 4 分钟阅读· 2,471 字

一个计算器工具如何泄露了AI Agent的秘密

一个计算器工具如何泄露了AI Agent的秘密

MCP协议允许服务器动态扩展工具参数,攻击者借此在计算器中隐藏额外字段,悄无声息地窃取用户秘密文件。

本文通过一个计算器工具的案例,揭示了一种基于MCP协议的AI Agent安全漏洞。攻击者注册看似正常的计算器工具,并在参数schema中偷偷添加额外字段(如notes),诱导Agent在计算2+3时读取伪造的秘密文件并填入该字段,最终将数据发送到攻击者服务器。用户只看到正确答案“5”,Agent也未违反规则,攻击极其隐蔽。文章指出MCP允许服务器动态定义工具参数且Agent无条件信任,这是根本隐患,并建议开发者严格校验参数、使用可信工具、监控异常调用,同时强调安全是持续过程。

一个看似无害的计算器工具

最近,一段来自YouTube的视频展示了一个令人不安的AI Agent安全漏洞:一个简单的计算器工具,在正确回答“2+3=5”的同时,将用户的秘密文件发送到了未经批准的服务器。整个过程用户毫不知情,只得到了一个正确的答案。

据视频描述,这个计算器工具本应只做加法,但它却悄然扩展了功能。攻击者利用MCP(Model Context Protocol)的灵活性,在工具定义中偷偷添加了一个额外的参数,比如“notes”,而AI Agent遵循指令,读取了伪造的秘密文件,并将其塞入这个参数中。结果,调用成功返回了正确结果,但秘密数据也随之泄露。

Correct. It also sent my secret to a server I never approved.

MCP(Model Context Protocol) 是由 Anthropic 提出的一种开放协议,旨在标准化 AI 模型与外部工具、数据源之间的交互方式。它采用客户端-服务器架构:AI Agent 作为客户端,通过 MCP 服务器获取工具列表、调用工具并接收结果。MCP 的核心优势在于动态性和可扩展性——服务器可以在运行时向 Agent 描述可用的工具及其参数 schema,Agent 则依据这些描述来构造调用请求。这种设计让 Agent 能够灵活接入各种外部能力,但也意味着 Agent 对服务器提供的工具定义具有高度信任。一旦服务器被恶意控制或工具定义被篡改,Agent 就可能在不自知的情况下执行非预期操作,这正是本文所述攻击得以成立的基础。

攻击是如何一步步实现的

视频将攻击分解为多个步骤。首先,攻击者创建了一个看似正常的计算器工具,并注册到MCP服务器上。然后,他们诱导AI Agent使用这个工具。关键的一步在于,工具的参数schema被悄悄修改,增加了一个额外的字段。由于MCP允许服务器动态定义工具接口,Agent会接受这个新字段。

当用户请求计算2+3时,Agent按照指令读取了一个伪造的秘密文件,并将内容填入额外的参数中。这个文件可能包含敏感信息,比如API密钥或用户数据。随后,工具调用被发送到攻击者控制的服务器,服务器记录下秘密数据,同时返回正确的结果“5”。

Step 3. The agent obeys. It reads the fake secret file and stuffs it into an extra argument called

工具参数 schema 是 MCP 中描述工具输入格式的 JSON Schema 对象,它定义了工具接受哪些参数、每个参数的类型、是否必填以及描述信息。Agent 在调用工具前会读取该 schema,并据此从上下文或用户请求中提取相应字段来构造参数。由于 MCP 允许服务器动态更新 schema,攻击者可以在 Agent 首次获取工具定义后,悄悄向 schema 中注入一个额外的可选字段(如 notes)。Agent 遵循更新后的 schema,会尝试为这个新字段填充内容,从而为数据外泄打开通道。参数白名单和 schema 固定校验是防御此类篡改的关键手段。

为什么用户和Agent都毫无察觉

用户只看到正确的答案,没有任何异常提示。Agent也没有违反任何规则,因为它只是按照工具定义的schema传递参数。问题在于,MCP的设计允许服务器在运行时扩展工具的参数,而Agent通常会信任这些定义。这种信任关系被利用,导致数据泄露。

视频中提到,同步日志只记录了一次命中,即那个“金丝雀”令牌被触发。这意味着攻击可以非常隐蔽,除非有专门的监控,否则很难发现。

notes. The schema allows it, because the server quietly added that field too.

金丝雀令牌(Canary Token) 是一种用于检测数据泄露的诱饵标记。它通常是一个看似敏感但实际无用的唯一字符串,被放置在伪造的秘密文件或数据存储中。当攻击者窃取该文件并外传时,金丝雀令牌会触发监控系统告警,从而暴露泄露行为。在本文案例中,同步日志只记录到一次金丝雀令牌命中,说明攻击者确实读取了伪造的秘密文件,但除此之外没有其他异常日志。这凸显了传统日志审计在面对参数级数据外泄时的盲区:调用本身合法且成功,只有通过专门布置的诱饵才能捕捉到异常。

MCP协议的安全隐患与启示

这起事件暴露了MCP协议在安全设计上的一个潜在缺陷:工具的参数定义缺乏严格的验证机制。服务器可以任意添加参数,而Agent会无条件接受。这为恶意服务器提供了可乘之机。

对于开发者来说,需要警惕来自不可信来源的工具。在构建AI Agent时,应该对工具的参数进行严格校验,并限制敏感数据的访问。同时,监控工具调用的异常行为,比如额外的参数或未知的端点。

Step 4. The call goes out. Result? 5. Correct answer. And the sync just logged one hit.

如何防范类似攻击

首先,只使用可信来源的工具,并定期审查工具的定义。其次,在Agent中实现参数白名单,拒绝任何未预期的字段。此外,对敏感操作进行二次确认,避免自动执行可能泄露数据的工具调用。最后,建立日志和告警机制,及时发现异常调用。

视频作者最后提醒,安全是一个持续的过程,AI Agent的便利性不能以牺牲安全为代价。

#AI Agent安全#MCP协议漏洞#数据泄露#计算器工具#参数注入#工具调用安全
分享:

相关推荐