去年十月,我曾報告過 vuejs.org 上洩露的 Algolia 管理員 API 金鑰。該金鑰擁有完整的權限:addObject、deleteObject、deleteIndex、editSettings,應有盡有。Vue 團隊承認了此事,將我加入其安全名人堂,並輪換了該金鑰。

本應就此結束。但這讓我思考:如果 Vue.js 存在這個問題,還有多少其他的 DocSearch 網站也有同樣的問題?

Algolia 的 DocSearch 是一項針對開源文件的免費搜尋服務。他們會爬取你的網站,建立索引,並提供一個 API 金鑰供你嵌入前端。這個金鑰本應僅限搜尋使用,但有些卻附帶了完整的管理員權限。

大多數金鑰來自前端爬取。Algolia 維護著一個公開的(現已封存)儲存庫 docsearch-configs,其中包含 DocSearch 計劃中每個網站的設定檔,總計超過 3,500 個。我以此為目標清單,爬取了約 15,000 個文件網站以尋找嵌入的憑證。這能抓到儲存庫中不存在的金鑰,因為它們是在建置時注入的,只出現在已部署的網站上:

除此之外,我還運行了 GitHub 程式碼搜尋,以尋找文件框架設定檔中的金鑰,然後克隆了 500 多個文件網站儲存庫並運行 TruffleHog,以捕捉已提交後又被移除的金鑰。

39 個管理員金鑰中有 35 個僅來自前端爬取。其餘 4 個是透過 git 歷史記錄找到的。在我發現時,每一個金鑰都處於活躍狀態。

受影響的專案包括一些龐大的開源專案:

Home Assistant 僅在 GitHub 上就有 85,000 顆星,並擁有數百萬的活躍安裝量。KEDA 是一個 CNCF 專案,用於生產環境的 Kubernetes 叢集。vcluster,同樣是 Kubernetes 基礎設施,擁有受影響網站中最大的搜尋索引,超過 100,000 筆記錄。

近乎所有的 39 個金鑰都共享相同的權限集:search、addObject、deleteObject、deleteIndex、editSettings、listIndexes 和 browse。有些甚至擁有更廣泛的存取權限,包括分析、日誌和 NLU 功能。

實際上,任何擁有這些金鑰之一的人都可以:

有人可能會用惡意連結毒害專案的搜尋結果,將使用者重新導向到釣魚頁面,或者乾脆摧毀整個索引,完全清除網站的搜尋功能。

SUSE/Rancher 在兩天內承認了報告並輪換了金鑰。該金鑰現已完全撤銷。Home Assistant 也做出了回應並開始進行補救,儘管原始金鑰仍然活躍。

幾週前,我編纂了受影響金鑰的完整列表並直接發送電子郵件給 Algolia。沒有收到回覆。截至今日,所有剩餘的金鑰仍然活躍。

這實際上並非關乎 39 個單獨的錯誤配置。Algolia 的 DocSearch 計劃提供了僅限搜尋的金鑰,但許多網站運行自己的爬蟲,最終在前端配置中使用其寫入或管理員金鑰。Algolia 自己的文件也警告不要這樣做,但顯然這種情況大規模發生。

修復方法很簡單:如果你正在運行 DocSearch,請檢查你的前端配置中使用的金鑰,並確保它僅限搜尋使用。如果我用幾個腳本就發現了 39 個管理員金鑰,那麼實際數字幾乎肯定更高。