CVE-2026-41316: ERB @_init 透過 def_module / def_method / def_class 繞過反序列化保護
由 k0kubun 發表於 2026-04-21
翻譯: Bear Su
我們發布了針對 CVE-2026-41316 的安全性公告。
CVE-2026-41316: ERB @_init 透過 def_module / def_method / def_class 繞過反序列化保護
ERB 中存在反序列化漏洞。該漏洞的 CVE 編號為 CVE-2026-41316。我們建議您升級 erb gem。
影響範圍
任何在不受信任的資料上呼叫 Marshal.load,且同時載入了 erb 與 activesupport 的 Ruby 應用程式,都存在可執行任意程式碼的漏洞。這包括:
- 匯入不受信任序列化資料的 Ruby on Rails 應用程式 —— 任何將 Marshal.load 用於快取、資料匯入或 IPC 的 Rails 應用程式(所有 Rails 應用程式都會載入 ActiveSupport 和 ERB)。
- 匯入不受信任序列化資料的 Ruby 工具 —— 任何將
Marshal.load用於快取、資料匯入或 IPC 的工具。 - 仍使用 Marshal 進行 Cookie session 序列化的舊版 Rails 應用程式(7.0 以前的版本)。
風險細節
ERB 實作了 @_init 防護機制來防止當 ERB 透過 Marshal.load 對不受信任資料進行物件重建時執行程式碼。
然而,ERB#def_method、ERB#def_module 與 ERB#def_class 會在未檢查此防護的情況下評估模板原始碼,導致掌控 Marshal.load 傳入資料的攻擊者繞過保護並執行任意程式碼。
特別是 def_module 不需要任何參數,使其在建構反序列化利用鏈 (gadget chain) 時非常容易被呼叫。
請更新 erb gem 至 4.0.3.1、4.0.4.1、6.0.1.1、6.0.4 或更新的版本。
受影響版本
- erb gem 6.0.3 或較低版本。
致謝
感謝 TristanInSec 發現此問題。
歷史
- 最初發布於 2026-04-21 07:51:00 (UTC)
最新消息
Ruby 4.0.3 發布
Ruby 4.0.3 已經發布了。本次發布只包含修復 CVE-2026-41316 的 ERB 6.0.1.1。
由 k0kubun 發表於 2026-04-21
Ruby 3.2.11 發布
Ruby 3.2.11 已經發布了。 本次發布包含 針對 CVE-2026-27820 的 zlib gem 更新。
由 hsbt 發表於 2026-03-27
Ruby 3.3.11 發布
Ruby 3.3.11 已經發布了。 本次發布包含 解決 zlib gem CVE-2026-27820 的更新,以及其他錯誤修復。
由 hsbt 發表於 2026-03-26
Ruby 4.0.2 發布
Ruby 4.0.2 已經發布了。
由 k0kubun 發表於 2026-03-16