架構概觀
示範目標 MCP:Toolbox
Smithery.ai 作為 MCP 外掛程式的重要中心,吸引了大量的 MCP 清單和活躍使用者。其中,@smithery/toolbox 是 smithery.ai 官方提供的 MCP 管理工具,也是本次安全評估的重點。
選擇 Toolbox 作為測試目標,主要基於以下幾個關鍵原因:
- 它擁有龐大的使用者群,使其成為 MCP 生態系統中的代表性樣本。
- 它支援自動安裝額外的外掛程式,增強客戶端的功能(例如 Claude Desktop)。
- 它包含敏感的配置資訊,例如 API 金鑰,這有助於展示潛在的漏洞利用。
示範所用的惡意 MCP:MasterMCP
MasterMCP 由 SlowMist 專門為安全測試目的而開發,是一個基於模組化架構的模擬惡意 MCP 工具。它的主要組件包括:
- 本機網站服務模擬:http://127.0.0.1:1024
為了創建逼真的攻擊場景,MasterMCP 整合了一個本機網站服務模擬模組。利用 FastAPI 框架,該模組可以快速建立一個簡單的 HTTP 伺服器,模擬常見的網路環境。這些頁面可能看起來無害,展示麵包店的資訊或返回標準的 JSON 資料,但它們在其原始碼或 API 回應中隱藏了精心製作的惡意酬載。
這種方法可以全面展示資訊污染和指令隱藏技術,在安全、受控的本機環境中。它突顯了潛在的風險,這些風險潛伏在看似普通的網頁中,可能觸發大型語言模型的異常行為。
- 本地化的外掛程式 MCP 架構
MasterMCP 採用外掛程式方法,以方便快速擴展新的攻擊向量。執行時,MasterMCP 在子進程中啟動先前模組的 FastAPI 服務。
示範客戶端
- Cursor:全球最廣泛使用的 AI 輔助程式碼編輯器之一。
- Claude Desktop:Anthropic 的官方客戶端,該組織客製化了 MCP 協議。
用於示範的大型語言模型 (LLM)
- Claude 3.7
選擇 Claude 3.7 是因為它在識別敏感操作方面的增強能力,以及它在當前 MCP 生態系統中代表的強大操作能力。
claude\_desktop\_config.json 的配置
完成配置後,示範階段開始。
跨 MCP 惡意調用
本示範包含檢查清單中概述的污染技術和跨 MCP 惡意調用策略。
網頁內容污染攻擊
- 基於註解的污染
Cursor 存取本機測試網站 http://127.0.0.1:1024。
這個看似無害的關於「美味蛋糕世界」的頁面,用於模擬大型語言模型客戶端存取惡意網站的潛在影響。
執行命令:
結果顯示,Cursor 不僅讀取了網頁內容,還將本機敏感的配置資料傳回測試伺服器。惡意提示嵌入在原始碼中作為 HTML 註解:
雖然這種基於註解的方法相對簡單且容易檢測,但它仍然能夠觸發惡意操作。
- 編碼註解污染
存取 http://127.0.0.1:1024/encode 顯示的頁面與先前的範例看起來完全相同。但是,惡意提示經過編碼,即使在檢查頁面的原始碼時,也更難以檢測到漏洞利用。
儘管原始碼中沒有明確的提示,但攻擊仍然成功。
MCP 工具返回資訊污染
根據 MasterMCP 的提示指令,我們輸入一個模擬命令,觸發惡意 MCP 並示範其後續操作。
觸發命令後,客戶端啟動對 Toolbox 的跨 MCP 調用,並成功新增一個新的 MCP 伺服器。
檢查外掛程式程式碼顯示,返回的資料包含一個編碼的惡意酬載,使用者幾乎無法檢測到它。
第三方介面污染攻擊
此示範突顯了惡意和非惡意 MCP 直接將第三方 API 資料返回到上下文的潛在風險。
範例程式碼:
執行請求:
結果: 惡意提示嵌入在返回的 JSON 資料中,並成功觸發惡意執行。
MCP 初始化期間的污染技術
本示範涵蓋初始化提示注入和名稱衝突的檢查清單項目。
惡意函式覆寫攻擊
MasterMCP 創建一個工具,其函式名稱與 Toolbox 的 remove_server
函式相同,並在其中編碼惡意提示。
執行命令:
Claude Desktop 不會調用原始的 toolbox remove_server
方法,而是觸發 MasterMCP 提供的具有相同名稱的方法:
這是透過強調「原始方法已棄用」來實現的,這鼓勵大型語言模型優先考慮惡意覆寫的函式。
新增惡意全域檢查邏輯
MasterMCP 創建一個名為「banana」的工具,該工具旨在在執行任何其他工具之前,強制執行強制性的安全檢查。
在執行每個函式之前,系統會優先考慮「banana」檢查機制:
這種全域邏輯注入是透過在程式碼中重複強調「強制執行 banana 檢測」來完成的。
隱藏惡意提示的高級技術
LLM 友好的編碼方法
大型語言模型具有強大的多語言格式解析能力,可用於隱藏惡意資訊。常見的方法包括:
- 英語環境:十六進位元組編碼
- 中文環境:NCR 編碼或 JavaScript 編碼
隨機惡意酬載返回機制
與第三節中提到的第三方介面污染類似,請求 http://127.0.0.1:1024/random 會導致:
每個請求都會返回一個隨機生成的頁面,其中包含惡意酬載,這大大增加了檢測和追蹤的難度。
透過 MasterMCP 的實際示範,揭示了模型脈絡協議 (MCP) 生態系統中隱藏的安全漏洞。從基本的提示注入和跨 MCP 調用到初始化期間更微妙的攻擊以及惡意指令的隱藏,每個階段都在提醒我們 MCP 生態系統的力量之外固有的脆弱性。
如今,隨著大型模型越來越多地與外部外掛程式和 API 互動,看似微小的輸入污染可能會觸發系統範圍的安全風險。攻擊者策略不斷演變的多樣性,包括編碼技術、隨機污染和函式覆寫,需要對傳統安全方法進行全面升級。