ClamAV get_unicode_name()单字节堆溢出漏洞

2008-11-11T00:00:00
ID SSV:4425
Type seebug
Reporter Root
Modified 2008-11-11T00:00:00

Description

BUGTRAQ ID: 32207

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 }

ClamAV 0.94 ClamAV


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

<a href=http://freshmeat.net/redir/clamav/29355/url_tgz/clamav-0.94.1.tar.gz target=_blank>http://freshmeat.net/redir/clamav/29355/url_tgz/clamav-0.94.1.tar.gz</a>