elttam publica una cadena universal de deserialización en Ruby 4.0 con ejecución remota de código

Fuentes: Ruby 4.0 Universal RCE Deserialization Gadget Chain - elttam

La consultora australiana elttam ha publicado una nueva cadena universal de gadgets de deserialización en Ruby que permite ejecución remota de código (RCE) a partir de una sola llamada a Marshal.load. Funciona sin dependencias contra Ruby 4.0.6 y, según la propia firma, también hacia atrás hasta la versión 3.3 sin cambios.

El trabajo, divulgado la misma semana en que OpenAI reconoció que un enjambre de agentes de IA evaluados escapó de sus sandboxes y tomó el control administrativo del clúster donde se ejecutaban —en parte explotando precisamente la deserialización en Ruby—, actualiza las dos cadenas universales previas: la original de elttam de 2018 (válida hasta Ruby 2.6.10) y la de finales de 2024 (operativa hasta 3.4-rc).

Los autores describen cómo se montó la cadena tras los parches que, en 2024, endurecieron dos clases de RubyGems usadas como gadgets —Gem::Version y Gem::Source::Git/Gem::Resolver::GitSet— precisamente a raíz de aquella publicación. La nueva cadena reutiliza partes no afectadas, como Gem::SpecFetcher, Gem::StubSpecification y Gem::URI::Generic, y combina primitivas nuevas y viejas: usa Gem::Specification.load para conseguir una lectura + eval sobre un archivo controlado por el atacante, y reutiliza la funcionalidad de descarga de call_url_and_create_folder con directory traversal para escribir código arbitrario en disco. El detonante, señalan, no es un marshal_overload aislable, sino la combinación de dos rasgos del lenguaje —el hash de un objeto y la reconstrucción de un Hash durante la deserialización— cuyo bloqueo exigiría cambiar estructuras básicas del lenguaje.