*** This bug is a security vulnerability ***

You have been subscribed to a public security bug by Mike Salvatore 
(mikesalvatore):

Distributor ID: Ubuntu
Description:    Ubuntu 18.04.2 LTS
Release:        18.04
Codename:       bionic

unzip:
  Installed: 6.0-21ubuntu1
  Candidate: 6.0-21ubuntu1

The current version of unzip will crash with a heap overflow. I have
attached crash.zip to reproduce the issue. Normal unpacking or testing
the archive with -t argument is enough to trigger the bug. This is the
only place that I have reported the issue to.

ASAN:
==13994==ERROR: AddressSanitizer: heap-buffer-overflow on address 
0x62500000490f at pc 0x7f6f788eb8f9 bp 0x7ffd1c67ec30 sp 0x7ffd1c67e3c0
WRITE of size 8210 at 0x62500000490f thread T0
    #0 0x7f6f788eb8f8 in __interceptor_vsprintf 
(/usr/lib/x86_64-linux-gnu/libasan.so.4+0x9e8f8)
    #1 0x7f6f788ebc86 in __interceptor_sprintf 
(/usr/lib/x86_64-linux-gnu/libasan.so.4+0x9ec86)
    #2 0x55b5a10ccc87 in UzpPassword fileio.c:1594
    #3 0x55b5a1097ddb in decrypt crypt.c:513
    #4 0x55b5a10b6f2e in extract_or_test_entrylist extract.c:1284
    #5 0x55b5a10b6f2e in extract_or_test_files extract.c:586
    #6 0x55b5a1101f24 in do_seekable process.c:987
    #7 0x55b5a1108e56 in process_zipfiles process.c:401
    #8 0x55b5a1093566 in unzip unzip.c:1278
    #9 0x7f6f7826db96 in __libc_start_main 
(/lib/x86_64-linux-gnu/libc.so.6+0x21b96)
    #10 0x55b5a108afb9 in _start (/home/user/unzip-asan/unzip-6.0/unzip+0x17fb9)

0x62500000490f is located 0 bytes to the right of 8207-byte region 
[0x625000002900,0x62500000490f)
allocated by thread T0 here:
    #0 0x7f6f7892bb50 in __interceptor_malloc 
(/usr/lib/x86_64-linux-gnu/libasan.so.4+0xdeb50)
    #1 0x55b5a10ccbfc in UzpPassword fileio.c:1593

SUMMARY: AddressSanitizer: heap-buffer-overflow 
(/usr/lib/x86_64-linux-gnu/libasan.so.4+0x9e8f8) in __interceptor_vsprintf
Shadow bytes around the buggy address:
  0x0c4a7fff88d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c4a7fff88e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c4a7fff88f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c4a7fff8900: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c4a7fff8910: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=>0x0c4a7fff8920: 00[07]fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c4a7fff8930: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c4a7fff8940: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c4a7fff8950: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c4a7fff8960: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c4a7fff8970: 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
==13994==ABORTING

GDB:
*** buffer overflow detected ***: /home/user/unzip-dbg/unzip-6.0/unzip 
terminated

Program received signal SIGABRT, Aborted.
__GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
51      ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
#1  0x00007ffff7814801 in __GI_abort () at abort.c:79
#2  0x00007ffff785d897 in __libc_message (action=action@entry=(do_abort | 
do_backtrace), 
    fmt=fmt@entry=0x7ffff798a988 "*** %s ***: %s terminated\n") at 
../sysdeps/posix/libc_fatal.c:181
#3  0x00007ffff7908cff in __GI___fortify_fail_abort 
(need_backtrace=need_backtrace@entry=true, 
    msg=msg@entry=0x7ffff798a905 "buffer overflow detected") at 
fortify_fail.c:33
#4  0x00007ffff7908d21 in __GI___fortify_fail (msg=msg@entry=0x7ffff798a905 
"buffer overflow detected")
    at fortify_fail.c:44
