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(网友投票)