[vlc-devel] will there be a bugfix for for the heap overflow in 0.8.6d

hannes_b at gmx.at hannes_b at gmx.at
Fri Feb 1 10:32:20 CET 2008


sorry if i missed a post in the mailing list, i searched through it but couldn't find something about it.

when will there be a 0.8.6e?

kind regards

http://aluigi.altervista.org/adv/vlcxhof-adv.txt

> #######################################################################
> 
>                              Luigi Auriemma
> 
> Application:  VideoLAN (VLC)
>               http://www.videolan.org
> Versions:     <= 0.8.6d
> Platforms:    Windows, Mac, *BSD, *nix and more
> Bug:          heap overflow in sdpplin_parse and possible heap overflow
>               in Windows
> Exploitation: remote
> Date:         08 Jan 2008
> Author:       Luigi Auriemma
>               e-mail: aluigi at autistici.org
>               web:    aluigi.org
> 
> 
> #######################################################################
> 
> 
> 1) Introduction
> 2) Bug
> 3) The Code
> 4) Fix
> 
> 
> #######################################################################
> 
> ===============
> 1) Introduction
> ===============
> 
> 
> VLC is an open source multi platform media player.
> 
> 
> #######################################################################
> 
> ======
> 2) Bug
> ======
> 
> 
> VLC uses an old version of the Xine library on which is located the
> following heap overflow:
> 
> from modules/access/rtsp/real_sdpplin.c:
> 
> sdpplin_t *sdpplin_parse(char *data) {
> 
>   sdpplin_t        *desc = malloc(sizeof(sdpplin_t));
>   sdpplin_stream_t *stream;
>   char             *buf=malloc(3200);
>   char             *decoded=malloc(3200);
>   ...
>   while (data && *data) {
>     handled=0;
> 
>     if (filter(data, "m=", &buf)) {
>     ...
> 
> static int filter(const char *in, const char *filter, char **out) {
> 
>   int flen=strlen(filter);
>   int len;
> 
>   if (!in) return 0;
> 
>   len = (strchr(in,'\n')) ? strchr(in,'\n')-in : strlen(in);
>   if (!strncmp(in,filter,flen)) {
>     if(in[flen]=='"') flen++;
>     if(in[len-1]==13) len--;
>     if(in[len-1]=='"') len--;
>     memcpy(*out, in+flen, len-flen+1);
>     (*out)[len-flen]=0;
>     return len-flen;
>   }
>   return 0;
> }
> 
> 
> so the input buffers buf and decoded (this one used only for the base64
> decoding) are overflowed during the reading of the SDP parameters.
> 
> There is also another problem affecting the Windows version of the
> player and at the moment the real cause is not clear.
> The problem seems to be a possible heap overflow during the handling of
> the RTSP data and can be replicated simply through the sending of many
> bytes at the connection, for example instead of sending
> "HTTP/1.0 200 OK" the server should send 5000 'A's.
> 
> The cause seems located in the libaccess_realrtsp plugin (since when
> VLC uses live5555 the problem doesn't happen) but the code and seems
> all correct and in fact on Linux nothing happens.
> 
> Both the problems affect the current SVN versions too.
> 
> 
> #######################################################################
> 
> ===========
> 3) The Code
> ===========
> 
> 
> for testing the main heap overflow it's enough to use a SDP data like
> the following:
> 
> m=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA...more_than_3200_chars...AAAAA
> or
> a=Title:buffer;AAAAAAAAAAAAAAAAAAAAAAAAA...more_than_6400_chars...AAAAA
> 
> while the Windows problem can be tested just binding the port 554 and
> sending 5000 chars (as already said the first connection is made by
> live5555, so keep this in mind if VLC doesn't crash immediately or
> doesn't crash at all).
> 
> 
> #######################################################################
> 
> ======
> 4) Fix
> ======
> 
> 
> No fix
> 
> 
> #######################################################################



More information about the vlc-devel mailing list