Ruby Marshal Deserialization
Overview
Ruby's Marshal.load() deserializes a binary format that can instantiate arbitrary Ruby objects. Attackers can craft malicious payloads that invoke initialize, [], and other methods during deserialization, leading to code execution.
This affected Rails versions using Marshal for cookie sessions before 4.x.
Remediation
- Never use
Marshal.load()on untrusted data - Use
JSON.parse()orMessagePackfor data exchange - For sessions, use signed/encrypted JSON-based session stores