CVE-2020-10809: Heap overflow in decompress.c – HDF5 – 1.13.0

Heap overflow in decompress.c – HDF5 – 1.13.0

Loginsoft-2020-1002

11 March, 2020

CVE Number

CVE-2020-10809

CWE

CWE – 122 : Heap-based Buffer Overflow

Product Details

HDF5 is a data model, library, and file format for storing and managing data. It supports an unlimited variety of data types and is designed for flexible and efficient I/O and for high volume and complex data. HDF5 is portable and is extensible, allowing applications to evolve in their use of HDF5. The HDF5 Technology suite includes tools and applications for managing, manipulating, viewing, and analyzing data in the HDF5 format.

URL: https://www.hdfgroup.org/downloads

Vulnerable Versions

1.13.0

Vulnerability Details

During our research we observed Heap overflow in the function Decompress() located in decompress.c. The same be triggered by sending a crafted file to the gif2h5 binary. It allows an attacker to cause Denial of Service.

SYNOPSIS

We observed that in function Gif2Mem() in the line gifImageDesc[ImageCount-1]->Image = Decompress(gifImageDesc[ImageCount-1], gifHead); from this it calls another function Decompress () located in decompress.c to convert gif to hdf image, here in line OutCode[OutCount++] = Suffix[CurCode]; at the time of assignment operation left side interger pointer OutCode size is much small then right side interger pointer Suffix.

vulnerable Source code
       276                   while (CurCode > DataMask) {
     277                    if (OutCount >= 1024) {
     278                        /*return error message*/
     279                    }
     280   
 →  281                             OutCode[OutCount++] = Suffix[CurCode];
     282                    CurCode = Prefix[CurCode];
     283                }
     284   
    285                /* The last code in the chain is treated as raw data. */
     286                FinChar = CurCode & DataMask;
Analysis

