← 所有文章

MCP工具需要動作層級授權

2026年5月17日,NVD發布AI Engine 3.4.9的CVE-2026-8719。AI Engine是一個WordPress外掛,讓WordPress網站能使用AI與MCP功能。13

這種失效模式應該讓每位MCP建置者都坐立難安。Wordfence指出,MCP OAuth bearer token授權路徑缺少WordPress能力檢查:任何有效的OAuth token都能觸及管理員層級的MCP工具,卻沒有驗證是否具備管理員權限。2Wordfence將此問題評為8.8 High,並標示3.5.0為修補版本。2此外掛的變更紀錄表示,3.5.0透過要求管理員能力,修正了MCP OAuth授權與token驗證。3

當伺服器把持有bearer token視為可使用所有工具的權限時,MCP授權就失效了。OAuth可以證明token是透過授權流程取得。MCP伺服器仍必須判斷該主體是否能在該資源上、以該影響範圍執行該工具。

重點摘要

MCP的HTTP授權規格提供建置者必要基礎:受保護資源中繼資料、OAuth 2.1流程、bearer token處理、token驗證、audience檢查,以及在授權範圍或權限不足時明確回傳403 Forbidden4MCP安全教學則將授權定位為保護層,用來防護MCP伺服器暴露的敏感資源與操作。5但這些機制並不會取代應用層授權決策。伺服器仍須把token對應到使用者、角色、租戶、工具、資源、動作與政策。

CVE-2026-8719把這項差異化為具體失敗案例。AI Engine在5月12日發布的3.4.9版本,為其MCP伺服器加入OAuth 2.1與Dynamic Client Registration;接著在5月16日的3.5.0版本中,透過要求管理員能力,修補MCP OAuth授權與token驗證。3這個教訓不只適用於WordPress:任何能變更資料、發布內容、修改設定、讀取私人紀錄、花錢,或呼叫特權API的MCP伺服器,都需要在模型與用戶端之下執行動作層級授權。

工具散布會放大風險。2026年5月的一篇工具複製研究檢視了8,861個MCP與Skills儲存庫、共100,011個工具項目,並在高相似度區間發現很高的已驗證複製率。6重複使用模板可以傳播良好模式,也可能一併傳播缺失的檢查。

主要結論

給MCP伺服器建置者: - 先驗證token,再授權具體動作。請把兩者視為不同關口。 - 對無效或缺漏token回傳401;對有效但缺少授權範圍或權限的token回傳403。 - 用低權限token測試每個管理、寫入、發布、刪除、匯出與設定工具。

給安全團隊: - 以應用程式端點的標準審查MCP伺服器,而不是把它當成聊天外掛。 - 詢問每次工具呼叫對應到哪個使用者、角色、租戶、資源與動作。 - 要求記錄包含token主體、工具名稱、資源、授權判定與拒絕原因。

給代理平台團隊: - 市集數量不等於獨立實作數量。 - 相似度與來源檢查很重要,因為複製工具可能連同脆弱的授權邏輯一起複製。 - 將伺服器模板視為安全敏感基礎設施。

給營運者: - 如果正在使用受影響的WordPress外掛,請升級AI Engine至3.5.0或更新版本。23 - 在確認哪些WordPress角色能觸及哪些工具前,先停用MCP暴露面。 - 每個新的MCP連線都先以唯讀模式啟動;只有在測試證明拒絕路徑有效後,才逐步擴大權限。

AI Engine壞在哪裡

AI Engine將MCP定位為一種連接方式,讓Claude Code、Claude、ChatGPT、OpenClaw與其他用戶端透過URL、登入流程與核准步驟連到WordPress網站。33.4.9版本為MCP伺服器加入OAuth 2.1與Dynamic Client Registration,讓瀏覽器驅動的用戶端不必依賴共享bearer token也能連線。3

這個產品方向合理。共享的靜態token並不適合面向使用者的MCP整合。相較於複製貼上的密鑰,OAuth流程能更清楚地綁定用戶端、使用者與伺服器。

問題藏在下一層。根據NVD與Wordfence,脆弱路徑接受任何有效OAuth token來取得MCP存取權,卻沒有在授予管理員層級MCP工具存取權之前驗證管理員權限。12差別在於:

關口 問題 若跳過會發生什麼
Token驗證 token是否由有效的授權伺服器簽發? 外部、過期、格式錯誤或重放的token可能通過。
主體對應 token代表哪個WordPress使用者或服務帳號? 伺服器無法套用使用者特定政策。
能力檢查 該主體是否具備請求工具所需的WordPress能力? 訂閱者層級使用者可能觸及管理員層級工具。
工具授權 請求的MCP工具是否符合該主體允許的動作? 一個有效會話可能變成所有工具的存取權。
資源授權 該主體是否能碰觸該文章、選項、使用者、檔案或網站? 跨租戶或跨物件存取可能通過。

