Ruby on Rails 最近發布了一個針對 Active Storage 的緊急安全更新,用以修復一個評分為 9.5 分的極高風險漏洞(CVE-2026-66066)。這個漏洞允許未經身分驗證的攻擊者,僅透過上傳特製的圖片檔案,就能讀取應用程式伺服器上的任意檔案。
對於初入行的工程師來說,這類漏洞的核心在於信任邊界(Trust Boundary)的崩潰。當應用程式接收使用者上傳的檔案並交由底層函式庫處理時,如果沒有對輸入內容進行嚴格限制,攻擊者就可以利用底層函式庫的特性來執行非預期的操作。
漏洞成因與技術脈絡
本漏洞發生在 Active Storage 與其底層圖像處理函式庫 libvips 之間的接合處。Active Storage 是 Rails 用於處理檔案上傳的框架,而 libvips 是一個高效能的圖像處理函式庫。
libvips 支援多種載入器(Loaders)與儲存器(Savers),其中部分功能是由第三方函式庫提供,且在 libvips 的定義中被標記為未經模糊測試(Unfuzzed)或不可信(Untrusted),因為這些功能在處理惡意輸入時並不安全。
問題在於,Rails 的 Active Storage 在將檔案交給 libvips 處理時,並沒有封鎖這些不安全的載入操作。攻擊者可以構造一個特殊的圖片檔案,誘導 libvips 調用這些不安全的載入器,進而將伺服器內部的檔案內容讀取出來並回傳給攻擊者。
值得注意的是,攻擊者不需要觸發特定的縮圖(Thumbnail)或調整尺寸(Resize)操作,只要檔案被 Active Storage 的分析器(Analyzer)或轉換器(Transformer)處理,漏洞就可能被觸發。
實際影響與潛在風險
這個漏洞最危險的地方在於它提供了任意檔案讀取(Arbitrary File Read)的能力。一旦攻擊者能讀取伺服器檔案,他們可以獲取以下敏感資訊:
Rails 過程環境變數與機密金鑰,例如 secret_key_base 與 Rails Master Key。 資料庫密碼、雲端儲存憑證(如 AWS S3 Keys)以及各類 API Token。
獲取這些憑證後,攻擊者的攻擊路徑會迅速升級。例如,擁有 secret_key_base 可能導致遠端程式碼執行(RCE),而雲端憑證則允許攻擊者橫向移動到公司的其他基礎設施中。
受影響範圍
此漏洞主要影響使用 libvips 作為圖像處理器的 Rails 應用程式。
Rails 7.0 及 8.0 以上版本:由於 libvips 是預設配置,因此絕大多數此版本的應用程式都處於風險之中。 Rails 6.0 至 6.1 版本:僅在手動將 Active Storage 配置為使用 libvips 的情況下受影響。 不受影響:使用 MiniMagick 作為處理器的應用程式不會受到此特定路徑的攻擊。
具體版本範圍涵蓋 Rails 7.0.0 至 7.2.3.1、8.0.0 至 8.0.5 以及 8.1.0 至 8.1.3。
修復方案與建議
針對此漏洞,開發團隊應採取以下步驟:
立即更新版本:升級至 Rails 7.2.3.2、8.0.5.1 或 8.1.3.1。同時確保系統安裝的 libvips 版本在 8.13 以上,且 ruby-vips 版本在 2.2.1 以上。
臨時緩解措施:若無法立即更新 Rails 版本,但系統已安裝 libvips 8.13+,可透過設定環境變數 VIPS_BLOCK_UNTRUSTED 或在程式碼中呼叫 Vips.block_untrusted(true) 來封鎖不安全操作。
強制輪換憑證:這是最重要的一步。由於更新補丁無法撤銷已經被盜取的憑證,所有可能被讀取的機密(包括 secret_key_base、Master Key、資料庫密碼及 API Token)都必須重新生成並更換。
總結
這個案例提醒我們,即使使用了成熟的框架,底層依賴庫(Dependency)的安全性同樣至關重要。當我們將外部輸入傳遞給底層 C 函式庫時,必須假設所有輸入都是惡意的,並確認底層工具是否開啟了安全限制。
來源:thehackernews.com
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。