<html>
    <head>
      <base href="https://bugzilla.libav.org/" />
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - Heap Buffer Overflow in indeo3.c parse_bintree (asan report)"
   href="https://bugzilla.libav.org/show_bug.cgi?id=1010">1010</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Heap Buffer Overflow in indeo3.c parse_bintree (asan report)
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>Libav
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>git HEAD
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>Other
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Linux
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>enhancement
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>---
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>libavcodec
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>bugzilla@libav.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>jan.s.ruge@gmail.com
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Created <span class=""><a href="attachment.cgi?id=638" name="attach_638" title="File triggering heap bo in parse_bintree">attachment 638</a> <a href="attachment.cgi?id=638&action=edit" title="File triggering heap bo in parse_bintree">[details]</a></span>
File triggering heap bo in parse_bintree

By fuzzing, I found a heap buffer overflow in indeo3.c
A proof of concept is added to the bugreport.
The library was compiled using clang -fsanitize=address -fsanitize-coverage=bb
git HEAD: ee164727dd64c199b87118917e674b17c25e0da3


$ gdb avplay
gdb-peda$ r crash-heap-0x1288bb7.avi > /dev/null
Starting program: /home/hammel/libav/avplay-asan crash-heap-0x1288bb7.avi >
/dev/null
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
avplay version v13_dev0-655-gee48079, Copyright (c) 2003-2016 the Libav
developers
  built on Dec 23 2016 18:14:29 with clang version 3.8.0-2ubuntu4
(tags/RELEASE_380/final)
[New Thread 0x7fffef2ff700 (LWP 26175)]
[New Thread 0x7fffee620700 (LWP 26176)]
                                       [New process 26177]
                                                          [Thread debugging
using libthread_db enabled]
                                                                               
                       Using host libthread_db library
"/lib/x86_64-linux-gnu/libthread_db.so.1".
                                                                               
                                                                               
                 [Inferior 2 (process 26177) exited with code 01]
ALSA lib confmisc.c:768:(parse_card) cannot find card '0'
ALSA lib conf.c:4292:(_snd_config_evaluate) function snd_func_card_driver
returned error: No such file or directory
ALSA lib confmisc.c:392:(snd_func_concat) error evaluating strings
ALSA lib conf.c:4292:(_snd_config_evaluate) function snd_func_concat returned
error: No such file or directory
ALSA lib confmisc.c:1251:(snd_func_refer) error evaluating name
ALSA lib conf.c:4292:(_snd_config_evaluate) function snd_func_refer returned
error: No such file or directory
ALSA lib conf.c:4771:(snd_config_expand) Evaluate error: No such file or
directory
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM default
Input #0, avi, from 'crash-heap-0x1288bb7.avi':
  Metadata:
    encoder         : Lavf57.10.2
  Duration: 00:00:01.00, start: 0.000000, bitrate: 1305 kb/s
    Stream #0:0: Video: indeo3 [IV32 / 0x32335649]
      yuv410p, 352x240
      29.97 fps, 29.97 tbn
Warning: not running or target is remote

[indeo3 @ 0x61900000c880] Read invalid number of motion vectors 1048578
[indeo3 @ 0x61900000c880] Read invalid number of motion vectors -991507753
=================================================================
==15307==ERROR: AddressSanitizer: heap-buffer-overflow on address
0x623000006dd0 at pc 0x000001115a0d bp 0x7ffe65a1df50 sp 0x7ffe65a1df48
READ of size 8 at 0x623000006dd0 thread T3
    #0 0x1115a0c  (/home/hammel/libav/libav/avplay+0x1115a0c)
    #1 0x111300e  (/home/hammel/libav/libav/avplay+0x111300e)
    #2 0x1111576  (/home/hammel/libav/libav/avplay+0x1111576)
    #3 0x110e5ef  (/home/hammel/libav/libav/avplay+0x110e5ef)
    #4 0xb428b7  (/home/hammel/libav/libav/avplay+0xb428b7)
    #5 0xb40a97  (/home/hammel/libav/libav/avplay+0xb40a97)
    #6 0xb43793  (/home/hammel/libav/libav/avplay+0xb43793)
    #7 0x50ed1a  (/home/hammel/libav/libav/avplay+0x50ed1a)
    #8 0x7ffff7b520b7  (/usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0+0x140b7)
    #9 0x7ffff7b91f58  (/usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0+0x53f58)
    #10 0x7ffff67976b9  (/lib/x86_64-linux-gnu/libpthread.so.0+0x76b9)
    #11 0x7ffff5eab82c  (/lib/x86_64-linux-gnu/libc.so.6+0x10682c)

0x623000006dd0 is located 0 bytes to the right of 6352-byte region
[0x623000005500,0x623000006dd0)
allocated by thread T0 here:
    #0 0x4bc8b8  (/home/hammel/libav/libav/avplay+0x4bc8b8)
    #1 0x28571d4  (/home/hammel/libav/libav/avplay+0x28571d4)
    #2 0xa5e5a3  (/home/hammel/libav/libav/avplay+0xa5e5a3)
    #3 0x90bcb2  (/home/hammel/libav/libav/avplay+0x90bcb2)

Thread T3 created by T0 here:
    #0 0x42e949  (/home/hammel/libav/libav/avplay+0x42e949)
    #1 0x7ffff7b91fa9  (/usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0+0x53fa9)

SUMMARY: AddressSanitizer: heap-buffer-overflow
(/home/hammel/libav/libav/avplay+0x1115a0c) 
Shadow bytes around the buggy address:
  0x0c467fff8d60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c467fff8d70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c467fff8d80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c467fff8d90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c467fff8da0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=>0x0c467fff8db0: 00 00 00 00 00 00 00 00 00 00[fa]fa fa fa fa fa
  0x0c467fff8dc0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c467fff8dd0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c467fff8de0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c467fff8df0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c467fff8e00: 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
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==15307==ABORTING


Backtrace READ:
0x1115a0c: file libavcodec/bitstream.h, line 54 refill_64()
0x111300e: file libavcodec/indeo3.c, line 780 parse_bintree()
0x1111576: file libavcodec/indeo3.c, line 873
0x110e5ef: file libavcodec/indeo3.c, line 1089
0xb428b7: file libavcodec/decode.c, line 33
0xb40a97: file libavcodec/decode.c, line 445
0xb43793: file libavcodec/decode.c, line 50

Backtrace Alloc:
0x4bc8b8: ???
0x28571d4: file libavutil/mem.c, line 116
0xa5e5a3: file libavcodec/avpacket.c, line 75
0x90bcb2: file libavformat/utils.c, line 98</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are watching all bug changes.</li>
      </ul>
    </body>
</html>