Skip to content

heap-buffer-overflow in ecma_typedarray_get_uint8_element #3237

Closed
@mka-sec

Description

@mka-sec
Revision

7b589d1

Build

./tools/build.py --clean --debug --compile-flag=-fsanitize=address
--compile-flag=-m32 --compile-flag=-fno-omit-frame-pointer
--compile-flag=-fno-common --compile-flag=-g
--strip=off --system-allocator=on --logging=on
--error-messages=on --profile=es2015-subset

OS

Linux 4.15.0-62-generic #69-Ubuntu x86_64 GNU/Linux

Test case
var arrayBufferVar1 = new ArrayBuffer(12, 8); 
var arrayVar1 = new Uint8Array(arrayBufferVar1, 9); 
arrayVar1.lastIndexOf(15, -Math.LOG10E);
Backtrace

Run with jerry poc.js

=================================================================
==72646==ERROR: AddressSanitizer: heap-buffer-overflow on address 0xf5500f34 at pc 0x567145e3 bp 0xffaf12d8 sp 0xffaf12c8
READ of size 1 at 0xf5500f34 thread T0
    #0 0x567145e2 in ecma_typedarray_get_uint8_element /jerryscript/jerry-core/ecma/operations/ecma-typedarray-object.c:56
    #1 0x566d0a39 in ecma_builtin_typedarray_prototype_index_helper /jerryscript/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-typedarray-prototype.c:1773
    #2 0x566d0c6d in ecma_builtin_typedarray_prototype_last_index_of /jerryscript/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-typedarray-prototype.c:1815
    #3 0x566c4754 in ecma_builtin_typedarray_prototype_dispatch_routine /jerryscript/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-typedarray-prototype.inc.h:74
    #4 0x566c345b in ecma_builtin_dispatch_routine /jerryscript/jerry-core/ecma/builtin-objects/ecma-builtins.c:1021
    #5 0x566c36bc in ecma_builtin_dispatch_call /jerryscript/jerry-core/ecma/builtin-objects/ecma-builtins.c:1046
    #6 0x566eb742 in ecma_op_function_call /jerryscript/jerry-core/ecma/operations/ecma-function-object.c:729
    #7 0x567802b7 in opfunc_call /jerryscript/jerry-core/vm/vm.c:581
    #8 0x56795401 in vm_execute /jerryscript/jerry-core/vm/vm.c:3604
    #9 0x56795cb0 in vm_run /jerryscript/jerry-core/vm/vm.c:3724
    #10 0x5677f117 in vm_run_global /jerryscript/jerry-core/vm/vm.c:282
    #11 0x5663021a in jerry_run /jerryscript/jerry-core/api/jerry.c:576
    #12 0x5662ca11 in main /jerryscript/jerry-main/main-unix.c:739
    #13 0xf77a4e80 in __libc_start_main (/lib32/libc.so.6+0x18e80)
    #14 0x5662a2f0  (/home/fuzzing/jerryscript/tmpmaster/jerry+0x162f0)

0xf5500f34 is located 0 bytes to the right of 36-byte region [0xf5500f10,0xf5500f34)
allocated by thread T0 here:
    #0 0xf7a4af34 in malloc (/usr/lib32/libasan.so.4+0xe5f34)
    #1 0x5671b9ab in jmem_heap_alloc /jerryscript/jerry-core/jmem/jmem-heap.c:254
    #2 0x5671ba23 in jmem_heap_gc_and_alloc_block /jerryscript/jerry-core/jmem/jmem-heap.c:289
    #3 0x566612ab in jmem_heap_alloc_block /jerryscript/jerry-core/jmem/jmem-heap.c:322
    #4 0x566612ab in ecma_alloc_extended_object /jerryscript/jerry-core/ecma/base/ecma-alloc.c:109
    #5 0x566612ab in ecma_create_object /jerryscript/jerry-core/ecma/base/ecma-helpers.c:81
    #6 0x566d9516 in ecma_arraybuffer_new_object /jerryscript/jerry-core/ecma/operations/ecma-arraybuffer-object.c:49
    #7 0x566d9a76 in ecma_op_create_arraybuffer_object /jerryscript/jerry-core/ecma/operations/ecma-arraybuffer-object.c:149
    #8 0x56680ea1 in ecma_builtin_arraybuffer_dispatch_construct /jerryscript/jerry-core/ecma/builtin-objects/ecma-builtin-arraybuffer.c:94
    #9 0x566c3950 in ecma_builtin_dispatch_construct /jerryscript/jerry-core/ecma/builtin-objects/ecma-builtins.c:1080
    #10 0x566ecd47 in ecma_op_function_construct /jerryscript/jerry-core/ecma/operations/ecma-function-object.c:1077
    #11 0x567808d6 in opfunc_construct /jerryscript/jerry-core/vm/vm.c:665
    #12 0x56795427 in vm_execute /jerryscript/jerry-core/vm/vm.c:3616
    #13 0x56795cb0 in vm_run /jerryscript/jerry-core/vm/vm.c:3724
    #14 0x5677f117 in vm_run_global /jerryscript/jerry-core/vm/vm.c:282
    #15 0x5663021a in jerry_run /jerryscript/jerry-core/api/jerry.c:576
    #16 0x5662ca11 in main /jerryscript/jerry-main/main-unix.c:739
    #17 0xf77a4e80 in __libc_start_main (/lib32/libc.so.6+0x18e80)

SUMMARY: AddressSanitizer: heap-buffer-overflow /jerryscript/jerry-core/ecma/operations/ecma-typedarray-object.c:56 in ecma_typedarray_get_uint8_element
Shadow bytes around the buggy address:
  0x3eaa0190: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x3eaa01a0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x3eaa01b0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x3eaa01c0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x3eaa01d0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
=>0x3eaa01e0: fa fa 00 00 00 00[04]fa fa fa fd fd fd fd fd fa
  0x3eaa01f0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x3eaa0200: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x3eaa0210: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x3eaa0220: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x3eaa0230: 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
==72646==ABORTING

Metadata

Metadata

Assignees

Labels

bugUndesired behaviourecma builtinsRelated to ECMA built-in routines

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions