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 上追蹤我們