VLC媒体播放器XSPF文件处理内存破坏漏洞
发布日期:2008-10-14
更新日期:2008-10-17
受影响系统:VideoLAN VLC Media Player 0.9.2
不受影响系统:VideoLAN VLC Media Player 0.9.4
描述:
BUGTRAQ ID:
31758
CVE(CAN) ID:
CVE-2008-4558
VLC Media Player是一款免费的媒体播放器。
VLC媒体播放器支持基于XML的XSPF播放列表格式。XSPF播放列表中包含有一些属性,如identifier、location、title和duration等。其中identifier属性是用于说明音轨列表中音轨位置的数字值。
VLC媒体播放器的XSPF播放列表格式解析器(demux/playlist/xspf.c)在使用identifier属性值索引堆上写入数据的数组之前没有正确的执行边界检查。解析器读取了音轨的identifier属性并使用标准C库的atoi函数将这个值转换为int类型,然后保存到demux_sys_t结构的i_identifier字段:
/-----------
575 else if( !strcmp( p_handler->name, "identifier" ) )
576 {
577 p_demux->p_sys->i_identifier = atoi( psz_value );
578 }
- -----------/
之后在501-502行解析器将i_identifier与i_tracklist_entries做比较,后一个字段是用于记录已成功解析的音轨列表项数目的计数器。如果i_identifier小于i_tracklist_entries的话,就会使用i_identifier的值索引pp_tracklist数组,并在该位置(505行)写入p_new_input。
/-----------
501 if( p_demux->p_sys->i_identifier <
502 p_demux->p_sys->i_tracklist_entries )
503 {
504 p_demux->p_sys->pp_tracklist[
505 p_demux->p_sys->i_identifier ] = p_new_input;
506 }
- -----------/
由于XSPF解析器在索引所要写入数组之前没有执行边界检查,且i_identifier为用户可控,攻击者可以通过p_new_input覆盖任意内存位置。以下是有反汇编的有漏洞代码段:
/-----------
70246981 . 39C2 CMP EDX,EAX ;
i_identifier < i_tracklist_entries?
70246983 . 7D 29 JGE SHORT libplayl.702469AE
70246985 . 8B2B MOV EBP,DWORD PTR DS:[EBX] ;
EBP = pp_tracklist = 0
70246987 . 8B7C24 44 MOV EDI,DWORD PTR SS:[ESP+44] ;
EDI = p_new_input
7024698B . 897C95 00 MOV DWORD PTR SS:[EBP+EDX*4],EDI ;
Saves p_new_input in pp_tracklist[i_identifier]
- -----------/
<*来源:Francisco Falcon
链接:
http://secunia.com/advisories/32267/
http://marc.info/?l=bugtraq&m=122408433102621&w=2
*>
测试方法:
警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
http://www.milw0rm.com/exploits/6756建议:
厂商补丁:
VideoLAN
--------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
http://www.videolan.org/vlc/浏览次数:3056
严重程度:0(网友投票)