DEBUG:
GDB:

  
Starting program: /hdf5/build1/bin/gif2h5 $POC /dev/null
 Unknown Block Separator Character: 0xa
 Unknown Block Separator Character: 0x42
 Unknown Block Separator Character: 0xa0
 Unknown Block Separator Character: 0x8
 Unknown Block Separator Character: 0xf8
 Unknown Block Separator Character: 0x60
 Unknown Block Separator Character: 0xd
 Unknown Block Separator Character: 0xf8
 Unknown Block Separator Character: 0xa0
 Unknown Block Separator Character: 0x8
 Unknown Block Separator Character: 0x2e
 Unknown Block Separator Character: 0x15
 Unknown Block Separator Character: 0xe3
 Unknown Block Separator Character: 0xc
 Unknown Block Separator Character: 0xca
 Unknown Block Separator Character: 0x2
 Unknown Block Separator Character: 0x16
 Unknown Block Separator Character: 0xce
 Unknown Block Separator Character: 0xe3
 Unknown Block Separator Character: 0x34
 Unknown Block Separator Character: 0xee
 Unknown Block Separator Character: 0xa0
 Unknown Block Separator Character: 0xa0
 Unknown Block Separator Character: 0xa5
 Unknown Block Separator Character: 0x50
 Unknown Block Separator Character: 0x64
 Unknown Block Separator Character: 0x60
 Unknown Block Separator Character: 00
 Unknown Block Separator Character: 0x8
 Unknown Block Separator Character: 0xd2
 Unknown Block Separator Character: 0xe4
 Unknown Block Separator Character: 0xee
 Unknown Block Separator Character: 0x22
 Unknown Block Separator Character: 0x98
 Unknown Block Separator Character: 0x4e
 Unknown Block Separator Character: 0x63
 Unknown Block Separator Character: 0x4d
 Unknown Block Separator Character: 0xc3
 Unknown Block Separator Character: 0x44
 Unknown Extension Label: 0x87
 Unknown Block Separator Character: 0xaa
 Unknown Block Separator Character: 0x32
 Unknown Block Separator Character: 0x5c
 Unknown Block Separator Character: 0xd3
 Unknown Block Separator Character: 0xbe
 Unknown Block Separator Character: 0x9a
 Unknown Block Separator Character: 0x75
 Unknown Block Separator Character: 0x3e
 Unknown Block Separator Character: 0xed
 Unknown Block Separator Character: 0x93
 Unknown Block Separator Character: 0xa8
 Unknown Block Separator Character: 0x66
 Unknown Block Separator Character: 0x11
 Unknown Block Separator Character: 0x32
 Unknown Block Separator Character: 0xff
 Unknown Block Separator Character: 0x92
 Unknown Block Separator Character: 0x4a
 Unknown Block Separator Character: 0x98
 Unknown Block Separator Character: 0xfc
 Unknown Block Separator Character: 0xe2
 Unknown Block Separator Character: 0x60
 Unknown Block Separator Character: 0xec
 Unknown Block Separator Character: 0x42
 Unknown Block Separator Character: 0x36
 Unknown Block Separator Character: 0x34
 Unknown Block Separator Character: 0x72
 Unknown Block Separator Character: 0x2d
 Unknown Block Separator Character: 0x62
 Unknown Block Separator Character: 0xe1
 Unknown Block Separator Character: 0x9c
 Unknown Block Separator Character: 0x76
 Unknown Block Separator Character: 0x60
 Unknown Block Separator Character: 0x16
 Unknown Block Separator Character: 0xa
 Unknown Block Separator Character: 0x40
 Unknown Block Separator Character: 0x11
 Unknown Block Separator Character: 0x2e
 Unknown Block Separator Character: 0x41
 Unknown Block Separator Character: 0x11
 Unknown Block Separator Character: 0x5c
 Unknown Block Separator Character: 0x1
 Unknown Block Separator Character: 0xf
 Unknown Block Separator Character: 0x30
 Unknown Block Separator Character: 0x41
 Unknown Block Separator Character: 0x11
 Unknown Block Separator Character: 0x95
 Unknown Block Separator Character: 0x2e
 Unknown Block Separator Character: 0x29
 Unknown Block Separator Character: 0x9c
 Unknown Block Separator Character: 0x2e
 Unknown Block Separator Character: 0x29
 Unknown Block Separator Character: 0x9c
 Unknown Block Separator Character: 0x63
 Unknown Block Separator Character: 0x9
 Unknown Block Separator Character: 0x67
 Unknown Block Separator Character: 0x81
 Unknown Block Separator Character: 0x16
 Unknown Block Separator Character: 0x7a
 Unknown Block Separator Character: 0x1
 Unknown Block Separator Character: 0x65
 Unknown Block Separator Character: 0x58
 Unknown Block Separator Character: 0x46
 Unknown Block Separator Character: 0x18
 Unknown Block Separator Character: 0xce
 Unknown Block Separator Character: 0x2a
 Unknown Block Separator Character: 0xeb
 Unknown Block Separator Character: 0x12
 Unknown Block Separator Character: 0xb
 Unknown Block Separator Character: 0xec
 Unknown Block Separator Character: 0xac
 Unknown Block Separator Character: 0xe6
 Unknown Block Separator Character: 0x41
 Unknown Block Separator Character: 0xe0
 Unknown Block Separator Character: 0xaa
 Unknown Block Separator Character: 0x66
 Unknown Block Separator Character: 0x7c
 Unknown Block Separator Character: 0x92
 Unknown Block Separator Character: 0xae
 Unknown Block Separator Character: 0x82
 Unknown Block Separator Character: 0x12
 Unknown Block Separator Character: 0x60
 Unknown Block Separator Character: 0x3
 Unknown Block Separator Character: 0x89
 Unknown Block Separator Character: 0x28
 Unknown Block Separator Character: 0x17
 Unknown Block Separator Character: 0x64
 Unknown Block Separator Character: 0x28
 Unknown Block Separator Character: 0x97
 Unknown Block Separator Character: 0x86
 Unknown Block Separator Character: 0x25
 Unknown Block Separator Character: 0x90
 Unknown Block Separator Character: 0xf2
 Unknown Block Separator Character: 0x67
 Unknown Block Separator Character: 0x78
 Unknown Block Separator Character: 0x86
 Unknown Block Separator Character: 0x6a
 Unknown Block Separator Character: 0x90
 Unknown Block Separator Character: 0xd2
 Unknown Block Separator Character: 0xee
 Unknown Block Separator Character: 0xc2
 Unknown Block Separator Character: 0xc1
 Unknown Block Separator Character: 0x6b
 Unknown Block Separator Character: 0xac
 Unknown Block Separator Character: 0xc1
 Unknown Block Separator Character: 0xb1
 Unknown Block Separator Character: 0xc6
 Unknown Block Separator Character: 0x6
 Unknown Block Separator Character: 0x6d
 Unknown Block Separator Character: 0xac
 Unknown Block Separator Character: 0x81
 Unknown Block Separator Character: 0x17
 Unknown Block Separator Character: 0xfa
 Unknown Block Separator Character: 0x8e
 Unknown Block Separator Character: 0x6c
 Unknown Block Separator Character: 0xc6
 Unknown Block Separator Character: 0xa6
 Unknown Block Separator Character: 0xcd
 Unknown Block Separator Character: 00
 Unknown Block Separator Character: 0x11
 Unknown Block Separator Character: 0x8c
 Unknown Block Separator Character: 0x2
 Unknown Block Separator Character: 0x7
 Unknown Block Separator Character: 0x72
 Unknown Block Separator Character: 0x20
 Unknown Block Separator Character: 0xcf
 Unknown Block Separator Character: 0xf1
 Unknown Block Separator Character: 0x32
 Unknown Block Separator Character: 0x47
 Unknown Block Separator Character: 0x64
 Unknown Block Separator Character: 0x94
 Unknown Block Separator Character: 0xcb
 Unknown Block Separator Character: 00
 Unknown Block Separator Character: 0x48
 Unknown Block Separator Character: 0x61
 Unknown Block Separator Character: 0x2d
 Unknown Block Separator Character: 0xa1
 Unknown Block Separator Character: 0xab
 Unknown Block Separator Character: 0xf3
 Unknown Block Separator Character: 0x3a
 Unknown Block Separator Character: 0x8f
 Unknown Block Separator Character: 0x2e
 Unknown Block Separator Character: 0x45
 Unknown Block Separator Character: 0xf
 Unknown Block Separator Character: 0x32
 Unknown Block Separator Character: 0xd
 Unknown Block Separator Character: 0x13
 Unknown Block Separator Character: 0x2e
 Unknown Block Separator Character: 0x83
 Unknown Block Separator Character: 0x40
 Unknown Block Separator Character: 0x31
 Unknown Block Separator Character: 0xf5
 Unknown Block Separator Character: 0xd2
 Unknown Block Separator Character: 0x2d
 Unknown Block Separator Character: 0x61
 Unknown Block Separator Character: 0x56
 Unknown Block Separator Character: 0x66
 Unknown Block Separator Character: 0x49
 Unknown Block Separator Character: 0x2f
 Unknown Block Separator Character: 0x14
 Unknown Block Separator Character: 0xe
 Unknown Block Separator Character: 0xf3
 Unknown Block Separator Character: 0x1c
 Unknown Block Separator Character: 0xa
 Unknown Block Separator Character: 0x80
 Unknown Block Separator Character: 0x66
 Unknown Block Separator Character: 0x4b
 Unknown Block Separator Character: 0x2f
 Unknown Block Separator Character: 0x14
 Unknown Block Separator Character: 0xa
 Unknown Block Separator Character: 0x53
 Unknown Block Separator Character: 0x2e
 Unknown Block Separator Character: 0x9
 Unknown Block Separator Character: 0xd3
 Unknown Block Separator Character: 0x27
 Unknown Block Separator Character: 0x6a
 Unknown Block Separator Character: 0x16
 Unknown Block Separator Character: 0xf6
 Unknown Block Separator Character: 0x80
 Unknown Block Separator Character: 0x36
 Unknown Block Separator Character: 0x2e
 Unknown Block Separator Character: 0x43
 Unknown Block Separator Character: 0xa1
 Unknown Block Separator Character: 0x66
 Unknown Block Separator Character: 0x7b
 Unknown Block Separator Character: 0x76
 Unknown Block Separator Character: 0xf6
 Unknown Block Separator Character: 0xc
 Unknown Block Separator Character: 0x53
 Unknown Block Separator Character: 0x67
 Unknown Block Separator Character: 0x15
 Unknown Block Separator Character: 0x53
 Unknown Block Separator Character: 0x68
 Unknown Block Separator Character: 0xfb
 Unknown Block Separator Character: 0xd2
 Unknown Block Separator Character: 0x67
 Unknown Block Separator Character: 0x6d
 Unknown Block Separator Character: 0xd6
 Unknown Block Separator Character: 0xdc
 Unknown Block Separator Character: 0x64
 Unknown Block Separator Character: 0xcf
 Unknown Block Separator Character: 0x69
 Unknown Block Separator Character: 0x47
 Unknown Block Separator Character: 0x4f
 Unknown Block Separator Character: 0x30
 Unknown Block Separator Character: 0x7d
 Unknown Block Separator Character: 0xe7
 Unknown Block Separator Character: 0x26
 Unknown Block Separator Character: 0xea
 Unknown Block Separator Character: 0x81
 Unknown Block Separator Character: 0x78
 Unknown Block Separator Character: 0xe6
 Unknown Block Separator Character: 0x27
 Unknown Block Separator Character: 0x1d
 Unknown Block Separator Character: 0x3c
 Unknown Block Separator Character: 0xf3
 Unknown Block Separator Character: 0x7d
 Unknown Block Separator Character: 0xf0
 Unknown Block Separator Character: 0x88
 Unknown Block Separator Character: 0x36
 Unknown Block Separator Character: 0x4c
 Unknown Block Separator Character: 0x42
 Unknown Block Separator Character: 0x34
 Unknown Block Separator Character: 0xa5
 Unknown Block Separator Character: 0x27
 Unknown Block Separator Character: 0xfd
 Unknown Block Separator Character: 0x70
 Unknown Block Separator Character: 0x13
 Unknown Block Separator Character: 0x7b
 Unknown Block Separator Character: 0xb4
 Unknown Block Separator Character: 0xa7
 Unknown Block Separator Character: 0x35
 Unknown Block Separator Character: 0x2f
 Unknown Block Separator Character: 0xc2
 Unknown Block Separator Character: 0x59
 Unknown Block Separator Character: 0xcf
 Unknown Block Separator Character: 0x56
 Unknown Block Separator Character: 0xbe
 Unknown Block Separator Character: 0x66
 Unknown Block Separator Character: 0x73
 Unknown Block Separator Character: 0x7c
 Unknown Block Separator Character: 0x14
 Unknown Block Separator Character: 0xa2
 Unknown Block Separator Character: 0xfb
 Unknown Block Separator Character: 0xce
 Unknown Block Separator Character: 0xc7
 Unknown Block Separator Character: 0xd1
 Unknown Block Separator Character: 0xfe
 Unknown Block Separator Character: 0xcb
 Unknown Block Separator Character: 0xfd
 Unknown Block Separator Character: 0x4
 Unknown Block Separator Character: 0xac
 Unknown Block Separator Character: 0xfa
 Unknown Block Separator Character: 0x5e
 Unknown Block Separator Character: 0xa2
 Unknown Block Separator Character: 0xbc
 Unknown Block Separator Character: 0xe4
 Unknown Block Separator Character: 0x6f
 Unknown Block Separator Character: 0x26
 Unknown Block Separator Character: 0x68
 Unknown Block Separator Character: 0xc2
 Unknown Block Separator Character: 0x7e
 Unknown Block Separator Character: 0xf2
 Unknown Block Separator Character: 0xc1
 Unknown Block Separator Character: 0x1a
 Unknown Block Separator Character: 0xf4
 Unknown Block Separator Character: 0x27
 Unknown Block Separator Character: 0x1b
 Unknown Block Separator Character: 0xbc
 Unknown Extension Label: 0x1a
 Unknown Block Separator Character: 0xff
 Unknown Block Separator Character: 0x3c
 Unknown Block Separator Character: 0xc
 Unknown Block Separator Character: 0x39
 Unknown Block Separator Character: 0x1f
 Unknown Block Separator Character: 0x88
 Unknown Block Separator Character: 0x28
 Unknown Block Separator Character: 0xe6
 Unknown Block Separator Character: 0x46
 Unknown Block Separator Character: 0x6f
 Unknown Block Separator Character: 0xa2
 Unknown Block Separator Character: 0x2
 Unknown Block Separator Character: 0xc2
 Unknown Block Separator Character: 0x28
 Unknown Block Separator Character: 0x41
 Unknown Block Separator Character: 0x6f
 Unknown Block Separator Character: 0x4
 Unknown Block Separator Character: 0x77
 Unknown Block Separator Character: 0x28
 Unknown Block Separator Character: 0x8
 Unknown Block Separator Character: 0x57
 Unknown Block Separator Character: 0x12
 Unknown Block Separator Character: 0x14
 Unknown Block Separator Character: 0x50
 Unknown Block Separator Character: 0x19
 Unknown Block Separator Character: 0xb0
 Unknown Block Separator Character: 0x93
 Unknown Block Separator Character: 0xc4
 Unknown Block Separator Character: 0x4c
 Unknown Block Separator Character: 0x6c
 Unknown Block Separator Character: 0x16
 Unknown Block Separator Character: 0x76
 Unknown Block Separator Character: 0x20
 Unknown Block Separator Character: 0xc5
 Unknown Block Separator Character: 0x6a
 Unknown Block Separator Character: 0xed
 Unknown Block Separator Character: 0xd6
 Unknown Block Separator Character: 0x9a
 Unknown Block Separator Character: 0xa4
 Unknown Block Separator Character: 0x49
 Unknown Block Separator Character: 0xde
 Unknown Block Separator Character: 0x42
 Unknown Block Separator Character: 0x2e
 Unknown Block Separator Character: 0xf0
 Unknown Block Separator Character: 0xc4
 Unknown Block Separator Character: 0x58
 Unknown Block Separator Character: 0x6b
 Unknown Block Separator Character: 0x8a
 Unknown Block Separator Character: 0x4a
 Unknown Block Separator Character: 0x80
 Unknown Block Separator Character: 0x2d
 Unknown Block Separator Character: 0x4
 Unknown Block Separator Character: 0x8f
 Unknown Block Separator Character: 0x49
 Unknown Block Separator Character: 0xda
 Unknown Block Separator Character: 0xa4
 Unknown Block Separator Character: 0x35
 Unknown Block Separator Character: 0x5a
 Unknown Block Separator Character: 0xc3
 Unknown Block Separator Character: 0x14
 Unknown Block Separator Character: 0x5
 Unknown Block Separator Character: 0x75
 
