安全研究

安全漏洞
wvWare多个整数溢出漏洞

发布日期:2006-10-25
更新日期:2006-10-27

受影响系统:
wvWare wvWare 1.2.2
不受影响系统:
wvWare wvWare 1.2.3
描述:
BUGTRAQ  ID: 20761
CVE(CAN) ID: CVE-2006-4513

wvWare是一个用于装载和解析Microsoft Word文件的库。

WV库的实现上存在多个整数溢出漏洞,攻击者可能利用这些漏洞在用户机器上执行任意指令。

WV库在解析文档时没有检查溢出情况便使用常数乘以用户所提供的整数值:

    35  int
    36  wvGetLFO_records (LFO ** lfo, LFOLVL ** lfolvl, LVL ** lvl, U32 *nolfo,
    37                    U32 * nooflvl, U32 offset, U32 len, wvStream *fd)
    38  {
    ..
    47      for (i = 0; i < *nolfo; i++)
    48          *nooflvl += (*lfo)[i].clfolvl;
    ..
    59      *lfolvl = (LFOLVL *) wvMalloc (sizeof (LFOLVL) * *nooflvl);
    60      *lvl = (LVL *) wvMalloc (sizeof (LVL) * *nooflvl);

在47和48行,每从文件读取8位的值*nolfo迭代循环便将*nooflvl加1,59和60行使用所计算出的值为两个不同的动态结构数组分配内存。由于没有执行输入验证,可能会出现整数溢出,导致堆溢出情况。

此外,WV库还可能没有检查溢出情况便将两个用户提供的整数值相乘:

    89  int
    90  wvGetLFO_PLF (LFO ** lfo, U32 * nolfo, U32 offset, U32 len, wvStream * fd)
   ...
   101            *nolfo = read_32ubit (fd);
   ...
   104            *lfo = (LFO *) wvMalloc (*nolfo * sizeof (LFO));
   ...
   112            for (i = 0; i < *nolfo; i++)
   113                wvGetLFO (&((*lfo)[i]), fd);

攻击者所提供的数据是从101行的文件读取的。在104行,基于所提供的数字乘以结构的大小分配了结构数的内存,因此任何大于2^^32 / sizeof(LFO)的值都会导致整数溢出。112和113行显示了用于将数据读取到新分配堆缓冲区的循环。如果出现了整数溢出,循环就会将数据储存到所分配堆缓冲区末尾之外的范围。

<*来源:infamous41md (infamous41md@hotpop.com
  
  链接:http://labs.idefense.com/intelligence/vulnerabilities/display.php?id=434
        http://labs.idefense.com/intelligence/vulnerabilities/display.php?id=433
*>

建议:
厂商补丁:

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

http://prdownloads.sourceforge.net/wvware/wv-1.2.4.tar.gz?modtime=1161798556&big_mirror=0&filesize=629554

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