File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ ---
2+ layout : news_post
3+ title : " CVE-2026-41316: 通过 def_module / def_method / def_class 绕过 ERB @_init 反序列化保护机制"
4+ author : " k0kubun"
5+ translator : " GAO Jun"
6+ date : 2026-04-21 07:51:00 +0000
7+ tags : security
8+ lang : zh_cn
9+ ---
10+
11+ 我们发布了关于 CVE-2026 -41316 的安全公告。
12+
13+ ## CVE-2026 -41316: 通过 def_module / def_method / def_class 绕过 ERB @_ init 反序列化保护机制"
14+
15+ ERB 中存在一个反序列化漏洞,编号为 [ CVE-2026 -41316] ( https://www.cve.org/CVERecord?id=CVE-2026-41316 ) 。我们建议您更新 ` erb ` gem。
16+
17+ ### 影响范围
18+
19+ 任意 Ruby 应用,如果在不受信任的数据上调用 ` Marshal.load ` ,并且同时加载了 ` erb ` 和 ` activesupport ` ,都会存在任意代码执行漏洞。场景包括:
20+
21+ - ** Ruby on Rails 应用中导入不受信任的序列化数据** -- 所有使用 ` Marshal.load ` 进行缓存、数据导入或 IPC 的 Rails 应用 (Rails 应用都加载了 ActiveSupport 和 ERB)
22+ - ** 导入不受信任的序列化数据的 Ruby 工具** -- 所有使用 ` Marshal.load ` 进行缓存、数据导入或 IPC 的工具
23+ - ** 遗留 Rails 应用** (7.0之前) 依旧使用 Marshal 来进行 cookie 会话序列化的应用
24+
25+ ### 详情
26+
27+ ERB 实现了一种 ` @_init ` 保护机制,在 ERB 对象通过 ` Marshal.load ` 处理不受信任代码时,避免执行代码。
28+ 然而,` ERB#def_method ` ,` ERB#def_module ` 和 ` ERB#def_class ` 在处理模板代码时,会忽略这个保护机制,当攻击者可以控制转递到 ` Marshal.load ` 的数据时,就能绕过保护并执行任意代码。
29+ 尤其是 ` def_module ` 方法没有参数,因此很容易被用于构造一个反序列化的调用链。
30+
31+ 请更新 ` erb ` gem 至版本 4.0.3.1,4.0.4.1,6.0.1.1,6.0.4 或后续版本。
32+
33+ ### 受影响版本
34+
35+ * erb gem 6.0.3 及之前版本
36+
37+ ### 致谢
38+
39+ 感谢 [ TristanInSec] ( https://github.com/TristanInSec ) 发现此问题。
40+
41+ ## 历史
42+
43+ * 初次发布于 2026-04-21 07:51:00 (UTC)
Original file line number Diff line number Diff line change 1+ ---
2+ layout : news_post
3+ title : " Ruby 4.0.3 已发布"
4+ author : k0kubun
5+ translator : " GAO Jun"
6+ date : 2026-04-21 08:45:44 +0000
7+ lang : zh_cn
8+ ---
9+
10+ Ruby 4.0.3 已发布。
11+
12+ 此版本只是更新了 ERB 6.0.1.1,以提供 [ CVE-2026 -41316] ( https://www.ruby-lang.org/zh/news/2026/04/21/erb-cve-2026-41316/ ) 的安全补丁。
13+
14+ 如果您的应用在不受信任的数据上调用 ` Marshal.load ` 并且同时加载了 erb 和 activesupport,请将您的 ERB 更新到
15+ 4.0.3.1,4.0.4.1,6.0.1.1,6.0.4 或之后版本。您可以使用此次发布的 Ruby 4.0.3 来实现此修复。
16+
17+ ## 发布计划
18+
19+ 我们计划在每次 ** 常规** 发布后的 2 个月为最新的 Ruby 稳定版本(目前是 Ruby 4.0)发布更新。
20+ Ruby 4.0.4 将于五月发布,4.0.5 将于七月发布,4.0.6 将于九月发布,4.0.7 将于十一月发布。
21+
22+ 如果存在会影响到大量用户的重大变更,我们也可能会提前发布新版本,后续版本的发布计划也将进行相应调整。
23+
24+ ## 下载
25+
26+ {% assign release = site.data.releases | where: "version", "4.0.3" | first %}
27+
28+ * <{{ release.url.gz }}>
29+
30+ 文件大小: {{ release.size.gz }}
31+ SHA1: {{ release.sha1.gz }}
32+ SHA256: {{ release.sha256.gz }}
33+ SHA512: {{ release.sha512.gz }}
34+
35+ * <{{ release.url.xz }}>
36+
37+ 文件大小: {{ release.size.xz }}
38+ SHA1: {{ release.sha1.xz }}
39+ SHA256: {{ release.sha256.xz }}
40+ SHA512: {{ release.sha512.xz }}
41+
42+ * <{{ release.url.zip }}>
43+
44+ 文件大小: {{ release.size.zip }}
45+ SHA1: {{ release.sha1.zip }}
46+ SHA256: {{ release.sha256.zip }}
47+ SHA512: {{ release.sha512.zip }}
48+
49+ ## 发布说明
50+
51+ 许多提交者、开发人员以及用户提供了问题报告,帮助我们完成了此版本。
52+ 感谢他们的贡献。
You can’t perform that action at this time.
0 commit comments