WordPress外掛頁面的修補說明用語正確:MCP OAuth授權與token驗證現在需要管理員能力,以防止非管理員使用者提升權限。3這句話點出了缺失層。Token不能替代能力檢查。

OAuth是必要條件,不是充分條件

MCP的授權規格涵蓋HTTP型傳輸的傳輸層流程。規格指出,MCP用戶端會代表資源擁有者向受限的MCP伺服器發出請求,並將流程建立在OAuth 2.1、受保護資源中繼資料、授權伺服器中繼資料、Dynamic Client Registration與bearer token使用之上。4

這些元件確實解決了實際問題:

OAuth/MCP機制 解決的問題
受保護資源中繼資料 用戶端發現哪個授權伺服器保護該MCP伺服器。
授權伺服器中繼資料 用戶端發現端點與支援的驗證功能。
Dynamic Client Registration 新用戶端不需硬編碼client ID即可註冊。
Authorization header bearer token 用戶端在預期的HTTP位置送出憑證。
Token驗證 伺服器拒絕無效、過期、audience錯誤或外部token。
401403回應 伺服器區分驗證失敗與權限不足。

MCP規格也警告confused-deputy與token-passthrough風險。MCP伺服器必須驗證提交的token目標是該MCP伺服器,也不得把從MCP用戶端收到的token轉交給上游API。4這項指引保護的是服務之間的邊界。

動作層級授權保護的,則是MCP伺服器內部的邊界。

一個MCP伺服器可能暴露10個工具,也可能暴露100個工具。有些工具讀取公開中繼資料。有些讀取私人紀錄。有些草擬變更。有些會修改正式環境狀態。有些管理使用者、外掛、付款、工作、訊息或基礎設施。伺服器接受會話,不代表有效token就應自動觸及所有工具。

正確鏈條應該如下:

  1. 驗證token簽發者、簽章、到期時間、audience與傳輸規則。
  2. 將token解析為本地主體:使用者、服務帳號、組織、租戶或自動化。
  3. 載入該主體的角色、授權範圍、授權、預算與政策。
  4. 依動作類型與風險分類請求的MCP工具。
  5. 檢查目標資源,而不只是工具名稱。
  6. 當token有效但動作超出權限時,回傳403
  7. 記錄足以供日後審查的決策細節。

OAuth把請求帶到決策點。授權決定該動作是否屬於該主體的權限範圍。

工具呼叫需要權限矩陣

代理工具讓舊式端點習慣更危險。一般網頁路由通常有狹窄的UI路徑包住它。面向模型的工具則位於規劃器之中。代理可以重試、串接呼叫、檢查工具描述、把讀取結果與寫入動作結合,並將不可信內容中的指令帶入後續步驟。

這種行為改變了最低權限模型。伺服器不該只問「這個使用者能否存取MCP?」而應該問:「這個使用者現在能否透過這個工具,對這個資源執行這個動作?」

請使用矩陣:

維度 範例問題
主體 哪個使用者、角色、工作區或服務帳號持有token?
工具 代理呼叫了哪個MCP工具?
動作 此工具會讀取、草擬、寫入、刪除、發布、匯出、管理或花費嗎?
資源 它會碰觸哪個網站、文章、選項、客戶、檔案、儲存庫、錢包或環境?
授權範圍 授權是否包含該工具族群與動作類別?
能力 本地應用程式角色是否允許在MCP之外執行同一操作?
情境 請求來自可信UI、排程工作、遠端用戶端,還是不可信輸入路徑?
預算 動作是否符合速率、大小、花費、受眾與時間限制?
審核 動作是否需要人工核准或預備階段?
稽核 審查者之後能否重建判定過程?

這個矩陣符合代理金鑰需要風險預算的模式。憑證不該像萬用bearer字串。它們應該像有界權限物件,具備伺服器端限制、活動記錄、撤銷機制與保守預設值。

它也符合AI代理所有權是信任原語中的所有權框架。每次特權工具呼叫都應對應到負責帳號、會話、權限組合、審核路徑與停止路徑。

複製工具可能複製同一個缺失檢查

即使每個MCP伺服器都來自謹慎的獨立實作,AI Engine的問題仍然重要。但工具生態系看起來沒有那麼乾淨。

Kim、Jiang、Hu、Jia與Gong在2026年5月10日發表一篇論文,測量agentic-AI生態系中的工具複製現象。他們的資料集涵蓋7,508個MCP儲存庫、87,564個擷取工具,以及1,353個Skills儲存庫、12,447個工具,總計8,861個儲存庫與100,011個工具項目。6作者使用token層級Jaccard相似度與ssdeep模糊結構相似度,並在不同相似度區間手動驗證抽樣配對。6

