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+ 成長計畫,觀看影片學習。