BUGTRAQ ID: 24658
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)文件的话,就可能触发这个溢出,导致执行任意指令。
Real Networks RealPlayer 10.5-GOLD
Real Networks Helix Player 10.5-GOLD
临时解决方法:
如果您不能立刻安装补丁或者升级,NSFOCUS建议您采取以下措施以降低威胁:
* 为CLSID CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA设置kill-bit。
厂商补丁:
Real Networks
-------------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
<a href="http://www.real.com" target="_blank">http://www.real.com</a>
暂无评论