論文摘要指出,在MCP生態系中,高Jaccard候選項有60%經手動驗證為複製,高ssdeep候選項則有85%經手動驗證為複製。6該文主張,隱性重複可能污染基準測試分割、傳播脆弱實作、扭曲工具使用泛化能力的衡量,並帶來來源、歸屬與授權疑慮。6

這項發現改變了團隊看待MCP市集成長的方式。更多工具不會自動代表更多獨立安全審查。重複的伺服器腳手架可以為生態系帶來一致性;同樣的重複,也可能把相同的薄弱驗證模式複製到許多套件。

因此,安全審查應納入來源:

審查問題 重要性
MCP伺服器是否來自模板? 模板錯誤可能散布到許多工具。
哪個上游儲存庫或產生器產出了授權程式碼? 審查應在源頭進行,而不只是逐一審查每個複製品。
工具清單是否宣告危險動作? 營運者需要在啟用前看出寫入、管理、匯出與花費工具。
相似儲存庫是否共用相同授權中介軟體? 一個概念驗證可能涵蓋整個工具家族。
市集是否顯示發布者、版本與修補狀態? CVE出現時,使用者需要來源資訊。

代理技能需要套件管理器主張,Skills需要套件式散布、來源資訊與政策。MCP伺服器也需要同樣紀律,再加上執行環境授權測試。

MCP授權的最低測試套件

凡是碰觸私人或可變資料的MCP伺服器,都應附上授權測試套件。只確認成功路徑的單元測試並不足夠。危險行為藏在拒絕路徑裡。

從這些案例開始:

測試 預期結果
缺少token時呼叫受保護工具 401 Unauthorized
過期token呼叫受保護工具 401 Unauthorized
其他audience的token呼叫受保護工具 401 Unauthorized
有效低權限token呼叫管理工具 403 Forbidden
有效唯讀token呼叫寫入工具 403 Forbidden
有效寫入token碰觸其他租戶的資源 403 Forbidden
有效token呼叫超過大小限制的匯出工具 403 Forbidden或需要審核的判定
有效token在沒有核准狀態下呼叫破壞性工具 403 Forbidden或需要審核的判定
MCP伺服器收到給上游API的用戶端token 伺服器拒絕passthrough,並使用獨立的上游token流程
被拒絕的請求出現在稽核記錄中 記錄包含主體、工具、資源、判定與原因

實際狀態碼可以依產品政策調整,但差異應保留:無效憑證在主體解析前失敗;有效憑證若權限不足,則在授權關口失敗。MCP規格將缺少或無效授權對應到401,將授權範圍無效或權限不足對應到4034

以WordPress而言,同一規則更明確:執行管理操作的MCP工具,應檢查與控制台、REST API或內部PHP路徑相同的WordPress能力。低權限角色不應因為呼叫是透過面向模型的協定送達,就取得通往管理員行為的新路徑。

市集審查應要求什麼

MCP市集與外掛目錄應把授權中繼資料視為一級套件資料。使用者決定是否啟用伺服器時,需要的不只是工具數量。

最低公開中繼資料如下:

欄位 理由
發布者身分 使用者需要可負責的維護者。
原始碼儲存庫 審查者需要實作來源。
產生來源或fork來源 複製家族應該可見。
驗證模型 API key、OAuth、瀏覽器會話、本地環境或無驗證。
必要授權範圍 營運者需要知道工具會請求什麼。
危險動作 寫入、刪除、發布、匯出、花費、管理、執行。
資源邊界 租戶、工作區、專案、帳號或本地檔案範圍。
稽核行為 工具呼叫與拒絕會出現在哪裡。
修補狀態 哪個版本修正已知CVE。

這些欄位無法消滅脆弱工具,但能讓審查面變得真實。營運者可以對照宣告權限與實際程式碼,市集也能在缺陷出現時將相似實作分組。

這正是MCP授權規格與工具複製論文之間缺少的橋梁。規格告訴實作者如何完成協定層流程;生態系還需要套件層來源資訊與動作層授權證據,才不會讓重複實作一再重複相同的缺失檢查。

應該改建成什麼

將MCP授權建成一條管線:

  1. 協定關口:驗證受保護資源中繼資料、OAuth流程、token位置、token有效性、到期時間、簽發者與audience。
  2. 主體關口:將token對應到使用者、服務帳號、角色、租戶與工作區。
  3. 工具關口:將每個工具分類為讀取、草擬、寫入、刪除、發布、匯出、管理、執行或花費。
  4. 資源關口:授權精確的目標物件或租戶邊界。
  5. 預算關口:在執行前套用速率、大小、花費、受眾與時間限制。
  6. 核准關口:高風險動作需要人工或政策核准。
  7. 稽核關口:將允許、拒絕與需要審核的判定記錄在營運者可檢查的位置。

