CVE-2026-41316Ruby ERB模板系统存在安全漏洞,允许攻击者绕过反序列化保护机制。尽管Ruby 2.7.0在`ERB#result`和`ERB#run`中引入了`@_init`守卫以防止通过`Marshal.load`执行代码,但`ERB#def_module`等方法未包含此保护。攻击者可利用不可信数据触发反序列化,绕过安全检查并执行任意代码。
该漏洞源于Ruby ERB库在实现反序列化安全防护时的疏漏。虽然`ERB#result`和`ERB#run`方法增加了`@_init`实例变量检查来阻止通过反序列化对象执行代码,但`ERB#def_method`、`ERB#def_module`和`ERB#def_class`这三个同样使用`eval()`评估`@src`的公共方法却未实施相同的保护。当应用程序加载`erb`库并对攻击者控制的不可信数据调用`Marshal.load`时,攻击者可以构造恶意的ERB对象。通过触发`ERB#def_module`方法(利用其默认参数特性),攻击者可以完全绕过`@_init`守卫,进而导致任意代码执行。