Rails 圖片上載漏洞可讀 server 檔案:升級後仲要查 libvips
Tech News

Rails 圖片上載漏洞可讀 server 檔案:升級後仲要查 libvips

圖片:via iThome — https://www.ithome.com.tw/news/177797
TechLab 編輯部(譯)·

公開頭像、縮圖上載功能都有風險,舊密鑰亦要換

Ruby on Rails 喺 7 月 29 日修補 Active Storage 重大漏洞 CVE-2026-66066,CVSS 4.0 評分達 9.5。iThome 報道指,攻擊者可能借圖片上載功能讀取 server 任意檔案,包括 Rails process 嘅環境變數。呢類資料通常擺住 app 密鑰、資料庫登入資料同雲端儲存憑證,一旦外洩,攻擊者就可能再入侵其他系統。

邊類 Rails 網站先有風險

唔係用 Rails 就一定中招。 Rails 官方列出兩個必要條件:Active Storage 用 libvips 處理圖片,同埋 app 接受唔可信用家上載圖片。頭像、商品圖、討論區附件、SaaS 客戶自訂品牌圖,只要檔案會交畀呢條處理鏈,都值得即刻核對。由 Rails 7.0 defaults 開始,config.active_storage.variant_processor 會設成 :vips,所以唔少近年建立嘅 app 都可能啱啱踩中條件。

官方亦特別澄清,網站唔使主動顯示 variant 先算有風險;接受圖片上載已經要處理。Ethiack 嘅資料補充,正常預設嘅 Rails 6.x 唔會踩中同一條路,除非團隊自行改過 Active Storage 設定。用 ImageMagick/MiniMagick 嘅 app 暫時唔受呢條攻擊路徑影響,不過都要用實際 production 設定核實,唔好靠印象判斷。

三個版本要分開查

先喺實際部署環境跑 bin/rails --version,再用 bundle info activestorage 查 Active Storage;唔好只望 Gemfile,因為真正安裝版本由 lockfile 同部署 bundle 決定。設定就可以用 bin/rails runner 'p Rails.application.config.active_storage.variant_processor' 核對。受影響團隊要升至 Active Storage 7.2.3.2、8.0.5.1 或 8.1.3.1,舊過 7.2 嘅支線就應升上仍獲保安支援嘅 Rails 版本。

跟住要喺同一個 production host、container 或 worker image 跑 vips --versionlibvips 最低要 8.13,因為更舊版本根本冇能力喺 runtime 封鎖相關未受信任操作。呢點幾容易漏:Dependabot 就算成功更新 Ruby gem,base image 或 OS package 仍可能留喺舊版 libvips。修補後嘅 Active Storage 遇到呢種環境會喺 app 啟動時報錯,所以 staging、web process 同背景圖片 worker 都要逐個驗證。

點解只擋上載格式未必可靠

問題出喺 libvips 可以經唔同 loader 同第三方函式庫處理多種檔案格式,部分操作未有足夠 fuzzing,Active Storage 之前又冇預設封鎖佢哋。Rails 官方暫時收起完整攻擊鏈,最遲會喺 8 月 28 日公開;現階段只確認特製檔案可以觸發任意檔案讀取。未有完整 PoC 前自行估 MIME、副檔名或 payload 特徵,再寫一條 WAF rule,保障成效好有限。

Ethiack 亦提醒,WAF 有冇機會見到上載內容,視乎檔案點樣送入 Active Storage 同儲存喺邊。用 direct upload 直送 object storage 時,流量可能完全唔經 app 前面嗰層 WAF。未能即時升 Rails、但已有 libvips 8.13 或以上,可以暫時設 VIPS_BLOCK_UNTRUSTED;如 ruby-vips 已到 2.2.1,亦可喺 initializer 呼叫 Vips.block_untrusted(true)。呢啲只適合短期頂住,正式修補仍然要升級。

補完漏洞之後仲有手尾

任意檔案讀取最麻煩嘅地方,係修補唔會令已經流出嘅秘密自動失效。官方建議受影響 app 更換 secret_key_base、Rails master key、資料庫密碼、S3/GCS/Azure 憑證,同所有 process 有權讀取嘅第三方 API token。換走 secret_key_base 會令現有登入 session、簽署 cookie 同部分 Active Storage URL 失效,團隊要預先安排用家重新登入同相關服務更新密鑰。

今次亦提醒團隊,淨係掃描 Ruby dependency 唔夠。漏洞入口雖然喺 Rails gem,但實際圖片解碼係由 OS 或 container 入面嘅 native library 處理。管理公開圖片上載功能嘅開發、SaaS 同系統團隊,應該連部署 image、背景 worker、儲存路徑同密鑰輪換一併處理,再留意 Rails 其後公開嘅技術細節。


參考來源

本文根據原文及公開資料整理;資料有出入時,以原文及官方資料為準。

分享:WhatsAppThreadsTelegramFacebook