BUGTRAQ ID: 28784
CVE(CAN) ID: CVE-2008-0314
Clam AntiVirus是Unix的GPL杀毒工具包,很多邮件网关产品都在使用。
ClamAV中负责解压用PeSpin加密所包装的PE库的代码存在堆溢出漏洞,攻击者可能通过诱使用户处理畸形文件控制用户系统。
以下为libclamav/spin.c中的有漏洞代码段:
417 key32 = cli_readint32(ep+0x2fee);
…
427 cli_dbgmsg("spin: Resources (sect%d) appear to be compressed\n\tuncompressed
offset %x, len %x\n\tcompressed offset %x, len %x\n", j, sections[j].rva, key32 -
sections[j].rva, key32, sections[j].vsz - (key32 - sections[j].rva));
428
429 if ( (curr=(char )cli_malloc(sections[j].vsz)) != NULL ) {
430 memcpy(curr, src + sections[j].raw, key32 - sections[j].rva); / Uncompressed part /
431 memset(curr + key32 - sections[j].rva, 0, sections[j].vsz - (key32 -
sections[j].rva)); / bzero */
在417行从文件中读取了32位的值到key32变量中,然后使用429行的sections[j].vsz值分配堆缓冲区,在430行memcpy调用将数据拷贝到了新分配的缓冲区。由于没有对key32、sections[j].raw和sections[j].rva值执行验证便在内存拷贝操作中使用,因此可能导致堆溢出。
ClamAV 0.92.1
临时解决方法:
禁止扫描PE文件:
如果在使用clamscan的话,以–no-pe选项运行clamscan。
如果在使用clamdscan的话,在clamd.conf文件中将ScanPE选项设置为no。
厂商补丁:
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
<a href=“http://www.clamav.net/” target=“_blank”>http://www.clamav.net/</a>