Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

libwab heap-based out-of-bound read in write_ldif #2

Open
xinali opened this issue Apr 10, 2020 · 0 comments
Open

libwab heap-based out-of-bound read in write_ldif #2

xinali opened this issue Apr 10, 2020 · 0 comments

Comments

@xinali
Copy link

xinali commented Apr 10, 2020

test on

ubuntu 16.04 x64
compiled with clang-6.0

gdb info

Program received signal SIGSEGV, Segmentation fault.
0x000000000041295d in write_ldif (dest=0x7ffff7dd2620 <_IO_2_1_stdout_>, mrec=mrec@entry=0x7fffffffe0f0) at /home/libwab/libwab.c:598
598                     if( ((mrec->oplist[i] >> 16) & 0xffff) == PR_DISPLAY_NAME)
LEGEND: STACK | HEAP | CODE | DATA | RWX | RODATA
────────────────────────────────────────────────────────────────────────────────[ REGISTERS ]────────────────────────────────────────────────────────────────────────────────
 RAX  0x0
 RBX  0x5bcc
 RCX  0x7ffffe24
 RDX  0x7ffff7dd3780 (_IO_stdfile_1_lock) ◂— 0x0
 RDI  0x0
 RSI  0x1db
 R8   0x0
 R9   0x6470d0 ◂— 0x30080040800b1102
 R10  0x1db
 R11  0xa456794f
 R12  0x7fffffffe0f0 ◂— 0x11d275138dcbcb9c
 R13  0x7ffff7dd2620 (_IO_2_1_stdout_) ◂— 0xfbad2a84
 R14  0x0
 R15  0x1
 RBP  0x16f30
 RSP  0x7fffffffe080 —▸ 0x645e8c ◂— 0xfbad248800000000
 RIP  0x41295d (write_ldif+2813) ◂— mov    edi, dword ptr [r9 + rbp]
─────────────────────────────────────────────────────────────────────────────────[ DISASM ]──────────────────────────────────────────────────────────────────────────────────
 ► 0x41295d <write_ldif+2813>    mov    edi, dword ptr [r9 + rbp]
   0x412961 <write_ldif+2817>    shr    edi, 0x10
   0x412964 <write_ldif+2820>    cmp    edi, 0x3001
   0x41296a <write_ldif+2826>    je     write_ldif+2621 <0x41289d>
    ↓
   0x41289d <write_ldif+2621>    nop    dword ptr [rax]
   0x4128a0 <write_ldif+2624>    lea    rsp, [rsp - 0x98]
   0x4128a8 <write_ldif+2632>    mov    qword ptr [rsp], rdx
   0x4128ac <write_ldif+2636>    mov    qword ptr [rsp + 8], rcx
   0x4128b1 <write_ldif+2641>    mov    qword ptr [rsp + 0x10], rax
   0x4128b6 <write_ldif+2646>    mov    rcx, 0x4a5b
   0x4128bd <write_ldif+2653>    call   __afl_maybe_log <0x416958>
