MCP協(xié)議曝出大漏洞:會(huì)泄露整個(gè)數(shù)據(jù)庫(kù)

1 評(píng)論 1415 瀏覽 1 收藏 8 分鐘

一項(xiàng)最新研究曝出MCP協(xié)議存在嚴(yán)重安全漏洞,攻擊者可通過(guò)精心構(gòu)造的提示詞,誘導(dǎo)大語(yǔ)言模型執(zhí)行惡意指令,從而繞過(guò)權(quán)限限制,直接訪問(wèn)并泄露整個(gè)數(shù)據(jù)庫(kù)。這一漏洞已在使用該協(xié)議的多租戶系統(tǒng)中得到驗(yàn)證,引發(fā)業(yè)界廣泛關(guān)注。

所有使用MCP協(xié)議的企業(yè)注意:你的數(shù)據(jù)庫(kù)可能正在“裸奔”!

最新研究顯示,該協(xié)議存在重大漏洞,攻擊者可利用LLM的指令/數(shù)據(jù)混淆漏洞直接訪問(wèn)數(shù)據(jù)庫(kù)。

如果用戶提供的“數(shù)據(jù)”被精心偽裝成指令,模型很可能會(huì)將其作為真實(shí)指令執(zhí)行。

要知道,MCP協(xié)議如今已成為智能體領(lǐng)域的行業(yè)標(biāo)準(zhǔn),可以很好連接大語(yǔ)言模型與各種工具服務(wù),很多公司都紛紛接入使用。

然而,當(dāng)模型處理網(wǎng)頁(yè)、郵件、文檔或圖像等內(nèi)容時(shí),一旦其中隱藏了惡意指令,模型就有可能誤將其當(dāng)作真實(shí)指令執(zhí)行,進(jìn)而觸發(fā)未經(jīng)授權(quán)的操作,例如泄露私人數(shù)據(jù)。

數(shù)據(jù)是如何被泄露的?

為了演示LLM安全風(fēng)險(xiǎn),研究者基于Supabase搭建了一個(gè)典型的多租戶客服SaaS系統(tǒng)。Supabase是一個(gè)開(kāi)源的實(shí)時(shí)后端服務(wù)平臺(tái),包含數(shù)據(jù)庫(kù)、身份認(rèn)證、文件存儲(chǔ)等功能。

該系統(tǒng)啟用了標(biāo)準(zhǔn)的行級(jí)安全(RLS)機(jī)制,且未添加任何額外的策略。

本次攻擊演示所利用的一切要素均存在于默認(rèn)配置中,包括標(biāo)準(zhǔn)service_role、默認(rèn)模型、RLS和代表開(kāi)發(fā)人員發(fā)起MCP調(diào)用的語(yǔ)言模型助手。

該系統(tǒng)涉及的角色和權(quán)限邊界如下所示:

其中要注意的是:

支持代理無(wú)權(quán)訪問(wèn)任何非支持表或敏感表。要求支持代理提供任何敏感信息將導(dǎo)致拒絕。

下面讓我們?cè)敿?xì)了解一下數(shù)據(jù)泄露過(guò)程。

攻擊者首先提交了一份新的技術(shù)支持請(qǐng)求,其中包含精心構(gòu)造的消息內(nèi)容:既以友好提問(wèn)作為偽裝,又嵌入了直接發(fā)送給Cursor代理的明確指令。

在系統(tǒng)中的對(duì)話界面如下所示:

這條消息通過(guò)正常的工單提交通道進(jìn)入數(shù)據(jù)庫(kù),存儲(chǔ)在客戶消息表中,未被任何過(guò)濾或阻斷。

當(dāng)支持代理查看工單時(shí),他們只會(huì)按預(yù)期進(jìn)行回復(fù)。需要注意的是,支持代理的權(quán)限不允許訪問(wèn)integration_tokens表,因此此階段不會(huì)暴露任何敏感信息。

然而,當(dāng)開(kāi)發(fā)人員隨后使用Cursor查看未處理工單時(shí),就會(huì)發(fā)生違規(guī)行為。他們可能會(huì)輸入如下指令:

請(qǐng)顯示最新的未處理支持工單。

此時(shí),Cursor的代理通過(guò)Supabase MCP集成,自動(dòng)發(fā)起一系列自動(dòng)化SQL查詢:

1、加載項(xiàng)目的數(shù)據(jù)庫(kù)架構(gòu)

2、列出所有支持工單

3、篩選出狀態(tài)為“未解決”的工單

4、獲取最新工單的所有消息

在此過(guò)程中,代理讀取了攻擊者提交的消息,并按照其中嵌入的指令執(zhí)行相應(yīng)操作。

最終,系統(tǒng)生成了兩條新的SQL查詢語(yǔ)句:

  1. 讀取integration_tokens中的全部?jī)?nèi)容;
  2. 將讀取到的結(jié)果作為新消息插入到當(dāng)前工單的消息線程中。

這兩條查詢均由擁有高權(quán)限的service_role執(zhí)行,該角色可以繞過(guò)所有行級(jí)安全(RLS)限制。

對(duì)于開(kāi)發(fā)人員而言,這些操作看起來(lái)就像普通的工具調(diào)用。除非手動(dòng)展開(kāi)查看,否則幾乎無(wú)法與之前的合法查詢區(qū)分開(kāi)來(lái)。

查詢一旦執(zhí)行完成,敏感數(shù)據(jù)會(huì)立即顯示在該工單的對(duì)話中。

攻擊者只需刷新頁(yè)面,就能看到包含機(jī)密信息的新消息。

從權(quán)限角度來(lái)看,這一過(guò)程完全合規(guī)。

解決措施

這類攻擊的根源在于兩個(gè)設(shè)計(jì)缺陷的疊加:數(shù)據(jù)庫(kù)權(quán)限過(guò)高(如service_role),以及對(duì)用戶提交內(nèi)容的盲目信任。

以下是團(tuán)隊(duì)用以降低風(fēng)險(xiǎn)暴露的兩項(xiàng)措施:

  1. 盡可能使用只讀模式
  2. 啟用該模式后,即使提示詞被惡意利用,也無(wú)法執(zhí)行插入(insert)、更新(update)或刪除(delete)等操作。

添加提示注入(Prompt Injection)過(guò)濾器這一機(jī)制可以通過(guò)在MCP外部構(gòu)建一個(gè)輕量級(jí)過(guò)濾模塊來(lái)實(shí)現(xiàn),用于攔截傳入數(shù)據(jù),并對(duì)高風(fēng)險(xiǎn)輸入進(jìn)行標(biāo)記或清除。

雖然該防護(hù)無(wú)法捕捉所有攻擊,但它作為可擴(kuò)展且切實(shí)可行的第一道防線,尤其適用于那些使用第三方IDE(如 Cursor)且難以明確劃分上下文邊界的團(tuán)隊(duì)。

參考鏈接:

https://www.generalanalysis.com/blog/supabase-mcp-blog

時(shí)令 發(fā)自 凹非寺量子位 | 公眾號(hào) QbitAI

本文由人人都是產(chǎn)品經(jīng)理作者【量子位】,微信公眾號(hào):【量子位】,原創(chuàng)/授權(quán) 發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。

題圖來(lái)自Pexels,基于 CC0 協(xié)議。

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 那如果是個(gè)人使用的MCP會(huì)不會(huì)也有泄露問(wèn)題?問(wèn)題是我自己沒(méi)東西可以泄露啊

    來(lái)自廣東 回復(fù)