實際事件 發布於 AIA: 2026年8月12日

Deadbugz: 目前仍在持續、針對 MCP 供應鏈的攻擊活動

Pillar Security 揭露一項目前仍在持續、針對 MCP 供應鏈的攻擊活動,代號為 Deadbugz。攻擊者在約 74 分鐘內送出 23 個 GitHub PR,試圖把惡意 MCP(Model Context Protocol,讓 AI 應用連接工具與資料來源的協定)伺服器加入熱門專案與 MCP 目錄。伺服器一開始正常運作,之後才把工具說明與提示內容改成尋找憑證、暗中讀取檔案、執行命令與外洩資料的指令。受檢視的 PR 均未合併,公開證據也尚未證實受害端曾執行惡意程式或發生資料竊取。

Supply Chain CompromiseIndirect Prompt InjectionSupply Chain DefenseTool AuthorizationMCP Security
9 項對應的 AIDEFEND 防禦手法
來源: Deadbugz: Currently Active MCP Supply-Chain Campaign 
作者: Ariel Fogel
原文發布: 2026年8月12日

威脅分析

  • 這起攻擊利用真實 GitHub PR 散播惡意設定。 攻擊者把遠端與本機 MCP 設定送進既有專案,也嘗試提交 MCP 目錄項目。這些看似合理的整合請求,讓專案維護者的程式碼審查成為攻擊者試圖跨越的供應鏈防線。
  • 惡意行為會延遲出現。 伺服器依用戶端 IP 記錄工具呼叫次數,格式化與摘要工具則始終正常。完成三次工具呼叫後,只有在用戶端再次取得 tools/list 或呼叫 prompts/get 時,伺服器才會回傳遭置換的工具說明或提示內容。伺服器雖宣告支援清單變更,原始碼卻沒有主動送出變更通知,因此仍需要用戶端重新整理工具清單或要求該提示。
  • 真正讀檔與執行命令的是 MCP 用戶端內的 agent。 惡意內容要求 agent 尋找 SSH、AWS、Shell 歷史與 Kubernetes 設定檔,隱藏讀取行為、修改檔案、執行命令,再把結果送出。MCP 伺服器本身無法直接讀取受害端檔案;攻擊要成功,用戶端必須先載入變更後的內容,agent 也要具備足夠的工具與權限,而且模型還要遵循其中的惡意指令。
  • 已觀察到的是惡意散播行動,並非已證實的入侵結果。 Pillar 檢視的 PR 均未合併;現有公開紀錄也無法證明受害端曾安裝或執行惡意程式、讀取憑證或外洩資料。

適用的 9 項 AIDEFEND 防禦手法

