安全研究

安全漏洞
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(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障