安全研究

安全漏洞
libtiff Directory Entry计数整数溢出漏洞

发布日期:2004-12-21
更新日期:2004-12-22

受影响系统:
LibTIFF LibTIFF 3.7.0
LibTIFF LibTIFF 3.5.7
不受影响系统:
LibTIFF LibTIFF 3.7.1
描述:
CVE(CAN) ID: CVE-2004-1308

libtiff是负责对TIFF图象格式编码/解码的应用库。

libtiff在处理'directory entry'计数时存在问题,远程攻击者可以利用这个漏洞进行基于堆的缓冲区溢出,精心构建文件数据可能以用户进程权限执行任意指令。

问题是当计算'directory entry'大小时没有充分验证用户提供的数据。一个TIFF文件会包含多个'directory entry'头字段来描述文件中的数据,其中使用一个计数器和偏移值来计算判断大小和定位数据,如果'directory entry'类型是TIFF_ASCII或TIFF_UNDEFINED,if_dirread.c文件的CheckMalloc就会为这些条目内容分配空间:

cp = CheckMalloc(tif, dp->tdir_count+1, 1, mesg); if( (ok = (cp && TIFFFetchString(tif, dp, cp))) != 0 )    cp[dp->tdir_count] = '\0';  /* XXX */

如果tdir_count设置为0xffffffff,会导致函数调用分配0字节内存,然后后续的内存拷贝会导致缓冲区溢出,精心构建TIFF文件,可能以用户进程权限执行任意指令。

<*来源:infamous41md (infamous41md@hotpop.com
  
  链接:http://www.idefense.com/application/poi/display?id=174&type=vulnerabilities
*>

建议:
临时解决方法:

如果您不能立刻安装补丁或者升级,NSFOCUS建议您采取以下措施以降低威胁:

* 可采用如下补丁:

--- tif_dirread.c.bak 2004-12-19 21:04:00.000000000 +0300+++ tif_dirread.c 2004-12-19 21:04:03.000000000 +0300@@ -71,7 +71,7 @@  /*   * XXX: Check for integer overflow.   */- if (elem_size && bytes / elem_size == nmemb)+ if (nmemb && elem_size && bytes / elem_size == nmemb)   cp = (char*)_TIFFmalloc(bytes);   if (cp == NULL)

厂商补丁:

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

http://www.libtiff.org/

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