Program received signal SIGSEGV, Segmentation fault.
 [ Legend: Modified register | Code | Heap | Stack | String ]
 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── registers ────
 $rax   : 0x15f             
$rbx   : 0x2312            
$rcx   : 0x5b2d            
$rdx   : 0xfb              
$rsp   : 0x00007fffffffdd80  →  0x000000000000ae35
 $rbp   : 0x00005555563db34c  →  0x0000000000000000
 $rsi   : 0x2e1             
$rdi   : 0x00005555563d7340  →  0x0000000000000000
 $rip   : 0x0000555555565246  →   mov DWORD PTR [rbp+rcx*4+0x0], edx
 $r8    : 0x0               
$r9    : 0x1137            
$r10   : 0x00005555563d3330  →  0x0000000000000000
 $r11   : 0x5b2d            
$r12   : 0x00007fffdf3b4010  →  0x36c36460906d06a3
 $r13   : 0x226             
$r14   : 0xff              
$r15   : 0xae35            
$eflags: [zero CARRY PARITY adjust SIGN trap INTERRUPT direction overflow RESUME virtualx86 identification]
 $cs: 0x0033 $ss: 0x002b $ds: 0x0000 $es: 0x0000 $fs: 0x0000 $gs: 0x0000 
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── stack ────
 0x00007fffffffdd80│+0x0000: 0x000000000000ae35        ← $rsp
 0x00007fffffffdd88│+0x0008: 0x0000000000000009
 0x00007fffffffdd90│+0x0010: 0x0000000000000227
 0x00007fffffffdd98│+0x0018: 0x00005555563db350  →  0x000000fb00000000
 0x00007fffffffdda0│+0x0020: 0x000001e900000171
 0x00007fffffffdda8│+0x0028: 0x00000000000001ff
 0x00007fffffffddb0│+0x0030: 0x0000020000000041 ("A"?)
 0x00007fffffffddb8│+0x0038: 0x0000011b00000040 ("@"?)
 ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── code:x86:64 ────
    0x555555565236  nop    WORD PTR cs:[rax+rax*1+0x0]
    0x555555565240  mov    edx, DWORD PTR [rdi+rax*4]
    0x555555565243  mov    r11d, ecx
  → 0x555555565246  mov    DWORD PTR [rbp+rcx*4+0x0], edx
    0x55555556524a  movsxd rax, DWORD PTR [r10+rax*4]
    0x55555556524e  add    rcx, 0x1
    0x555555565252  cmp    r14d, eax
    0x555555565255  jl     0x555555565240 
    0x555555565257  nop    
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── source:/home/aceteam/h[...].c+281 ────
     276                while (CurCode > DataMask) {
     277                    if (OutCount >= 1024) {
     278                        /*return error message*/
     279                    }
     280   
 →  281                             OutCode[OutCount++] = Suffix[CurCode];
     282                    CurCode = Prefix[CurCode];
     283                }
     284   
    285                /* The last code in the chain is treated as raw data. */
     286                FinChar = CurCode & DataMask;
 ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── threads ────
 [#0] Id 1, Name: "gif2h5", stopped, reason: SIGSEGV
 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── trace ────
 [#0] 0x555555565246 → Decompress(GifImageDesc=0x5555563d2fe0, GifHead=0x5555563d2510)
 [#1] 0x555555567d3a → Gif2Mem(MemGif=, GifMemoryStruct=0x7fffffffdea0)
 [#2] 0x5555555635fb → main(argv=, argc=)
 ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
 0x0000555555565246 in Decompress (GifImageDesc=GifImageDesc@entry=0x5555563d2fe0, GifHead=GifHead@entry=0x5555563d2510) at /hdf5/hl/tools/gif2h5/decompress.c:281
 281                       OutCode[OutCount++] = Suffix[CurCode];

gef➤  bt
 #0  0x0000555555565246 in Decompress (GifImageDesc=GifImageDesc@entry=0x5555563d2fe0, GifHead=GifHead@entry=0x5555563d2510) at /hdf5/hl/tools/gif2h5/decompress.c:281
 #1  0x0000555555567d3a in Gif2Mem (MemGif=, GifMemoryStruct=0x7fffffffdea0) at /hdf5/hl/tools/gif2h5/gif2mem.c:184
 #2  0x00005555555635fb in main (argv=, argc=) at /hdf5/hl/tools/gif2h5/gif2hdf.c:100
 gef➤  i r
 rax            0x15f           0x15f
 rbx            0x2312         0x2312
 rcx            0x5b2d         0x5b2d
 rdx            0xfb 0xfb
 rsi            0x2e1            0x2e1
 rdi            0x5555563d7340        0x5555563d7340
 rbp            0x5555563db34c       0x5555563db34c
 rsp            0x7fffffffdd80           0x7fffffffdd80
 r8             0x0   0x0
 r9             0x1137          0x1137
 r10            0x5555563d3330       0x5555563d3330
 r11            0x5b2d         0x5b2d
 r12            0x7fffdf3b4010         0x7fffdf3b4010
 r13            0x226           0x226
 r14            0xff 0xff
 r15            0xae35         0xae35
 rip            0x555555565246        0x555555565246 
 eflags         0x10287       [ CF PF SF IF RF ]
 cs             0x33 0x33
 ss             0x2b  0x2b
 ds             0x0   0x0
 es             0x0   0x0
 fs             0x0   0x0
 gs             0x0   0x0
gef➤  x/d OutCode
 0x5555563db350:           0

ASAN Output:

Unknown Block Separator Character: 0xa
 Unknown Block Separator Character: 0x42
 Unknown Block Separator Character: 0xa0
 Unknown Block Separator Character: 0x8
 Unknown Block Separator Character: 0xf8
 Unknown Block Separator Character: 0x60
 Unknown Block Separator Character: 0xd
 Unknown Block Separator Character: 0xf8
 Unknown Block Separator Character: 0xa0
 Unknown Block Separator Character: 0x8
 Unknown Block Separator Character: 0x2e
 Unknown Block Separator Character: 0x15
 Unknown Block Separator Character: 0xe3
 Unknown Block Separator Character: 0xc
 Unknown Block Separator Character: 0xca
 Unknown Block Separator Character: 0x2
 Unknown Block Separator Character: 0x16
 Unknown Block Separator Character: 0xce
 Unknown Block Separator Character: 0xe3
 Unknown Block Separator Character: 0x34
 Unknown Block Separator Character: 0xee
 Unknown Block Separator Character: 0xa0
 Unknown Block Separator Character: 0xa0
 Unknown Block Separator Character: 0xa5
 Unknown Block Separator Character: 0x50
 Unknown Block Separator Character: 0x64
 Unknown Block Separator Character: 0x60
 Unknown Block Separator Character: 00
 Unknown Block Separator Character: 0x8
 Unknown Block Separator Character: 0xd2
 Unknown Block Separator Character: 0xe4
 Unknown Block Separator Character: 0xee
 Unknown Block Separator Character: 0x22
 Unknown Block Separator Character: 0x98
 Unknown Block Separator Character: 0x4e
 Unknown Block Separator Character: 0x63
 Unknown Block Separator Character: 0x4d
 Unknown Block Separator Character: 0xc3
 Unknown Block Separator Character: 0x44
 Unknown Extension Label: 0x87
 Unknown Block Separator Character: 0xaa
 Unknown Block Separator Character: 0x32
 Unknown Block Separator Character: 0x5c
 Unknown Block Separator Character: 0xd3
 Unknown Block Separator Character: 0xbe
 Unknown Block Separator Character: 0x9a
 Unknown Block Separator Character: 0x75
 Unknown Block Separator Character: 0x3e
 Unknown Block Separator Character: 0xed
 Unknown Block Separator Character: 0x93
 Unknown Block Separator Character: 0xa8
 Unknown Block Separator Character: 0x66
 Unknown Block Separator Character: 0x11
 Unknown Block Separator Character: 0x32
 Unknown Block Separator Character: 0xff
 Unknown Block Separator Character: 0x92
 Unknown Block Separator Character: 0x4a
 Unknown Block Separator Character: 0x98
 Unknown Block Separator Character: 0xfc
 Unknown Block Separator Character: 0xe2
 Unknown Block Separator Character: 0x60
 Unknown Block Separator Character: 0xec
 Unknown Block Separator Character: 0x42
 Unknown Block Separator Character: 0x36
 Unknown Block Separator Character: 0x34
 Unknown Block Separator Character: 0x72
 Unknown Block Separator Character: 0x2d
 Unknown Block Separator Character: 0x62
 Unknown Block Separator Character: 0xe1
 Unknown Block Separator Character: 0x9c
 Unknown Block Separator Character: 0x76
 Unknown Block Separator Character: 0x60
 Unknown Block Separator Character: 0x16
 Unknown Block Separator Character: 0xa
 Unknown Block Separator Character: 0x40
 Unknown Block Separator Character: 0x11
 Unknown Block Separator Character: 0x2e
 Unknown Block Separator Character: 0x41
 Unknown Block Separator Character: 0x11
 Unknown Block Separator Character: 0x5c
 Unknown Block Separator Character: 0x1
 Unknown Block Separator Character: 0xf
 Unknown Block Separator Character: 0x30
 Unknown Block Separator Character: 0x41
 Unknown Block Separator Character: 0x11
 Unknown Block Separator Character: 0x95
 Unknown Block Separator Character: 0x2e
 Unknown Block Separator Character: 0x29
 Unknown Block Separator Character: 0x9c
 Unknown Block Separator Character: 0x2e
 Unknown Block Separator Character: 0x29
 Unknown Block Separator Character: 0x9c
 Unknown Block Separator Character: 0x63
 Unknown Block Separator Character: 0x9
 Unknown Block Separator Character: 0x67
 Unknown Block Separator Character: 0x81
 Unknown Block Separator Character: 0x16
 Unknown Block Separator Character: 0x7a
 Unknown Block Separator Character: 0x1
 Unknown Block Separator Character: 0x65
 Unknown Block Separator Character: 0x58
 Unknown Block Separator Character: 0x46
 Unknown Block Separator Character: 0x18
 Unknown Block Separator Character: 0xce
 Unknown Block Separator Character: 0x2a
 Unknown Block Separator Character: 0xeb
 Unknown Block Separator Character: 0x12
 Unknown Block Separator Character: 0xb
 Unknown Block Separator Character: 0xec
 Unknown Block Separator Character: 0xac
 Unknown Block Separator Character: 0xe6
 Unknown Block Separator Character: 0x41
 Unknown Block Separator Character: 0xe0
 Unknown Block Separator Character: 0xaa
 Unknown Block Separator Character: 0x66
 Unknown Block Separator Character: 0x7c
 Unknown Block Separator Character: 0x92
 Unknown Block Separator Character: 0xae
 Unknown Block Separator Character: 0x82
 Unknown Block Separator Character: 0x12
 Unknown Block Separator Character: 0x60
 Unknown Block Separator Character: 0x3
 Unknown Block Separator Character: 0x89
 Unknown Block Separator Character: 0x28
 Unknown Block Separator Character: 0x17
 Unknown Block Separator Character: 0x64
 Unknown Block Separator Character: 0x28
 Unknown Block Separator Character: 0x97
 Unknown Block Separator Character: 0x86
 Unknown Block Separator Character: 0x25
 Unknown Block Separator Character: 0x90
 Unknown Block Separator Character: 0xf2
 Unknown Block Separator Character: 0x67
 Unknown Block Separator Character: 0x78
 Unknown Block Separator Character: 0x86
 Unknown Block Separator Character: 0x6a
 Unknown Block Separator Character: 0x90
 Unknown Block Separator Character: 0xd2
 Unknown Block Separator Character: 0xee
 Unknown Block Separator Character: 0xc2
 Unknown Block Separator Character: 0xc1
 Unknown Block Separator Character: 0x6b
 Unknown Block Separator Character: 0xac
 Unknown Block Separator Character: 0xc1
 Unknown Block Separator Character: 0xb1
 Unknown Block Separator Character: 0xc6
 Unknown Block Separator Character: 0x6
 Unknown Block Separator Character: 0x6d
 Unknown Block Separator Character: 0xac
 Unknown Block Separator Character: 0x81
 Unknown Block Separator Character: 0x17
 Unknown Block Separator Character: 0xfa
 Unknown Block Separator Character: 0x8e
 Unknown Block Separator Character: 0x6c
 Unknown Block Separator Character: 0xc6
 Unknown Block Separator Character: 0xa6
 Unknown Block Separator Character: 0xcd
 Unknown Block Separator Character: 00
 Unknown Block Separator Character: 0x11
 Unknown Block Separator Character: 0x8c
 Unknown Block Separator Character: 0x2
 Unknown Block Separator Character: 0x7
 Unknown Block Separator Character: 0x72
 Unknown Block Separator Character: 0x20
 Unknown Block Separator Character: 0xcf
 Unknown Block Separator Character: 0xf1
 Unknown Block Separator Character: 0x32
 Unknown Block Separator Character: 0x47
 Unknown Block Separator Character: 0x64
 Unknown Block Separator Character: 0x94
 Unknown Block Separator Character: 0xcb
 Unknown Block Separator Character: 00
 Unknown Block Separator Character: 0x48
 Unknown Block Separator Character: 0x61
 Unknown Block Separator Character: 0x2d
 Unknown Block Separator Character: 0xa1
 Unknown Block Separator Character: 0xab
 Unknown Block Separator Character: 0xf3
 Unknown Block Separator Character: 0x3a
 Unknown Block Separator Character: 0x8f
 Unknown Block Separator Character: 0x2e
 Unknown Block Separator Character: 0x45
 Unknown Block Separator Character: 0xf
 Unknown Block Separator Character: 0x32
 Unknown Block Separator Character: 0xd
 Unknown Block Separator Character: 0x13
 Unknown Block Separator Character: 0x2e
 Unknown Block Separator Character: 0x83
 Unknown Block Separator Character: 0x40
 Unknown Block Separator Character: 0x31
 Unknown Block Separator Character: 0xf5
 Unknown Block Separator Character: 0xd2
 Unknown Block Separator Character: 0x2d
 Unknown Block Separator Character: 0x61
 Unknown Block Separator Character: 0x56
 Unknown Block Separator Character: 0x66
 Unknown Block Separator Character: 0x49
 Unknown Block Separator Character: 0x2f
 Unknown Block Separator Character: 0x14
 Unknown Block Separator Character: 0xe
 Unknown Block Separator Character: 0xf3
 Unknown Block Separator Character: 0x1c
 Unknown Block Separator Character: 0xa
 Unknown Block Separator Character: 0x80
 Unknown Block Separator Character: 0x66
 Unknown Block Separator Character: 0x4b
 Unknown Block Separator Character: 0x2f
 Unknown Block Separator Character: 0x14
 Unknown Block Separator Character: 0xa
 Unknown Block Separator Character: 0x53
 Unknown Block Separator Character: 0x2e
 Unknown Block Separator Character: 0x9
 Unknown Block Separator Character: 0xd3
 Unknown Block Separator Character: 0x27
 Unknown Block Separator Character: 0x6a
 Unknown Block Separator Character: 0x16
 Unknown Block Separator Character: 0xf6
 Unknown Block Separator Character: 0x80
 Unknown Block Separator Character: 0x36
 Unknown Block Separator Character: 0x2e
 Unknown Block Separator Character: 0x43
 Unknown Block Separator Character: 0xa1
 Unknown Block Separator Character: 0x66
 Unknown Block Separator Character: 0x7b
 Unknown Block Separator Character: 0x76
 Unknown Block Separator Character: 0xf6
 Unknown Block Separator Character: 0xc
 Unknown Block Separator Character: 0x53
 Unknown Block Separator Character: 0x67
 Unknown Block Separator Character: 0x15
 Unknown Block Separator Character: 0x53
 Unknown Block Separator Character: 0x68
 Unknown Block Separator Character: 0xfb
 Unknown Block Separator Character: 0xd2
 Unknown Block Separator Character: 0x67
 Unknown Block Separator Character: 0x6d
 Unknown Block Separator Character: 0xd6
 Unknown Block Separator Character: 0xdc
 Unknown Block Separator Character: 0x64
 Unknown Block Separator Character: 0xcf
 Unknown Block Separator Character: 0x69
 Unknown Block Separator Character: 0x47
 Unknown Block Separator Character: 0x4f
 Unknown Block Separator Character: 0x30
 Unknown Block Separator Character: 0x7d
 Unknown Block Separator Character: 0xe7
 Unknown Block Separator Character: 0x26
 Unknown Block Separator Character: 0xea
 Unknown Block Separator Character: 0x81
 Unknown Block Separator Character: 0x78
 Unknown Block Separator Character: 0xe6
 Unknown Block Separator Character: 0x27
 Unknown Block Separator Character: 0x1d
 Unknown Block Separator Character: 0x3c
 Unknown Block Separator Character: 0xf3
 Unknown Block Separator Character: 0x7d
 Unknown Block Separator Character: 0xf0
 Unknown Block Separator Character: 0x88
 Unknown Block Separator Character: 0x36
 Unknown Block Separator Character: 0x4c
 Unknown Block Separator Character: 0x42
 Unknown Block Separator Character: 0x34
 Unknown Block Separator Character: 0xa5
 Unknown Block Separator Character: 0x27
 Unknown Block Separator Character: 0xfd
 Unknown Block Separator Character: 0x70
 Unknown Block Separator Character: 0x13
 Unknown Block Separator Character: 0x7b
 Unknown Block Separator Character: 0xb4
 Unknown Block Separator Character: 0xa7
 Unknown Block Separator Character: 0x35
 Unknown Block Separator Character: 0x2f
 Unknown Block Separator Character: 0xc2
 Unknown Block Separator Character: 0x59
 Unknown Block Separator Character: 0xcf
 Unknown Block Separator Character: 0x56
 Unknown Block Separator Character: 0xbe
 Unknown Block Separator Character: 0x66
 Unknown Block Separator Character: 0x73
 Unknown Block Separator Character: 0x7c
 Unknown Block Separator Character: 0x14
 Unknown Block Separator Character: 0xa2
 Unknown Block Separator Character: 0xfb
 Unknown Block Separator Character: 0xce
 Unknown Block Separator Character: 0xc7
 Unknown Block Separator Character: 0xd1
 Unknown Block Separator Character: 0xfe
 Unknown Block Separator Character: 0xcb
 Unknown Block Separator Character: 0xfd
 Unknown Block Separator Character: 0x4
 Unknown Block Separator Character: 0xac
 Unknown Block Separator Character: 0xfa
 Unknown Block Separator Character: 0x5e
 Unknown Block Separator Character: 0xa2
 Unknown Block Separator Character: 0xbc
 Unknown Block Separator Character: 0xe4
 Unknown Block Separator Character: 0x6f
 Unknown Block Separator Character: 0x26
 Unknown Block Separator Character: 0x68
 Unknown Block Separator Character: 0xc2
 Unknown Block Separator Character: 0x7e
 Unknown Block Separator Character: 0xf2
 Unknown Block Separator Character: 0xc1
 Unknown Block Separator Character: 0x1a
 Unknown Block Separator Character: 0xf4
 Unknown Block Separator Character: 0x27
 Unknown Block Separator Character: 0x1b
 Unknown Block Separator Character: 0xbc
 Unknown Extension Label: 0x1a
 Unknown Block Separator Character: 0xff
 Unknown Block Separator Character: 0x3c
 Unknown Block Separator Character: 0xc
 Unknown Block Separator Character: 0x39
 Unknown Block Separator Character: 0x1f
 Unknown Block Separator Character: 0x88
 Unknown Block Separator Character: 0x28
 Unknown Block Separator Character: 0xe6
 Unknown Block Separator Character: 0x46
 Unknown Block Separator Character: 0x6f
 Unknown Block Separator Character: 0xa2
 Unknown Block Separator Character: 0x2
 Unknown Block Separator Character: 0xc2
 Unknown Block Separator Character: 0x28
 Unknown Block Separator Character: 0x41
 Unknown Block Separator Character: 0x6f
 Unknown Block Separator Character: 0x4
 Unknown Block Separator Character: 0x77
 Unknown Block Separator Character: 0x28
 Unknown Block Separator Character: 0x8
 Unknown Block Separator Character: 0x57
 Unknown Block Separator Character: 0x12
 Unknown Block Separator Character: 0x14
 Unknown Block Separator Character: 0x50
 Unknown Block Separator Character: 0x19
 Unknown Block Separator Character: 0xb0
 Unknown Block Separator Character: 0x93
 Unknown Block Separator Character: 0xc4
 Unknown Block Separator Character: 0x4c
 Unknown Block Separator Character: 0x6c
 Unknown Block Separator Character: 0x16
 Unknown Block Separator Character: 0x76
 Unknown Block Separator Character: 0x20
 Unknown Block Separator Character: 0xc5
 Unknown Block Separator Character: 0x6a
 Unknown Block Separator Character: 0xed
 Unknown Block Separator Character: 0xd6
 Unknown Block Separator Character: 0x9a
 Unknown Block Separator Character: 0xa4
 Unknown Block Separator Character: 0x49
 Unknown Block Separator Character: 0xde
 Unknown Block Separator Character: 0x42
 Unknown Block Separator Character: 0x2e
 Unknown Block Separator Character: 0xf0
 Unknown Block Separator Character: 0xc4
 Unknown Block Separator Character: 0x58
 Unknown Block Separator Character: 0x6b
 Unknown Block Separator Character: 0x8a
 Unknown Block Separator Character: 0x4a
 Unknown Block Separator Character: 0x80
 Unknown Block Separator Character: 0x2d
 Unknown Block Separator Character: 0x4
 Unknown Block Separator Character: 0x8f
 Unknown Block Separator Character: 0x49
 Unknown Block Separator Character: 0xda
 Unknown Block Separator Character: 0xa4
 Unknown Block Separator Character: 0x35
 Unknown Block Separator Character: 0x5a
 Unknown Block Separator Character: 0xc3
 Unknown Block Separator Character: 0x14
 Unknown Block Separator Character: 0x5
 Unknown Block Separator Character: 0x75
 =================================================================
 ==519==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x621000003900 at pc 0x55d0424f140b bp 0x7ffc1c603e10 sp 0x7ffc1c603e00
 WRITE of size 4 at 0x621000003900 thread T0
     #0 0x55d0424f140a in Decompress /hdf5/hl/tools/gif2h5/decompress.c:281
     #1 0x55d0424f163d in Gif2Mem /hdf5/hl/tools/gif2h5/gif2mem.c:184
     #2 0x55d0424ed039 in main /hdf5/hl/tools/gif2h5/gif2hdf.c:100
     #3 0x7f8edf4f6b96 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21b96)
     #4 0x55d0424f0ac9 in _start (/hdf5/build/bin/gif2h5+0x156ac9)
 
0x621000003900 is located 0 bytes to the right of 4096-byte region [0x621000002900,0x621000003900)
 allocated by thread T0 here:
     #0 0x7f8edff46d38 in __interceptor_calloc (/usr/lib/x86_64-linux-gnu/libasan.so.4+0xded38)
     #1 0x55d0424f0e60 in Decompress /hdf5/hl/tools/gif2h5/decompress.c:170
 
SUMMARY: AddressSanitizer: heap-buffer-overflow /hdf5/hl/tools/gif2h5/decompress.c:281 in Decompress
 Shadow bytes around the buggy address:
   0x0c427fff86d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
   0x0c427fff86e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
   0x0c427fff86f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
   0x0c427fff8700: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
   0x0c427fff8710: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 =>0x0c427fff8720:[fa]fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
   0x0c427fff8730: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
   0x0c427fff8740: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
   0x0c427fff8750: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
   0x0c427fff8760: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
   0x0c427fff8770: 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
 ==519==ABORTING

Proof of Concept

./gif2h5 $POC /dev/null
Vendor Disclosure: 2020-3-10

Credit

Discovered by ACE Team – Loginsoft