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,且同時載入了 erbactivesupport 的 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_methodERB#def_moduleERB#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

更多新聞...