安全研究

安全漏洞
LibTIFF库整数溢出拒绝服务漏洞

发布日期:2004-10-14
更新日期:2004-10-15

受影响系统:
LibTIFF LibTIFF 3.8.1
描述:
CVE(CAN) ID: CVE-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
*>

建议:
厂商补丁:

LibTIFF
-------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

http://www.libtiff.org/

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