4-7 使用 MCP 时,要注意避免被恶意攻击
2025年5月12日
在前面的单元中,我们讨论了什么是 MCP,以及如何在 Cursor 这类工具中使用 MCP,来整合不同的 MCP 以提升工作效率与生产力。然而,在使用 MCP 的过程中,也有一些需要特别注意的事项,其中最重要的一点,就是确保自己不会受到恶意 MCP 的攻击。换句话说,MCP 虽然好用,但在使用前务必保持谨慎。
之前 Invariant Labs 发表了一篇相关的研究与实验 (连结),指出 MCP 在使用上存在一些漏洞。因为 MCP 这个协议本身并未对开发者的立场进行预设,也就是说,它并未假设开发 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 提出了四个防范措施,以下逐一说明:
- 严格审查工具来源 建议仅使用来自可信、可靠来源的 MCP 工具,例如官方推出的 MCP 工具。避免使用未经验证的第三方 MCP 伺服器。
- 显示完整的工具描述 在前述案例中,如果使用者在 Cursor 中展开 MCP 工具的呼叫栏,就能看到工具实际传入的参数。这种方式可以帮助检视工具是否可疑。不过,由于逐一检查较为耗时,建议在验证新 MCP 工具的可靠性与安全性时使用此方法即可。
- 在沙箱化环境中执行 在用 MCP 工具时,避免直接使用云端环境,而是透过本机启动一个容器,并在其中限制 AI 模型对档案的存取权限。这样可以有效防止敏感资料外泄。
- 定期更新与监控 MCP 确保使用的 MCP 版本为最新,就像在使用任何软体套件时,需定期更新以修补安全性漏洞。MCP 也是如此,应随时关注是否有安全更新。
在这四点中,第一点(审查来源)和第三点(沙箱化环境)尤为重要。因此,建议大家在使用 MCP 时,优先在容器中执行,或确保使用的是官方验证过的 MCP 工具。
选择 MCP 伺服器时的注意事项
目前网路上有许多网站专门收录各种 MCP 伺服器,例如某些平台允许使用者自行新增 MCP 伺服器。然而,这类网站通常不会对上传的伺服器进行严格验证,因此可能混杂了一些带有恶意攻击的 MCP 伺服器。
以 GitHub 的 MCP 开源专案为例,网路上可能存在许多不同的 GitHub MCP 版本,但建议选择官方推出的版本。同样地,像 Perplexity Search 的 MCP 也有多个版本,务必选择由 Perplexity 公司官方推出的版本。透过这种方式,可以确保不会使用来路不明、可能带有恶意指令的 MCP。
此系列文章为 《给工程师的 Cursor 工作流 — 透过 AI 代理全方位提升开发生产力》 搭配的教材。希望透过这系列文章,将过去协助导入 AI 工具及使用 Cursor 的经验扩展并分享给想提升生产力的读者。如果对课程感兴趣的读者,可以加入 E+ 成长计划,观看影片学习。