VideoLAN VLC media player是法国VideoLAN组织开发的一款免费、开源的跨平台多媒体播放器(也是一个多媒体框架)。该产品支持播放多种介质(文件、光盘等)、多种音视频格式(WMV, MP3等)等。 VLC Media Player处理用户请求数据时存在缓冲区溢出漏洞,远程攻击者可能利用此漏洞通过诱使用户处理恶意数据控制用户系统。 --------------------------------------------------- A] 字幕处理缓冲区溢出 --------------------------------------------------- VLC在处理字幕时仅检查是否存在与加载视频同名的ssa文件及可能的字幕文件夹。用于处理MicroDvd、SSA和Vplayer字幕格式的函数中存在多个栈溢出漏洞,可能允许攻击者执行任意代码。modules\demux\subtitle.c文件中有漏洞的代码如下: static int ParseMicroDvd( demux_t *p_demux, subtitle_t *p_subtitle ) ... char buffer_text[MAX_LINE + 1]; ... if( sscanf( s, \"{\\%d}{}\\%[^\r\n]\", &i_start, buffer_text ) == 2 || sscanf( s, \"{\\%d}{\\%d}\\%[^\r\n]\", &i_start, &i_stop, buffer_text ) == 3) static int ParseSSA( demux_t *p_demux, subtitle_t *p_subtitle ) ... char buffer_text[ 10 * MAX_LINE]; char buffer_text2[ 10 * MAX_LINE]; ... if( sscanf( s, \"Dialogue: \\%[^,],\\%d:\\%d:\\%d.\\%d,\\%d:\\%d:\\%d.\\%d,\\%[^\r\n]\", buffer_text2, &h1, &m1, &s1, &c1, &h2, &m2, &s2, &c2, buffer_text ) == 10 )...
VideoLAN VLC media player是法国VideoLAN组织开发的一款免费、开源的跨平台多媒体播放器(也是一个多媒体框架)。该产品支持播放多种介质(文件、光盘等)、多种音视频格式(WMV, MP3等)等。 VLC Media Player处理用户请求数据时存在缓冲区溢出漏洞,远程攻击者可能利用此漏洞通过诱使用户处理恶意数据控制用户系统。 --------------------------------------------------- A] 字幕处理缓冲区溢出 --------------------------------------------------- VLC在处理字幕时仅检查是否存在与加载视频同名的ssa文件及可能的字幕文件夹。用于处理MicroDvd、SSA和Vplayer字幕格式的函数中存在多个栈溢出漏洞,可能允许攻击者执行任意代码。modules\demux\subtitle.c文件中有漏洞的代码如下: static int ParseMicroDvd( demux_t *p_demux, subtitle_t *p_subtitle ) ... char buffer_text[MAX_LINE + 1]; ... if( sscanf( s, \"{\\%d}{}\\%[^\r\n]\", &i_start, buffer_text ) == 2 || sscanf( s, \"{\\%d}{\\%d}\\%[^\r\n]\", &i_start, &i_stop, buffer_text ) == 3) static int ParseSSA( demux_t *p_demux, subtitle_t *p_subtitle ) ... char buffer_text[ 10 * MAX_LINE]; char buffer_text2[ 10 * MAX_LINE]; ... if( sscanf( s, \"Dialogue: \\%[^,],\\%d:\\%d:\\%d.\\%d,\\%d:\\%d:\\%d.\\%d,\\%[^\r\n]\", buffer_text2, &h1, &m1, &s1, &c1, &h2, &m2, &s2, &c2, buffer_text ) == 10 ) static int ParseVplayer( demux_t *p_demux, subtitle_t *p_subtitle ) ... char buffer_text[MAX_LINE + 1]; ... if( sscanf( p, \"\\%d:\\%d:\\%d\\%[ :]\\%[^\r\n]\", &h, &m, &s, &c, buffer_text ) == 5 )