Source: mruby Version: 1.0.0+20141015+gitb4cc962c-1 Severity: grave Tags: patch security upstream Forwarded: https://github.com/mruby/mruby/issues/3995
Hi, The following vulnerability was published for mruby. CVE-2018-10191[0]: | In versions of mruby up to and including 1.4.0, an integer overflow | exists in src/vm.c::mrb_vm_exec() when handling OP_GETUPVAR in the | presence of deep scope nesting, resulting in a use-after-free. An | attacker that can cause Ruby code to be run can use this to possibly | execute arbitrary code. Demostrable/verifiable with an ASAN build of mruby: dummy@sid:~$ ./mruby-1.4.0/bin/mruby ./use_after_free.rb ================================================================= ==3180==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x625000014100 at pc 0x0000004a77c3 bp 0x7ffef79d70d0 sp 0x7ffef79d70c8 READ of size 16 at 0x625000014100 thread T0 #0 0x4a77c2 in mrb_vm_exec src/vm.c:1196 #1 0x4ac408 in mrb_vm_run src/vm.c:935 #2 0x52df53 in mrb_load_exec mrbgems/mruby-compiler/core/parse.y:5840 #3 0x404036 in main mrbgems/mruby-bin-mruby/tools/mruby/mruby.c:227 #4 0x7ffb5b242a86 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21a86) #5 0x405b89 in _start (/home/dummy/mruby-1.4.0/bin/mruby+0x405b89) Address 0x625000014100 is a wild pointer. SUMMARY: AddressSanitizer: heap-buffer-overflow src/vm.c:1196 in mrb_vm_exec Shadow bytes around the buggy address: 0x0c4a7fffa7d0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c4a7fffa7e0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c4a7fffa7f0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c4a7fffa800: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c4a7fffa810: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa =>0x0c4a7fffa820:[fa]fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c4a7fffa830: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c4a7fffa840: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c4a7fffa850: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c4a7fffa860: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c4a7fffa870: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa Shadow byte legend (one shadow byte represents 8 application bytes): Addressable: 00 Partially addressable: 01 02 03 04 05 06 07 Heap left redzone: fa Freed heap region: fd Stack left redzone: f1 Stack mid redzone: f2 Stack right redzone: f3 Stack after return: f5 Stack use after scope: f8 Global redzone: f9 Global init order: f6 Poisoned by user: f7 Container overflow: fc Array cookie: ac Intra object redzone: bb ASan internal: fe Left alloca redzone: ca Right alloca redzone: cb ==3180==ABORTING dummy@sid:~$ dummy@sid:~$ ./mruby-1.4.0/bin/mruby ./null_ptr_deref.rb /root/mruby-1.4.0/src/class.c:94:11: runtime error: member access within null pointer of type 'struct RClass' ASAN:DEADLYSIGNAL ================================================================= ==3189==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x0000004b03b3 bp 0x7ffe636d25b0 sp 0x7ffe636d2560 T0) ==3189==The signal is caused by a READ memory access. ==3189==Hint: address points to the zero page. #0 0x4b03b2 in prepare_singleton_class src/class.c:94 #1 0x4c18da in mrb_singleton_class src/class.c:1320 #2 0x4858fa in mrb_vm_exec src/vm.c:2895 #3 0x4ac408 in mrb_vm_run src/vm.c:935 #4 0x52df53 in mrb_load_exec mrbgems/mruby-compiler/core/parse.y:5840 #5 0x404036 in main mrbgems/mruby-bin-mruby/tools/mruby/mruby.c:227 #6 0x7fe21ffe5a86 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21a86) #7 0x405b89 in _start (/home/dummy/mruby-1.4.0/bin/mruby+0x405b89) AddressSanitizer can not provide additional info. SUMMARY: AddressSanitizer: SEGV src/class.c:94 in prepare_singleton_class ==3189==ABORTING dummy@sid:~$ If you fix the vulnerability please also make sure to include the CVE (Common Vulnerabilities & Exposures) id in your changelog entry. For further information see: [0] https://security-tracker.debian.org/tracker/CVE-2018-10191 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-10191 [1] https://github.com/mruby/mruby/issues/3995 Regards, Salvatore