CVE:CVE-2004-0386
CNNVD:CNNVD-200405-036
MPlayer是一款基于Linux的电影播放程序。
MPlayer由于不正确处理部分HTTP头字段数据，远程攻击者可以利用这个漏洞进行缓冲区溢出攻击，可能以进程权限在系统上执行任意指令。
当从web服务器请求一文件，MPlayer会分配一缓冲区存储URL转换的字符串数据，由于没有进行充分边界检查，可导致缓冲区溢出，问题代码如下：
libmpdemux/http.c:http_build_request (line 178):
   if( http_hdr->uri==NULL ) http_set_uri( http_hdr， "/");
   else {
      uri = (char*)malloc(strlen(http_hdr->uri)*2);     [1]
      if( uri==NULL ) {
         mp_msg(MSGT_NETWORK，MSGL_ERR，"Memory allocation failed\n");
         return NULL;
     }
     url_escape_string( uri， http_hdr->uri );           [2]
URL转义字符串会使一个字符转换为3个，如空格由%22代替，因此[1]中的空间分配不够充分，导致[2]中发生溢出。
solution:Upgrade mplayer mplayer to a higher version than 0.90,0.90_pre,0.90_rc,0.91,1.0_pre1,1.0_pre2,1.0_pre3,and avoid the version 0.90,0.90_pre,0.90_rc,0.91,1.0_pre1,1.0_pre2,1.0_pre3; Upgrade gentoo linux to a higher version than 0.5,0.7,1.1a,1.2,1.4,1.4:rc1,1.4:rc2,1.4:rc3,and avoid the version 0.5,0.7,1.1a,1.2,1.4,1.4:rc1,1.4:rc2,1.4:rc3; Upgrade mandrakesoft mandrake_linux to a higher version than 9.2,10.0,and avoid the version 9.2,10.0