Issue #7557 has been reported by charliesome (Charlie Somerville). ---------------------------------------- Bug #7557: Module#initialize_copy allows to change the superclass of a class https://bugs.ruby-lang.org/issues/7557 Author: charliesome (Charlie Somerville) Status: Open Priority: Normal Assignee: charliesome (Charlie Somerville) Category: core Target version: ruby -v: ruby 2.0.0dev (2012-12-13 trunk 38363) [x86_64-darwin11.4.0] =begin You can abuse (({Module#initialize_copy})) to change the superclass of a class, because of this line of code in (({rb_mod_init_copy})): RCLASS_SUPER(clone) = RCLASS_SUPER(orig); (({Class#initialize_copy})) does perform some checks to stop you calling (({#initialize})) on an already initialized class, but this can be subverted by redefining it to call (({super})) from Ruby-land. Here's an example: class Class def initialize_copy(*) super end def superclass=(klass) initialize_copy(Class.new(klass)) end end Symbol.superclass = String p :hello.class.ancestors # => [Symbol, String, Comparable, Object, Kernel, BasicObject] -- http://bugs.ruby-lang.org/