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值执行验证便在内存拷贝操作中使用,因此可能导致堆溢出。
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值执行验证便在内存拷贝操作中使用,因此可能导致堆溢出。