審計200多款自託管AI工具的多租户隔離性,發現78個存在數據泄露
一項安全研究對200多款自託管AI和多租户SaaS產品進行了源代碼審計,發現其中78款產品存在跨租户數據泄露漏洞。漏洞模式是:寫入操作有權限檢查,但讀取操作沒有。研究列舉了已修復的產品,並給出了自檢建議。
一項針對多租户AI和SaaS產品的安全研究揭示了一個普遍存在的漏洞模式。研究者對200多款自託管產品進行了源代碼審計,發現其中78款存在跨租户數據泄露風險。漏洞的核心在於,寫入端點實施了權限檢查,但相鄰的讀取端點(如列表、獲取、搜索)卻缺乏同樣的保護。這種被稱為“未改造的讀取兄弟”的漏洞使得一個租户能夠讀取、修改甚至刪除其他租户的數據。
研究方法分為兩個階段:首先,通過源代碼掃描識別那些寫入有權限檢查而讀取沒有的產品;然後,對疑似存在漏洞的產品進行實際驗證。研究者搭建了自託管Docker實例,創建了兩個租户,並使用開源工具Sectum AI模擬跨租户操作。每次成功利用都會生成一份帶有RFC-3161時間戳的證據包,並通過協調披露流程(90天保密期)報告給維護者。
在發現的84個具體漏洞中,有31個已作為GitHub安全公告提交。已修復並公開的產品包括:SurfSense(利用存儲的OAuth令牌重新索引連接器以竊取其他租户的GitHub/Notion內容)、AnythingLLM(嵌入小部件默認對匿名來源暴露)、Baserow(通過序列ID跨工作空間泄露字段值)、aideepin(跨用户讀取RAG塊文本、嵌入向量和文檔文本)和Flagsmith(跨項目讀取多變量標誌值)。另外79個漏洞仍在協調披露中,詳細列表可在sectum.ai/research上查看。
更隱蔽的是第二種變體:權限檢查雖然運行,但驗證的是路徑而非實際對象。攻擊者可以提交自己工作區的ID(允許訪問)和受害者的對象ID,檢查通過卻訪問了其他租户的數據。這種錯誤尤其危險,例如讀取嵌入向量可部分重建源文檔,或利用受害者的OAuth令牌重新索引連接器以提取數據。
在測試中,Open WebUI、Langfuse、LibreChat、Outline、PraisonAI、Onyx、LangWatch和Khoj等產品通過了隔離性驗證。而Flowise、Mem0、MaxKB和vLLM的開源版本並非多租户架構,因此不存在跨租户泄露面,但自託管時需注意隔離假設是否成立。
研究者給AI開發者提出了三點建議:第一,對讀取操作必須像對寫入操作一樣進行嚴格的權限檢查,最好在查詢層、行級策略或中間件層面強制租户隔離,而不是依賴每個端點自主選擇。第二,嵌入向量和緩存鍵也應視為租户數據,因為許多泄露並非文檔本身,而是RAG向量或響應緩存,其鍵缺少租户標識。第三,自託管時務必驗證所假設的隔離性確實存在,不要輕信默認配置。
所有測試均在隔離的自託管實例上使用合成數據進行,未涉及生產系統。研究使用的開源工具Sectum AI可用於自動驗證多租户隔離性,生成可審計的證據包。詳細披露列表將持續更新於sectum.ai/research。