ClamAV get_unicode_name()单字节堆溢出漏洞
发布日期:2008-11-09
更新日期:2008-11-10
受影响系统:ClamAV ClamAV 0.94
不受影响系统:ClamAV ClamAV 0.94.1
描述:
BUGTRAQ ID:
32207
CVE(CAN) ID:
CVE-2008-5050
Clam AntiVirus是Unix的GPL杀毒工具包,很多邮件网关产品都在使用。
ClamAV中负责解析VBA项目文件的代码中存在单字节堆溢出漏洞,如果用户发送了带有恶意附件的邮件的话,就可能导致以clamd进程的权限执行任意指令。
具体来讲,向libclamav/vba_extract.c中的get_unicode_name()函数传送了特定的name缓冲区就可以触发这个溢出:
101 static char *
102 get_unicode_name(const char *name, int size, int big_endian)
103 {
104 int i, increment;
105 char *newname, *ret;
106
107 if((name == NULL) || (*name == '\0') || (size <= 0))
108 return NULL;
109
110 newname = (char *)cli_malloc(size * 7);
首先将name缓冲区的size乘以7用于分配目标缓冲区newname。如果name缓冲区仅包含有匹配特殊标准的字符(c & 0x80 || !isprint(c)) && (c >= 10 || c < 0)且设置了big_endian的话,以下循环每次在源缓冲区name中找到一个字符就会向所分配的目标缓冲区newname写入7个字符,这就可以完全填充目标缓冲区。在143行的循环后,就会写入终止NUL字节并覆盖堆上所分配的缓冲区。
143 *ret = '\0';
144
145 /* Saves a lot of memory */
146 ret = cli_realloc(newname, (ret - newname) + 1);
147 return ret ? ret : newname;
148 }
<*来源:Moritz Jodeit (
moritz@jodeit.org)
链接:
http://marc.info/?l=bugtraq&m=122624716807236&w=2
http://secunia.com/advisories/32663/
*>
建议:
厂商补丁:
ClamAV
------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
http://freshmeat.net/redir/clamav/29355/url_tgz/clamav-0.94.1.tar.gz浏览次数:2556
严重程度:0(网友投票)