Tengo una pregunta sobre el exploit de Ruby Rails JSON. Entiendo cómo funciona, pero no entiendo cómo se logra la ejecución del código.
Entiendo YAML y cómo construye varios objetos serializados, pero una ruta de explotación común implica el uso de la clase NamedRouteCollection para ejecutar el código. Este artículo lo explica
¿Por qué funciona este código
unsafe_object = ActionDispatch::Routing::RouteSet::NamedRouteCollection.new
struct = OpenStruct.new(defaults: {})
unsafe_object["foo; eval(puts '=== hello there'.inspect);" ] = struct
Eché un vistazo a la definición real de clase del repositorio github de rails.
La línea 105 es el método de adición que parece ser lo que [] = tiene alias como. Así que parece que en algún lugar de este método, la entrada se ejecuta. Simplemente no lo veo.
Realmente apreciaría cualquier idea de cómo el exploit logra el RCE.