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行显示了用于将数据读取到新分配堆缓冲区的循环。如果出现了整数溢出,循环就会将数据储存到所分配堆缓冲区末尾之外的范围。
wvWare wvWare 1.2.2
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
http://prdownloads.sourceforge.net/wvware/wv-1.2.4.tar.gz?modtime=1161798556&big_mirror=0&filesize=629554
暂无评论