https://sourceware.org/bugzilla/show_bug.cgi?id=33099

            Bug ID: 33099
           Summary: heap overflow in print_dwarf_addr
           Product: elfutils
           Version: unspecified
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: libelf
          Assignee: unassigned at sourceware dot org
          Reporter: ZeroTrac3r at outlook dot com
                CC: elfutils-devel at sourceware dot org
  Target Milestone: ---

Created attachment 16142
  --> https://sourceware.org/bugzilla/attachment.cgi?id=16142&action=edit
poc

There is a heap overflow vulnerability in print_dwarf_addr.

# reproduce

export ASAN_OPTIONS=detect_leaks=0
export CFLAGS='-g -fsanitize=address'
export CXXFLAGS='-g -fsanitize=address'
export LDFLAGS='-g -fsanitize=address'
git clone git://sourceware.org/git/elfutils.git
cd elfutils
mkdir install
autoreconf --install
automake --add-missing
./configure --enable-maintainer-mode --prefix=`realpath ./install`
--disable-shared
make install
cd src
export LD_LIBRARY_PATH=`realpath ../install/lib`
./readelf -a /tmp/crash_poc


# result

```
==175347==ERROR: AddressSanitizer: heap-buffer-overflow on address
0x50b000000625 at pc 0x7696e4ca1a6a bp 0x7ffc9a40cc80 sp 0x7ffc9a40c3f8
READ of size 24 at 0x50b000000625 thread T0
    #0 0x7696e4ca1a69 in printf_common
../../../../src/libsanitizer/sanitizer_common/sanitizer_common_interceptors_format.inc:563
    #1 0x7696e4cce33b in vprintf
../../../../src/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:1644
    #2 0x7696e4cd0180 in printf
../../../../src/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:1702
    #3 0x635c1b30f257 in print_dwarf_addr
/reproduce/elfutils/src/readelf.c:4295
    #4 0x635c1b301fb1 in handle_relocs_relr
/reproduce/elfutils/src/readelf.c:2527
    #5 0x635c1b2fe496 in print_relocs /reproduce/elfutils/src/readelf.c:2077
    #6 0x635c1b2f6fb7 in process_elf_file
/reproduce/elfutils/src/readelf.c:1060
    #7 0x635c1b2f5c1c in process_dwflmod /reproduce/elfutils/src/readelf.c:840
    #8 0x7696e495cb57 in dwfl_getmodules
/reproduce/elfutils/libdwfl/dwfl_getmodules.c:86
    #9 0x635c1b2f6675 in process_file /reproduce/elfutils/src/readelf.c:948
    #10 0x635c1b2f4217 in main /reproduce/elfutils/src/readelf.c:417
    #11 0x7696e442a1c9 in __libc_start_call_main
../sysdeps/nptl/libc_start_call_main.h:58
    #12 0x7696e442a28a in __libc_start_main_impl ../csu/libc-start.c:360
    #13 0x635c1b2f1b24 in _start (/reproduce/elfutils/src/readelf+0x6cb24)
(BuildId: 011a0a61bf1bcafb77c221afb5fa4098d53c67e2)

0x50b000000625 is located 0 bytes after 101-byte region
[0x50b0000005c0,0x50b000000625)
allocated by thread T0 here:
    #0 0x7696e4cfd9c7 in malloc
../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:69
    #1 0x7696e4bcc8fb in elf_getdata_rawchunk
/reproduce/elfutils/libelf/elf_getdata_rawchunk.c:188
    #2 0x7696e49628fe in translate_offs
/reproduce/elfutils/libdwfl/dwfl_module_getdwarf.c:805
    #3 0x7696e49632b9 in find_dynsym
/reproduce/elfutils/libdwfl/dwfl_module_getdwarf.c:893
    #4 0x7696e4965978 in find_symtab
/reproduce/elfutils/libdwfl/dwfl_module_getdwarf.c:1226
    #5 0x7696e49671e3 in dwfl_module_getsymtab
/reproduce/elfutils/libdwfl/dwfl_module_getdwarf.c:1477
    #6 0x7696e4981762 in __libdwfl_addrsym
/reproduce/elfutils/libdwfl/dwfl_module_addrsym.c:248
    #7 0x7696e498219b in dwfl_module_addrinfo
/reproduce/elfutils/libdwfl/dwfl_module_addrsym.c:332
    #8 0x635c1b30efea in print_dwarf_addr
/reproduce/elfutils/src/readelf.c:4263
    #9 0x635c1b301fb1 in handle_relocs_relr
/reproduce/elfutils/src/readelf.c:2527
    #10 0x635c1b2fe496 in print_relocs /reproduce/elfutils/src/readelf.c:2077
    #11 0x635c1b2f6fb7 in process_elf_file
/reproduce/elfutils/src/readelf.c:1060
    #12 0x635c1b2f5c1c in process_dwflmod /reproduce/elfutils/src/readelf.c:840
    #13 0x7696e495cb57 in dwfl_getmodules
/reproduce/elfutils/libdwfl/dwfl_getmodules.c:86
    #14 0x635c1b2f6675 in process_file /reproduce/elfutils/src/readelf.c:948
    #15 0x635c1b2f4217 in main /reproduce/elfutils/src/readelf.c:417
    #16 0x7696e442a1c9 in __libc_start_call_main
../sysdeps/nptl/libc_start_call_main.h:58
    #17 0x7696e442a28a in __libc_start_main_impl ../csu/libc-start.c:360
    #18 0x635c1b2f1b24 in _start (/reproduce/elfutils/src/readelf+0x6cb24)
(BuildId: 011a0a61bf1bcafb77c221afb5fa4098d53c67e2)

SUMMARY: AddressSanitizer: heap-buffer-overflow
../../../../src/libsanitizer/sanitizer_common/sanitizer_common_interceptors_format.inc:563
in printf_common
Shadow bytes around the buggy address:
  0x50b000000380: fa fa fa fa fa fa 00 00 00 00 00 00 00 00 00 00
  0x50b000000400: 00 00 00 fa fa fa fa fa fa fa fa fa 00 00 00 00
  0x50b000000480: 00 00 00 00 00 00 00 00 00 fa fa fa fa fa fa fa
  0x50b000000500: fa fa 00 00 00 00 00 00 00 00 00 00 00 00 00 fa
  0x50b000000580: fa fa fa fa fa fa fa fa 00 00 00 00 00 00 00 00
=>0x50b000000600: 00 00 00 00[05]fa fa fa fa fa fa fa fa fa fa fa
  0x50b000000680: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x50b000000700: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x50b000000780: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x50b000000800: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x50b000000880: 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
==175347==ABORTING
```

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Reply via email to