這些關口應位於模型之外。工具描述可以告訴代理避免管理動作。提示詞可以要求謹慎。但邊界不能由它們承擔。即使代理禮貌、自信或反覆提出請求,伺服器也應拒絕未授權動作。

您的代理沙箱只是一項建議從另一個角度提出同一點:有效權限仍可能組合成不安全行為。MCP工具需要在動作邊界執行授權,因為代理組合動作的速度,會快過人類在腦中模擬後果的速度。

FAQ

MCP需要OAuth嗎?

不需要。MCP授權是選用的;HTTP授權規格適用於實作支援HTTP型傳輸授權時。同一份規格也指出,STDIO傳輸應從環境取得憑證,而不是走HTTP OAuth流程。4

OAuth能解決MCP授權嗎?

OAuth只解決問題的一部分。OAuth可以建立授權流程、簽發token,並讓受保護的MCP伺服器驗證bearer token。MCP伺服器仍須判斷token主體是否可以對目標資源執行特定工具動作。

CVE-2026-8719證明了什麼?

CVE-2026-8719證明,有效token路徑仍可能缺少本地能力強制執行。NVD與Wordfence描述AI Engine 3.4.9會接受任何有效OAuth token來取得MCP存取權,卻沒有在管理員層級MCP工具可被觸及之前驗證管理員權限。12

MCP建置者應先測什麼?

先測拒絕路徑:低權限token呼叫管理工具、唯讀token呼叫寫入工具、有效token存取其他租戶資源、過期token、audience錯誤token,以及沒有核准狀態的破壞性工具。OAuth成功路徑通過,並不代表動作層級授權成立。

為什麼工具複製會影響MCP安全?

工具複製很重要,因為重複實作可能重複相同的脆弱中介軟體、驗證捷徑與缺失檢查。2026年5月的工具複製論文在高相似度MCP候選項中發現很高的已驗證複製率,並警告隱性重複可能傳播脆弱實作。6

參考資料


  1. National Vulnerability Database, “CVE-2026-8719,” published May 17, 2026. CVE發布日期、受影響版本3.4.9、CVSS vector、CWE-269分類,以及MCP OAuth bearer token授權路徑缺少WordPress能力強制執行的來源。 

  2. Wordfence Intelligence, “AI Engine 3.4.9 - Authenticated (Subscriber+) Privilege Escalation via Missing Authorization in MCP OAuth Bearer Token,” publicly published May 16, 2026, last updated May 17, 2026. CVSS 8.8 High評等、受影響版本3.4.9、修補版本3.5.0與修復建議的來源。 

  3. WordPress.org Plugin Directory, “AI Engine - The Chatbot, AI Framework & MCP for WordPress,” accessed May 18, 2026. 外掛MCP定位、OAuth連線用語、3.4.9版本變更紀錄加入OAuth 2.1與Dynamic Client Registration給MCP伺服器,以及3.5.0版本變更紀錄要求管理員能力以進行MCP OAuth授權與token驗證的來源。 

  4. Model Context Protocol, “Authorization,” specification revision 2025-06-18. MCP的HTTP授權範圍、OAuth 2.1基礎、受保護資源中繼資料、授權伺服器中繼資料、bearer token使用、token驗證、audience綁定、token-passthrough限制、confused-deputy討論,以及401/403授權錯誤指引的來源。 

  5. Model Context Protocol, “Understanding Authorization in MCP,” security tutorial, accessed May 18, 2026. 此教學將MCP授權定位為保護MCP伺服器暴露的敏感資源與操作,並應限制僅允許獲准使用者存取的來源。 

  6. Taein Kim, David Jiang, Yuepeng Hu, Yuqi Jia, and Neil Gong, “Evaluating Tool Cloning in Agentic-AI Ecosystems,” arXiv:2605.09817, submitted May 10, 2026. 資料集數量、相似度方法概述、手動驗證複製率,以及基準測試污染、脆弱實作傳播、來源、歸屬與授權風險的來源。 

相關文章

代理金鑰需要風險預算

Shuriken 的 Agent Kit 說明,為什麼能採取行動的 AI 代理工具需要有範圍限制的金鑰、伺服器端限制、活動紀錄、撤銷機制,以及保守的預設值。

2 分鐘閱讀

AI代理的核准提示不等於授權

AI代理的核准提示需要明確範圍、風險分級、稽核記錄、到期與撤銷機制,讓人類核准具體行動,而不是流暢的請求文字。

3 分鐘閱讀

Ralph 迴圈:我如何在夜間運行自主 AI 代理

我建構了一套自主代理系統,搭配停止鉤子、生成預算與檔案系統記憶體。以下是失敗經驗與真正能交付程式碼的方法。

3 分鐘閱讀