CVE:CVE-2008-0295
CNNVD:CNNVD-200801-238
VideoLAN VLC media player是法国VideoLAN组织开发的一款免费、开源的跨平台多媒体播放器（也是一个多媒体框架）。该产品支持播放多种介质（文件、光盘等）、多种音视频格式（WMV, MP3等）等。
VLC在处理畸形格式的数据时存在缓冲区溢出漏洞，远程攻击者可能利用此漏洞控制用户系统。
VLC所使用的旧版Xine库在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;
}
在读取RTSP会话的SDP参数时buf和decoded缓冲区会被溢出。
此外Windows版本的播放器的libaccess_realrtsp插件在处理RTSP数据时也存在堆溢出漏洞。如果在连接时发送了大量字节的话，就可以触发这个溢出。
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;
}
在读取RTSP会话的SDP参数时buf和decoded缓冲区会被溢出。
此外Windows版本的播放器的libaccess_realrtsp插件在处理RTSP数据时也存在堆溢出漏洞。如果在连接时发送了大量字节的话，就额可以触发这个溢出。除的邮件。
solution:Upgrade videolan vlc_media_player to a higher version than 0.8.6d,and avoid the version (,0.8.6d]