──────────────────────────────────────────────────────────────────────────────[ SOURCE (CODE) ]──────────────────────────────────────────────────────────────────────────────
In file: /home/libwab/libwab.c
   593 
   594  for( i=0; i<mrec->head.opcount; i++ ) {
   595          //VBUF_STATIC( base64buf, 10 );
   596          char *ldid;
   597 
 ► 598          if( ((mrec->oplist[i] >> 16) & 0xffff) == PR_DISPLAY_NAME)
   599          continue;
   600 
   601          if( NULL == (ldid = ldid_get_str( (mrec->oplist[i] >> 16) & 0xffff ) ) ) {
   602                  DEBUG(DB_VERBOSE2, fprintf(stderr, "Couldn't find ldid for 0x%x\n", (mrec->oplist[i] >> 16) & 0xffff); );
   603                  continue;
──────────────────────────────────────────────────────────────────────────────────[ STACK ]──────────────────────────────────────────────────────────────────────────────────
00:0000│ rsp  0x7fffffffe080 —▸ 0x645e8c ◂— 0xfbad248800000000
01:0008│      0x7fffffffe088 ◂— 0x0
02:0010│      0x7fffffffe090 —▸ 0x645e90 ◂— 0xfbad2488
03:0018│      0x7fffffffe098 —▸ 0x645e2c ◂— 0x84d000000002
04:0020│      0x7fffffffe0a0 ◂— 0x8c4
05:0028│      0x7fffffffe0a8 —▸ 0x415da9 (output_records+1449) ◂— mov    rdi, qword ptr [rip + 0x226450]
06:0030│      0x7fffffffe0b0 —▸ 0x645e90 ◂— 0xfbad2488
07:0038│      0x7fffffffe0b8 —▸ 0x645e2c ◂— 0x84d000000002
────────────────────────────────────────────────────────────────────────────────[ BACKTRACE ]────────────────────────────────────────────────────────────────────────────────
 ► f 0           41295d write_ldif+2813
   f 1           415da9 output_records+1449
   f 2           403346 main+982
   f 3     7ffff7a2d830 __libc_start_main+240
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Program received signal SIGSEGV (fault address 0x65e000)
pwndbg> p mrec->oplist[i]
Cannot access memory at address 0x65e000
pwndbg> info proc mappings                                                                                                                                                   
process 27224
Mapped address spaces:

          Start Addr           End Addr       Size     Offset objfile
            0x400000           0x43c000    0x3c000        0x0 /home/libwab/build/wabread
            0x63b000           0x63c000     0x1000    0x3b000 /home/libwab/build/wabread
            0x63c000           0x63d000     0x1000    0x3c000 /home/libwab/build/wabread
            0x63d000           0x65e000    0x21000        0x0 [heap]
      0x7ffff7809000     0x7ffff780c000     0x3000        0x0 /usr/lib/x86_64-linux-gnu/gconv/UTF-16.so
      0x7ffff780c000     0x7ffff7a0b000   0x1ff000     0x3000 /usr/lib/x86_64-linux-gnu/gconv/UTF-16.so
      0x7ffff7a0b000     0x7ffff7a0c000     0x1000     0x2000 /usr/lib/x86_64-linux-gnu/gconv/UTF-16.so
      0x7ffff7a0c000     0x7ffff7a0d000     0x1000     0x3000 /usr/lib/x86_64-linux-gnu/gconv/UTF-16.so
      0x7ffff7a0d000     0x7ffff7bcd000   0x1c0000        0x0 /lib/x86_64-linux-gnu/libc-2.23.so
      0x7ffff7bcd000     0x7ffff7dcd000   0x200000   0x1c0000 /lib/x86_64-linux-gnu/libc-2.23.so
      0x7ffff7dcd000     0x7ffff7dd1000     0x4000   0x1c0000 /lib/x86_64-linux-gnu/libc-2.23.so
      0x7ffff7dd1000     0x7ffff7dd3000     0x2000   0x1c4000 /lib/x86_64-linux-gnu/libc-2.23.so
      0x7ffff7dd3000     0x7ffff7dd7000     0x4000        0x0 
      0x7ffff7dd7000     0x7ffff7dfd000    0x26000        0x0 /lib/x86_64-linux-gnu/ld-2.23.so
      0x7ffff7fef000     0x7ffff7ff2000     0x3000        0x0 
      0x7ffff7ff4000     0x7ffff7ffb000     0x7000        0x0 /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache
      0x7ffff7ffb000     0x7ffff7ffc000     0x1000        0x0 [vdso]
      0x7ffff7ffc000     0x7ffff7ffd000     0x1000    0x25000 /lib/x86_64-linux-gnu/ld-2.23.so
      0x7ffff7ffd000     0x7ffff7ffe000     0x1000    0x26000 /lib/x86_64-linux-gnu/ld-2.23.so
      0x7ffff7ffe000     0x7ffff7fff000     0x1000        0x0 
      0x7ffffffea000     0x7ffffffff000    0x15000        0x0 [stack]
  0xffffffffff600000 0xffffffffff601000     0x1000        0x0 [vsyscall]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant