首页 -> 安全研究
安全研究
绿盟月刊
绿盟安全月刊->第53期->最新漏洞
日期:2004-11-05
发布日期:2004-10-14
更新日期:2004-10-15
受影响系统:
LibTIFF LibTIFF 3.8.1
描述:
--------------------------------------------------------------------------------
CVE(CAN) ID: CAN-2004-0886
libtiff是负责对TIFF图象格式编码/解码的应用库。
libtiff处理畸形TIFF图象格式时存在多个溢出问题,远程攻击者可以利用这些漏洞可能以应用程序权限在系统上执行任意指令。
问题一 tif_next.c在RLE解码过程中存在基于堆的溢出:
off = (bp[0] * 256) + bp[1];
n = (bp[2] * 256) + bp[3];
if (cc < 4+n)
goto bad;
_TIFFmemcpy(row+off, bp+4, n);
这里的off和n可以为任意值。虽然对数据源缓冲区进行边界检查,但对目的缓冲区没有进行任何检查。
问题二 tif_thunder.c在解析RLE时存在基于堆的溢出:
case THUNDER_RUN: /* pixel run */
/*
* Replicate the last pixel n times,
* where n is the lower-order 6 bits.
*/
if (npixels & 1) {
op[0] |= lastpixel;
lastpixel = *op++; npixels++; n--;
} else
lastpixel |= lastpixel << 4;
npixels += n;
for (; n > 0; n -= 2)
*op++ = (tidataval_t) lastpixel;
其中n可以为任意值,在拷贝时缺少正确边界缓冲区检查。
问题三tif_luv.c在进行RLE解码时可能存在溢出:
for (shft = 2*8; (shft -= 8) >= 0; ) {
for (i = 0; i < npixels && cc > 0; )
if (*bp >= 128) { /* run */
rc = *bp++ + (2-128);
b = (int16)(*bp++ << shft);
cc -= 2;
while (rc--)
[*] tp[i++] |= b;
} else { /* non-run */
rc = *bp++; /* nul is noop */
while (--cc && rc--)
[*] tp[i++] |= (int16)*bp++ << shft;
标记为[*]在输出缓冲区大小上缺少充分边界缓冲区检查,可能导致溢出问题。
<*来源:chris (chris@cr-secure.net)
链接:http://marc.theaimsgroup.com/?l=bugtraq&m=109778785107450&w=2
*>
测试方法:
--------------------------------------------------------------------------------
警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
chris (chris@cr-secure.net)提供了如下测试方法:
相关的DEMO文件可从如下地址测试:
http://scary.beasts.org/misc/bad_thunder.tiff
http://scary.beasts.org/misc/bad_next.tiff
建议:
--------------------------------------------------------------------------------
厂商补丁:
LibTIFF
-------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
http://www.libtiff.org/
版权所有,未经许可,不得转载