Menu

#55 malformed png triggers SIGABRT (glibc detected invalid next size (fast))

v1.0 (example)
closed-fixed
security (6)
5
2016-04-05
2015-10-11
geeknik
No

ptiPNG version "Hg"
Using opnglib version @OPNGLIB_VERSION@
Using opngreduc
Using libpng version 1.4.12
Using zlib version 1.2.7-optipng
Using pnmio version 0.3
Using minitiff version 0.1
Using cexcept version 2.0.1-optipng

While fuzzing this build of optipng with American Fuzzy Lop, I discovered that this malformed png triggers a SIGABRT.

./optipng test09.png

(gdb) r test09.png
Starting program: /home/geeknik/png-tmp/optipng test09.png
Processing: test09.png
** Warning: Error reading BMP file
   78x12336 pixels, BMP format
   4 bits/pixel, 48 colors in palette
   file size = 0 bytes
Reducing:
   2 bits/pixel, 4 colors in palette
** Error: The previous warning(s) indicate recoverable errors
** Rerun this program using -fix
*** glibc detected *** /home/geeknik/png-tmp/optipng: free(): invalid next size (fast): 0x0000000000791070 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x75be6)[0x7ffff7845be6]
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x6c)[0x7ffff784a98c]
/home/geeknik/png-tmp/optipng[0x427abe]
/home/geeknik/png-tmp/optipng[0x414d61]
/home/geeknik/png-tmp/optipng[0x402d8c]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xfd)[0x7ffff77eeead]
/home/geeknik/png-tmp/optipng[0x40c13d]
======= Memory map: ========
00400000-004d0000 r-xp 00000000 fe:00 1351596                            /home/geeknik/png-tmp/optipng
006d0000-006d1000 rw-p 000d0000 fe:00 1351596                            /home/geeknik/png-tmp/optipng
006d1000-007a7000 rw-p 00000000 00:00 0                                  [heap]
7ffff0000000-7ffff0021000 rw-p 00000000 00:00 0 
7ffff0021000-7ffff4000000 ---p 00000000 00:00 0 
7ffff75ba000-7ffff75cf000 r-xp 00000000 fe:00 1048580                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7ffff75cf000-7ffff77cf000 ---p 00015000 fe:00 1048580                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7ffff77cf000-7ffff77d0000 rw-p 00015000 fe:00 1048580                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7ffff77d0000-7ffff7951000 r-xp 00000000 fe:00 1169701                    /lib/x86_64-linux-gnu/libc-2.13.so
7ffff7951000-7ffff7b51000 ---p 00181000 fe:00 1169701                    /lib/x86_64-linux-gnu/libc-2.13.so
7ffff7b51000-7ffff7b55000 r--p 00181000 fe:00 1169701                    /lib/x86_64-linux-gnu/libc-2.13.so
7ffff7b55000-7ffff7b56000 rw-p 00185000 fe:00 1169701                    /lib/x86_64-linux-gnu/libc-2.13.so
7ffff7b56000-7ffff7b5b000 rw-p 00000000 00:00 0 
7ffff7b5b000-7ffff7bdc000 r-xp 00000000 fe:00 1169695                    /lib/x86_64-linux-gnu/libm-2.13.so
7ffff7bdc000-7ffff7ddb000 ---p 00081000 fe:00 1169695                    /lib/x86_64-linux-gnu/libm-2.13.so
7ffff7ddb000-7ffff7ddc000 r--p 00080000 fe:00 1169695                    /lib/x86_64-linux-gnu/libm-2.13.so
7ffff7ddc000-7ffff7ddd000 rw-p 00081000 fe:00 1169695                    /lib/x86_64-linux-gnu/libm-2.13.so
7ffff7ddd000-7ffff7dfd000 r-xp 00000000 fe:00 1169713                    /lib/x86_64-linux-gnu/ld-2.13.so
7ffff7fdd000-7ffff7fe0000 rw-p 00000000 00:00 0 
7ffff7ff8000-7ffff7ffb000 rw-p 00000000 00:00 0 
7ffff7ffb000-7ffff7ffc000 r-xp 00000000 00:00 0                          [vdso]
7ffff7ffc000-7ffff7ffd000 r--p 0001f000 fe:00 1169713                    /lib/x86_64-linux-gnu/ld-2.13.so
7ffff7ffd000-7ffff7ffe000 rw-p 00020000 fe:00 1169713                    /lib/x86_64-linux-gnu/ld-2.13.so
7ffff7ffe000-7ffff7fff000 rw-p 00000000 00:00 0 
7ffffffde000-7ffffffff000 rw-p 00000000 00:00 0                          [stack]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]

