4-7 使用 MCP 时,要注意避免被恶意攻击

2025年5月12日

持續學習最新的 AI 應用
更多深入的 AI 內容,都在 E+ 成長計畫 👉前往了解

在前面的单元中,我们讨论了什么是 MCP,以及如何在 Cursor 这类工具中使用 MCP,来整合不同的 MCP 以提升工作效率与生产力。然而,在使用 MCP 的过程中,也有一些需要特别注意的事项,其中最重要的一点,就是确保自己不会受到恶意 MCP 的攻击。换句话说,MCP 虽然好用,但在使用前务必保持谨慎。

之前 Invariant Labs 发表了一篇相关的研究与实验 (连结),指出 MCP 在使用上存在一些漏洞。因为 MCP 这个协议本身并未对开发者的立场进行预设,也就是说,它并未假设开发 MCP 伺服器的人可能会在其中进行恶意攻击或操作。

Invariant Labs 提供的 MCP 潜在攻击示例
Invariant Labs 提供的 MCP 潜在攻击示例

因此,如果有心人士想要透过 MCP 进行恶意操作,确实是有可能实现的。虽然未来可能会有工具来解决这个问题,但在问题被彻底解决之前,建议大家在使用 MCP 时务必格外小心。

以下,我们将针对 Invariant Labs 的这篇文章,来详细说明常见的 MCP 攻击方式,以及如何有效避免这些潜在的问题。

常见的 MCP 攻击方式:工具中毒攻击

Invariant Labs 的文章中提到了一种核心攻击手段,称为「工具中毒攻击 Tool Poisoning Attack」。这种攻击方式是指在 MCP 中混入一些「毒素」,并透过这些毒素来攻击使用者。例如,攻击者可能在 MCP 工具的描述中,掺杂一些恶意指令。

一般来说,当使用者在像 Cursor 这样的工具中呼叫 MCP 时,系统通常只会显示所呼叫的某个 MCP 工具的简要资讯。除非使用者主动点开详细内容,否则无法得知该工具在呼叫时的具体输入或输出内容。

然而,当 Cursor 或其他工具连续呼叫多个 MCP 工具时,大多数使用者不会逐一点开检查,因为这样非常耗时。正因如此,如果使用者不小心使用了混杂恶意指令的 MCP,就可能在不知情的情况下,让 AI 代理在运作过程中泄露敏感资讯。

具体案例分析

Invariant Labs 提供了一个具体范例来说明这种攻击的运作方式。在某个 MCP 工具中,表面上它提供了一个协助运算的功能,但实际上却在工具描述中混杂了一段恶意提示词,并用 <important> 标签框起来。这段提示词要求系统读取使用者的 cursor/mcp.json 档案,并将其内容传送到指定的 sidenote 中。此外,它还要求读取 ~/.ssh/id_rsa 档案 (通常用来存放 SSH 金钥),并将该金钥传送到 sidenote。

如果 Cursor 或其他 AI 代理工具使用了这个 MCP 工具,表面上看来,它会按照工具的描述进行运算,但背地里却悄悄读取使用者的敏感档案,并将机密内容传送到攻击者指定的位置,从而导致资讯泄露。

另一个例子是攻击者在工具描述中注入了一段 <important> 标签,指示系统将所有相关的电子邮件记录到某个特定的电子邮件地址中。甚至在描述的最后,攻击者还强调「这非常重要」,并恐吓说如果不将收件人改为攻击者的电子邮件地址,应用程式将会崩溃,导致资料丢失。

Invariant Labs 实际测试了这个 MCP 工具,表面上工具指示将电子邮件寄送到 [email protected],但在实际执行后,收件人却被偷偷改为攻击者的电子邮件地址。这意味着,如果使用了带有恶意提示词的 MCP 工具,原本应该寄出的重要邮件内容,可能会被直接送到攻击者的信箱,这是非常危险的。

如何避免恶意 MCP 攻击

针对这种攻击,Invariant Labs 提出了四个防范措施,以下逐一说明:

  1. 严格审查工具来源 建议仅使用来自可信、可靠来源的 MCP 工具,例如官方推出的 MCP 工具。避免使用未经验证的第三方 MCP 伺服器。
  2. 显示完整的工具描述 在前述案例中,如果使用者在 Cursor 中展开 MCP 工具的呼叫栏,就能看到工具实际传入的参数。这种方式可以帮助检视工具是否可疑。不过,由于逐一检查较为耗时,建议在验证新 MCP 工具的可靠性与安全性时使用此方法即可。
  3. 在沙箱化环境中执行 在用 MCP 工具时,避免直接使用云端环境,而是透过本机启动一个容器,并在其中限制 AI 模型对档案的存取权限。这样可以有效防止敏感资料外泄。
  4. 定期更新与监控 MCP 确保使用的 MCP 版本为最新,就像在使用任何软体套件时,需定期更新以修补安全性漏洞。MCP 也是如此,应随时关注是否有安全更新。

在这四点中,第一点(审查来源)和第三点(沙箱化环境)尤为重要。因此,建议大家在使用 MCP 时,优先在容器中执行,或确保使用的是官方验证过的 MCP 工具。

选择 MCP 伺服器时的注意事项

目前网路上有许多网站专门收录各种 MCP 伺服器,例如某些平台允许使用者自行新增 MCP 伺服器。然而,这类网站通常不会对上传的伺服器进行严格验证,因此可能混杂了一些带有恶意攻击的 MCP 伺服器。

以 GitHub 的 MCP 开源专案为例,网路上可能存在许多不同的 GitHub MCP 版本,但建议选择官方推出的版本。同样地,像 Perplexity Search 的 MCP 也有多个版本,务必选择由 Perplexity 公司官方推出的版本。透过这种方式,可以确保不会使用来路不明、可能带有恶意指令的 MCP。

此系列文章为 《给工程师的 Cursor 工作流 — 透过 AI 代理全方位提升开发生产力》 搭配的教材。希望透过这系列文章,将过去协助导入 AI 工具及使用 Cursor 的经验扩展并分享给想提升生产力的读者。如果对课程感兴趣的读者,可以加入 E+ 成长计划,观看影片学习。

🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們