安全研究

安全漏洞
VLC媒体播放器demux\tta.c TTA文件处理堆溢出漏洞

发布日期:2008-08-16
更新日期:2008-08-19

受影响系统:
VideoLAN VLC Media Player 0.8.6i
描述:
BUGTRAQ  ID: 30718
CVE(CAN) ID: CVE-2008-3732

VLC Media Player是一款免费的媒体播放器。

VLC媒体播放器的modules/demux/tta.c文件的Open()函数中存在整数溢出漏洞:

    #define TTA_FRAMETIME 1.04489795918367346939
    .
    .
    .
    int         i_seektable_size = 0, i;
    .
    .
    .
    /* Read the metadata */
    es_format_Init( &fmt, AUDIO_ES, VLC_FOURCC( 'T', 'T', 'A', '1' ) );
    fmt.audio.i_channels = GetWLE( &p_header[6] );
    fmt.audio.i_bitspersample = GetWLE( &p_header[8] );
    fmt.audio.i_rate = GetDWLE( &p_header[10] );

    p_sys->i_datalength = GetDWLE( &p_header[14] );
    p_sys->i_framelength = TTA_FRAMETIME * fmt.audio.i_rate;

    p_sys->i_totalframes = p_sys->i_datalength / p_sys->i_framelength +
                       ((p_sys->i_datalength % p_sys->i_framelength) ? 1 : 0);
    p_sys->i_currentframe = 0;

    i_seektable_size = sizeof(uint32_t)*p_sys->i_totalframes;
    p_seektable = (uint8_t *)malloc( i_seektable_size );
    stream_Read( p_demux->s, p_seektable, i_seektable_size );
    p_sys->pi_seektable = (uint32_t *)malloc(i_seektable_size);

    for( i = 0; i < p_sys->i_totalframes; i++ )
         p_sys->pi_seektable[i] = GetDWLE( &p_seektable[i*4] );

如果用户受骗打开了特制的TTA文件的话,就可以触发堆溢出,导致执行任意指令。

<*来源:g_ (g_@orange-bat.com
  
  链接:http://secunia.com/advisories/31512/
        http://www.orange-bat.com/adv/2008/adv.08.16.txt
        http://security.gentoo.org/glsa/glsa-200809-06.xml
*>

测试方法:

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

http://milw0rm.com/sploits/2008-vlc.dos.tta

建议:
厂商补丁:

Gentoo
------
Gentoo已经为此发布了一个安全公告(GLSA-200809-06)以及相应补丁:
GLSA-200809-06:VLC: Multiple vulnerabilities
链接:http://security.gentoo.org/glsa/glsa-200809-06.xml

所有VLC用户都应升级到最新版本:

      # emerge --sync
      # emerge --ask --oneshot --verbose ">=3Dmedia-video/vlc-0.8.6i-r2"

浏览次数:3149
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障