Program received signal SIGABRT, Aborted.
0x00007ffff7802165 in *__GI_raise (sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
64  ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.

==12215== Command: /home/geeknik/png-tmp/optipng test09.png
==12215== 
Processing: test09.png
==12215== Invalid write of size 1
==12215==    at 0x4479B1: ??? (in /home/geeknik/png-tmp/optipng)
==12215==    by 0x44B1CB: ??? (in /home/geeknik/png-tmp/optipng)
==12215==    by 0x44693D: ??? (in /home/geeknik/png-tmp/optipng)
==12215==    by 0x424D39: ??? (in /home/geeknik/png-tmp/optipng)
==12215==    by 0x411C03: ??? (in /home/geeknik/png-tmp/optipng)
==12215==    by 0x402D8B: ??? (in /home/geeknik/png-tmp/optipng)
==12215==    by 0x50D2EAC: (below main) (libc-start.c:244)
==12215==  Address 0x55afe58 is 0 bytes after a block of size 40 alloc'd
==12215==    at 0x4C26B3F: malloc (vg_replace_malloc.c:299)
==12215==    by 0x45D509: ??? (in /home/geeknik/png-tmp/optipng)
==12215==    by 0x45A73A: ??? (in /home/geeknik/png-tmp/optipng)
==12215==    by 0x449B7C: ??? (in /home/geeknik/png-tmp/optipng)
==12215==    by 0x44693D: ??? (in /home/geeknik/png-tmp/optipng)
==12215==    by 0x424D39: ??? (in /home/geeknik/png-tmp/optipng)
==12215==    by 0x411C03: ??? (in /home/geeknik/png-tmp/optipng)
==12215==    by 0x402D8B: ??? (in /home/geeknik/png-tmp/optipng)
==12215==    by 0x50D2EAC: (below main) (libc-start.c:244)
==12215== 
** Warning: Error reading BMP file
   78x12336 pixels, BMP format
   4 bits/pixel, 48 colors in palette
   file size = 0 bytes
Reducing:
   2 bits/pixel, 4 colors in palette
** Error: The previous warning(s) indicate recoverable errors
** Rerun this program using -fix

Status report:
   1 file(s) have been processed.
   1 erroneous file(s) have been encountered.
==12215== 
==12215== HEAP SUMMARY:
==12215==     in use at exit: 0 bytes in 0 blocks
==12215==   total heap usage: 12,347 allocs, 12,347 frees, 623,032 bytes allocated
==12215== 
==12215== All heap blocks were freed -- no leaks are possible
==12215== 
==12215== For counts of detected and suppressed errors, rerun with: -v
==12215== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 2 from 2)
1 Attachments

Discussion

  • Ramona Truta

    Ramona Truta - 2016-03-21
    • labels: --> security
    • status: open --> open-accepted
    • assigned_to: Ramona Truta
     
  • Ramona Truta

    Ramona Truta - 2016-03-21

    Thanks. I am marking this as security-sensitive. This is the same issue as in bug 57, and I will make a new release, sometime this week, possibly later today.

    If it is possible for me to have your real name, I would like to give you credit as a co-discoverer.

     
  • Ramona Truta

    Ramona Truta - 2016-04-04
    • status: open-accepted --> closed-fixed
     
  • Ramona Truta

    Ramona Truta - 2016-04-04

    Fixed in version 0.7.6.

     
  • Ramona Truta

    Ramona Truta - 2016-04-05
    • private: Yes --> No
     

Log in to post a comment.