#5  0x00007ffff7906a10 in __GI___chk_fail () at chk_fail.c:28
#6  0x00007ffff7905f29 in _IO_str_chk_overflow (fp=<optimized out>, 
c=<optimized out>) at vsprintf_chk.c:31
#7  0x00007ffff7862494 in __GI__IO_default_xsputn (f=0x7fffffffd8b0, 
data=<optimized out>, n=11)
    at genops.c:417
#8  0x00007ffff782f9aa in _IO_vfprintf_internal (s=s@entry=0x7fffffffd8b0, 
    format=format@entry=0x555555578b90 <PasswPrompt> "[%s] %s password: ", 
ap=ap@entry=0x7fffffffd9f0)
    at vfprintf.c:1674
#9  0x00007ffff7905fcb in ___vsprintf_chk (
    s=0x5555558902e0 "[crash.zip] 
dri^G^G^G^G^G^G^G^G^G^G^G^G^G^G^G^G^G^G^G^G"..., flags=1, slen=8207, 
format=0x555555578b90 <PasswPrompt> "[%s] %s password: ", 
    args=args@entry=0x7fffffffd9f0) at vsprintf_chk.c:82
#10 0x00007ffff7905efa in ___sprintf_chk (
    s=s@entry=0x5555558902e0 "[crash.zip] 
dri^G^G^G^G^G^G^G^G^G^G^G^G^G^G^G^G"..., flags=flags@entry=1, 
slen=slen@entry=8207, 
    format=format@entry=0x555555578b90 <PasswPrompt> "[%s] %s password: ") at 
sprintf_chk.c:31
#11 0x0000555555562c95 in sprintf (__fmt=<synthetic pointer>, 
    __s=0x5555558902e0 "[crash.zip] 
dri^G^G^G^G^G^G^G^G^G^G^G^G^G^G^G^G^G^G^G"...) at 
/usr/include/x86_64-linux-gnu/bits/stdio2.h:33
#12 UzpPassword (pG=<optimized out>, rcnt=<optimized out>, pwbuf=0x555555890280 
'\a' <repeats 88 times>, "! ", 
    size=81, zfn=0x5555558715c0 <G+988384> "crash.zip", 
    efn=0x555555870420 <G+983872> "dri", '\a' <repeats 197 times>...) at 
fileio.c:1594
---Type <return> to continue, or q <return> to quit---
#13 0x000055555555adf3 in decrypt (passwrd=<optimized out>) at crypt.c:513
#14 0x000055555555de54 in extract_or_test_entrylist (numchunk=numchunk@entry=1, 
    pfilnum=pfilnum@entry=0x7fffffffdc58, 
pnum_bad_pwd=pnum_bad_pwd@entry=0x7fffffffdc60, 
    pold_extra_bytes=pold_extra_bytes@entry=0x7fffffffdc68, 
pnum_dirs=pnum_dirs@entry=0x7fffffffdc54, 
    pdirlist=pdirlist@entry=0x7fffffffdc70, error_in_archive=51) at 
extract.c:1284
#15 0x0000555555560488 in extract_or_test_files () at extract.c:586
#16 0x00005555555682b2 in do_seekable (lastchance=lastchance@entry=0) at 
process.c:987
#17 0x00005555555691f7 in process_zipfiles () at process.c:401
#18 0x000055555555a58e in unzip (argc=<optimized out>, argv=<optimized out>) at 
unzip.c:1278
#19 0x00007ffff77f5b97 in __libc_start_main (main=0x555555558190 <main>, 
argc=3, argv=0x7fffffffdf28, 
    init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, 
stack_end=0x7fffffffdf18)
    at ../csu/libc-start.c:310
#20 0x00005555555581da in _start ()

** Affects: unzip (Ubuntu)
     Importance: Undecided
         Status: New

-- 
Heap Buffer Overflow in UzpPassword
https://bugs.launchpad.net/bugs/1824530
You received this bug notification because you are a member of Ubuntu Bugs, 
which is subscribed to the bug report.

-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to