ImageMagick是美国ImageMagick Studio公司的一套开源的图象处理软件。该软件可读取、转换、写入多种格式的图片。 ImageMagick在处理带有畸形数据的文件时存在整数漏洞,远程攻击者可能诱使用户处理恶意文件控制用户系统。 ImageMagick的ReadDIBImage()函数中存在整数溢出漏洞: 558 image->columns=(unsigned long) dib_info.width ... 620 bytes_per_line=4*((image->columns*dib_info.bits_per_pixel+31)/32); 621 length=bytes_per_line*image->rows; 622 pixels=(unsigned char *) AcquireMagickMemory((size_t) MagickMax( 623 bytes_per_line,image->columns+256)*image->rows*sizeof(*pixels)); ... 629 count=ReadBlob(image,length,pixels); ... 638 status=DecodeImage(image,dib_info.compression ? MagickTrue : MagickFalse,pixels); 在558行dib_info.width为有符短型,然后会被扩展为无符长型并分配给image->columns。例如,0x8000会被扩展为0xffff8000,然后在计算分配的大小时用作了乘数。整数溢出会导致分配了不充分的堆块,之后触发堆溢出。
ImageMagick是美国ImageMagick Studio公司的一套开源的图象处理软件。该软件可读取、转换、写入多种格式的图片。 ImageMagick在处理带有畸形数据的文件时存在整数漏洞,远程攻击者可能诱使用户处理恶意文件控制用户系统。 ImageMagick的ReadDIBImage()函数中存在整数溢出漏洞: 558 image->columns=(unsigned long) dib_info.width ... 620 bytes_per_line=4*((image->columns*dib_info.bits_per_pixel+31)/32); 621 length=bytes_per_line*image->rows; 622 pixels=(unsigned char *) AcquireMagickMemory((size_t) MagickMax( 623 bytes_per_line,image->columns+256)*image->rows*sizeof(*pixels)); ... 629 count=ReadBlob(image,length,pixels); ... 638 status=DecodeImage(image,dib_info.compression ? MagickTrue : MagickFalse,pixels); 在558行dib_info.width为有符短型,然后会被扩展为无符长型并分配给image->columns。例如,0x8000会被扩展为0xffff8000,然后在计算分配的大小时用作了乘数。整数溢出会导致分配了不充分的堆块,之后触发堆溢出。