CVE-2026-41316: 通过 def_module / def_method / def_class 绕过 ERB @_init 反序列化保护机制
由 k0kubun 发表于 2026-04-21
翻译: GAO Jun
我们发布了关于 CVE-2026-41316 的安全公告。
CVE-2026-41316: 通过 def_module / def_method / def_class 绕过 ERB @_init 反序列化保护机制”
ERB 中存在一个反序列化漏洞,编号为 CVE-2026-41316。我们建议您更新 erb gem。
影响范围
任意 Ruby 应用,如果在不受信任的数据上调用 Marshal.load,并且同时加载了 erb 和 activesupport,都会存在任意代码执行漏洞。场景包括:
- Ruby on Rails 应用中导入不受信任的序列化数据 – 所有使用
Marshal.load进行缓存、数据导入或 IPC 的 Rails 应用 (Rails 应用都加载了 ActiveSupport 和 ERB) - 导入不受信任的序列化数据的 Ruby 工具 – 所有使用
Marshal.load进行缓存、数据导入或 IPC 的工具 - 遗留 Rails 应用 (7.0之前) 依旧使用 Marshal 来进行 cookie 会话序列化的应用
详情
ERB 实现了一种 @_init 保护机制,在 ERB 对象通过 Marshal.load 处理不受信任代码时,避免执行代码。
然而,ERB#def_method,ERB#def_module 和 ERB#def_class 在处理模板代码时,会忽略这个保护机制,当攻击者可以控制转递到 Marshal.load 的数据时,就能绕过保护并执行任意代码。
尤其是 def_module 方法没有参数,因此很容易被用于构造一个反序列化的调用链。
请更新 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 已发布。
由 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 已发布。此版本包括了 处理 CVE-2026-27820 的 zlib gem 更新,以及一些其他问题补丁。
由 hsbt 发表于 2026-03-26
Ruby 4.0.2 已发布
Ruby 4.0.2 已发布。
由 k0kubun 发表于 2026-03-16