AID-H-021.001
Client-Side Configuration Enforcement
極高
MCP 設定在 commit 或建置前,就要通過嚴格的結構與安全政策檢查。未核准的遠端端點、藏在本機的指令稿路徑,以及會授予用戶端過度權限的設定,都應直接擋下;正式環境的設定還要搭配受保護分支與指定程式碼負責人(code owner)審查。這能在 Deadbugz PR 讓惡意伺服器進入使用者環境前,先切斷散播路徑。
AID-H-024.002
MCP Tool Descriptor Hash Binding & Drift Detection
極高
將每一份核准的 MCP 工具描述正規化,初次納入時固定其雜湊值。之後每次收到 tools/list,都要先與核准清單比對,再決定是否交給 agent。Deadbugz 會在正常呼叫後改寫描述文字,因此只要內容不符,系統就能在惡意指令接觸高權限模型前拒絕處理。這項控制只涵蓋工具描述,不包含 prompts/get 的內容。
AID-H-024.004
Approved Tool Contract Semantics & Change Admission
極高
把每個 MCP 工具獲准執行的操作、可能產生的副作用、權限範圍與破壞性行為,寫成可由程式自動檢查的政策規則。確切的工具描述與語意規格要綁定同一份簽章核准紀錄;任一項目變更,都必須重新接受安全審查。這既能擋下一開始就帶有惡意內容的工具規格,也能處理 Deadbugz 延遲改變工具用途的做法。
AID-H-018.004
Intent-Based Dynamic Capability Scoping
極高
每次請求或工作階段開始時,系統要根據已驗證的使用者身分與原始任務,從確切版本的工具清單中選出必要工具,並限制可執行次數與授權時間,再由工具派送元件強制執行。格式化或摘要任務不應取得讀取憑證、Shell、寄信或修改儲存庫的能力,因此惡意指令即使出現,也沒有相符權限可用。
AID-H-017.002
Least-Privilege Tool Architecture
agent 只能使用列入允許清單、參數型別明確且用途單一的工具,檔案路徑、連線目標、憑證與副作用也都要設限。不要讓它取得通用 Shell、大範圍檔案系統存取、任意 HTTP 連線或其他能在系統內自由操作的工具。如此即使惡意 MCP 文字進入模型,也沒有可用來任意讀取憑證檔、執行命令或把資料送往外部的通用能力。
AID-H-018.003
High-Impact Independent Validation & Approval Gate
執行程式碼、寄送電子郵件、修改儲存庫或讀取受保護的憑證路徑前,真正執行動作的元件要獨立驗證已固定、不可事後修改的動作內容,包括目標、參數、目前身分與簽章政策。政策若要求人工核准,核准內容也必須綁定同一個動作,而且只能使用一次。MCP 回傳的惡意文字不能取代這份授權。
AID-H-018.005
Value-Level Capability Metadata & Data Flow Sink Enforcement
逐一標記從憑證路徑、Shell 歷史或 Kubernetes 設定檔讀出的資料值,記住它們的來源與機敏程度。命令、電子郵件、網路與儲存庫工具真正執行前,再依這些標記檢查資料去向並擋下未核准的傳送。即使模型遵循惡意指令,機敏值仍不能透過工具離開允許範圍。
AID-E-003.003
Confirmed Malicious Code & Persistence Eviction
若調查確認環境已安裝 Deadbugz 設定、指令稿、套件或啟動項目,就要從所有正式設定來源與目前執行中的環境移除確切物件,同時保留證據,並驗證任何執行環境都無法再次載入。這能圍堵已安裝的惡意成品,但仍須另外調查它先前是否已執行其他動作。
AID-E-001.001
Root & Long-Lived Credential Object Eviction
若證據顯示密碼、API key、SSH 私鑰、用戶端 secret 或其他長效憑證曾遭讀取或外洩,就要盤點確切受影響物件,並在每一個實際簽發或驗證憑證的系統撤銷、停用或輪替。這是確認暴露後的事件處置,不能只因為曾出現惡意 PR,就把所有憑證一律輪替。

身為資安防禦者,我們應該這麼做

  • MCP 設定在 commit 或建置前就要接受檢查。停用尚未審查的 Deadbugz 提交項目;若確認已安裝惡意設定或程式碼,就從所有來源與目前執行中的環境移除,並保留相關 PR、設定與執行證據。
  • 分別固定 tools/list 工具描述與核准的 prompts/get 內容。任何未核准變更都要在進入模型前拒絕處理;語意改變時,必須重新接受安全審查。
  • 把通用 Shell、廣泛檔案系統存取、任意 HTTP 連線,以及不受限制的電子郵件或儲存庫工具,改成用途單一且權限受限的工具。每個任務只授予必要工具、執行次數與有效時間。
  • 讀取憑證、執行命令、寄送對外郵件或修改儲存庫前,要由真正執行動作的元件驗證確切目標與參數。機敏資料值也要持續保留來源標記,並阻擋它們被傳到未核准的網路端點、收件者、命令或儲存庫。
  • 從端點、程序、檔案存取、電子郵件、網路與儲存庫遙測中,搜尋相關伺服器路徑、稍後重新取得工具清單的行為、憑證檔讀取,以及先讀取再送出的工具序列。只有在證據確認長效憑證已暴露時才輪替或停用;若涉及已簽發的存取 token 或工作階段,則要另外撤銷。

1 個額外的防禦考量

用戶端提示內容完整性

Deadbugz 也會改寫 prompts/get 回傳的提示內容。工具描述雜湊與工具語意審查可以直接保護 tools/list,但提示內容還需要獨立的用戶端正規化、比對與變更審查。
建議做法: 將核准的提示範本正規化並固定雜湊值;prompts/get 內容若出現未核准變更,就在進入模型前拒絕處理,語意變更則必須重新接受安全審查。

結論

Deadbugz 不需要利用 MCP 協定漏洞,而是試圖把儲存庫整合請求與可變動的 MCP 內容,組合成延遲啟動的指令管道。AIDEFEND  把最直接的防禦手法放在這起攻擊依賴的幾道邊界:惡意設定進入儲存庫前先拒絕、固定並重新審查確切工具規格、移除任務不需要的工具權限、獨立驗證高風險動作,並在工具真正執行前阻擋機敏資料送往未核准的位置。如果確認已安裝惡意設定或程式,後續還要移除確切物件;若已有憑證暴露,則只處置事件實際涉及的憑證。當同一台伺服器可以維持相同身分,卻改變它告訴 agent 該做什麼時,只固定版本或驗證端點身分並不足夠。