CVE Catalog

CVE-2026-41316

HighCVSS 8.1
Published: Updated: Translated: NVD NIST

Exploitation Probability (EPSS)

Elevated risk
1.13%

64th percentile - higher than 64% of all known CVEs

Summary

A vulnerability in the ERB templating library for Ruby allows bypassing deserialization protection. Although `ERB#result` and `ERB#run` were hardened against code execution after object reconstruction via `Marshal.load`, three other public methods (`def_method`, `def_module`, `def_class`) lack the same guard. An attacker can use `ERB#def_module` to achieve arbitrary code execution.

Risk Assessment

The risk is remote code execution (RCE) in Ruby applications using the ERB library if an attacker can supply untrusted data for deserialization. This could lead to full compromise of the server or application.

Recommendation

Immediately upgrade the ERB library to version 4.0.3.1, 4.0.4.1, 6.0.1.1, or 6.0.4 (depending on the branch in use). If upgrading is not possible, avoid deserializing untrusted data with `Marshal.load`.

Related vulnerabilities

Original NVD description (English source)

ERB is a templating system for Ruby. Ruby 2.7.0 (before ERB 2.2.0 was published on rubygems.org) introduced an `@_init` instance variable guard in `ERB#result` and `ERB#run` to prevent code execution when an ERB object is reconstructed via `Marshal.load` (deserialization). However, three other public methods that also evaluate `@src` via `eval()` were not given the same guard: `ERB#def_method`, `ERB#def_module`, and `ERB#def_class`. An attacker who can trigger `Marshal.load` on untrusted data in a Ruby application that has `erb` loaded can use `ERB#def_module` (zero-arg, default parameters) as a code execution sink, bypassing the `@_init` protection entirely. ERB 4.0.3.1, 4.0.4.1, 6.0.1.1, and 6.0.4 patch the issue.

Vulnerability data from NVD (NIST) · CISA KEV · EPSS