Hi,

I recently discovered a heap-buffer-overflow vulnerability when fuzzing nm-new. 
Here are some details:


compile:
  export CC=gcc
  export CXX=g++
  export CFLAGS="-g -fsanitize=address,undefined"
  export CXXFLAGS="-g -fsanitize=address,undefined"
  ./configure --disable-libdecnumber --disable-readline --disable-sim \
          --disable-libbacktrace --disable-gas --disable-ld --disable-werror \
        --enable-targets=all






AddressSanitizer info:

=================================================================
==2476045==ERROR: AddressSanitizer: heap-buffer-overflow on address 
0x60e0000000d4 at pc 0x55757ee8df75 bp 0x7ffef3ce2910 sp 0x7ffef3ce2900
READ of size 1 at 0x60e0000000d4 thread T0
    #0 0x55757ee8df74 in bfd_getb32 
/fuzz/binutils-gdb/binutils-gdb-san/binutils-gdb/bfd/libbfd.c:833
    #1 0x55757fd4e46d in xcoff_swap_ldsym_in 
/fuzz/binutils-gdb/binutils-gdb-san/binutils-gdb/bfd/coff-rs6000.c:2925
    #2 0x557580a02c63 in _bfd_xcoff_canonicalize_dynamic_symtab 
/fuzz/binutils-gdb/binutils-gdb-san/binutils-gdb/bfd/xcofflink.c:321
    #3 0x55757eea3145 in _bfd_generic_read_minisymbols 
/fuzz/binutils-gdb/binutils-gdb-san/binutils-gdb/bfd/syms.c:842
    #4 0x55757ee4a421 in display_rel_file 
/fuzz/binutils-gdb/binutils-gdb-san/binutils-gdb/binutils/nm.c:1415
    #5 0x55757ee4c03b in display_file 
/fuzz/binutils-gdb/binutils-gdb-san/binutils-gdb/binutils/nm.c:1650
    #6 0x55757ee4f53c in main 
/fuzz/binutils-gdb/binutils-gdb-san/binutils-gdb/binutils/nm.c:2164
    #7 0x7f8291bcc082 in __libc_start_main ../csu/libc-start.c:308
    #8 0x55757ee3e4bd in _start 
(/fuzz/binutils-gdb/binutils-gdb-san/binutils-gdb/binutils/nm-new+0x32a04bd)

0x60e0000000d4 is located 0 bytes to the right of 148-byte region 
[0x60e000000040,0x60e0000000d4)
allocated by thread T0 here:
    #0 0x7f829281a808 in __interceptor_malloc 
../../../../src/libsanitizer/asan/asan_malloc_linux.cc:144
    #1 0x55757ee8c789 in bfd_malloc 
/fuzz/binutils-gdb/binutils-gdb-san/binutils-gdb/bfd/libbfd.c:291
    #2 0x557580aeeb93 in bfd_get_full_section_contents 
/fuzz/binutils-gdb/binutils-gdb-san/binutils-gdb/bfd/compress.c:759
    #3 0x55757eea0682 in bfd_malloc_and_get_section 
/fuzz/binutils-gdb/binutils-gdb-san/binutils-gdb/bfd/section.c:1662
    #4 0x557580a01b1b in xcoff_get_section_contents 
/fuzz/binutils-gdb/binutils-gdb-san/binutils-gdb/bfd/xcofflink.c:234
    #5 0x557580a01f76 in _bfd_xcoff_get_dynamic_symtab_upper_bound 
/fuzz/binutils-gdb/binutils-gdb-san/binutils-gdb/bfd/xcofflink.c:268
    #6 0x55757eea2f14 in _bfd_generic_read_minisymbols 
/fuzz/binutils-gdb/binutils-gdb-san/binutils-gdb/bfd/syms.c:829
    #7 0x55757ee4a421 in display_rel_file 
/fuzz/binutils-gdb/binutils-gdb-san/binutils-gdb/binutils/nm.c:1415
    #8 0x55757ee4c03b in display_file 
/fuzz/binutils-gdb/binutils-gdb-san/binutils-gdb/binutils/nm.c:1650
    #9 0x55757ee4f53c in main 
/fuzz/binutils-gdb/binutils-gdb-san/binutils-gdb/binutils/nm.c:2164
    #10 0x7f8291bcc082 in __libc_start_main ../csu/libc-start.c:308

SUMMARY: AddressSanitizer: heap-buffer-overflow 
/fuzz/binutils-gdb/binutils-gdb-san/binutils-gdb/bfd/libbfd.c:833 in bfd_getb32
Shadow bytes around the buggy address:
  0x0c1c7fff7fc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c1c7fff7fd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c1c7fff7fe0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c1c7fff7ff0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c1c7fff8000: fa fa fa fa fa fa fa fa 00 00 00 00 00 00 00 00
=>0x0c1c7fff8010: 00 00 00 00 00 00 00 00 00 00[04]fa fa fa fa fa
  0x0c1c7fff8020: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c1c7fff8030: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c1c7fff8040: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c1c7fff8050: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c1c7fff8060: 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
  Shadow gap:              cc
==2476045==ABORTING






Also a SEGV on unknown address, at nm.c:797
AddressSanitizer:DEADLYSIGNAL
=================================================================
==2476038==ERROR: AddressSanitizer: SEGV on unknown address 0x60e001100f60 (pc 
0x562c5b654bad bp 0x7ffe21d5c580 sp 0x7ffe21d5c520 T0)
==2476038==The signal is caused by a READ memory access.
    #0 0x562c5b654bac in filter_symbols 
/fuzz/binutils-gdb/binutils-gdb-san/binutils-gdb/binutils/nm.c:797
    #1 0x562c5b65cd04 in display_rel_file 
/fuzz/binutils-gdb/binutils-gdb-san/binutils-gdb/binutils/nm.c:1484
    #2 0x562c5b65e03b in display_file 
/fuzz/binutils-gdb/binutils-gdb-san/binutils-gdb/binutils/nm.c:1650
    #3 0x562c5b66153c in main 
/fuzz/binutils-gdb/binutils-gdb-san/binutils-gdb/binutils/nm.c:2164
    #4 0x7fb0211dc082 in __libc_start_main ../csu/libc-start.c:308
    #5 0x562c5b6504bd in _start 
(/fuzz/binutils-gdb/binutils-gdb-san/binutils-gdb/binutils/nm-new+0x32a04bd)

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV 
/fuzz/binutils-gdb/binutils-gdb-san/binutils-gdb/binutils/nm.c:797 in 
filter_symbols
==2476038==ABORTING







I have attached PoC that demonstrates how the vulnerability can be triggered. 
The attached file will reproduce the crash by executing the command


#nm-new -A -a -l -S -s --special-syms --synthetic --with-symbol-versions -D 
./poc






Please let me know if you need any additional information or if further testing 
is required to reproduce the issue.
Thank you for your time and attention. I look forward to your response.




Best regards, 
SEU-SSL







Attachment: poc2
Description: Binary data

Attachment: poc1
Description: Binary data

Reply via email to