CVE-2025-62171CVE-2025-62171是ImageMagick开源图像处理软件套件中BMP解码器存在的一个整数溢出漏洞。该漏洞影响ImageMagick 7.1.2-7之前版本和6.9.13-32之前版本。漏洞位于coders/bmp.c文件中,当解码BMP图像时,计算图像列数与每像素位数(bits per pixel)的乘积以确定extent值时会发生整数溢出。在32位系统中,size_t类型为4字节,攻击者可以通过构造特定尺寸的恶意BMP文件,使乘法运算结果溢出并环绕为零。值得注意的是,该漏洞仅影响32位构建版本的ImageMagick,且需要管理员手动将默认的资源限制(宽度、高度、面积)调整超出默认值才会受到影响。64位系统由于size_t为8字节,不会受到此漏洞影响。此外,为修复CVE-2025-57803而添加的溢出检查被放置在溢出发生之后,导致该检查无效。该漏洞已在ImageMagick 7.1.2-7和6.9.13-32版本中修复。CVSS 3.1评分为5.9分,属于中危级别,主要影响为可用性(Availability: High),攻击者可通过网络远程利用,无需认证和用户交互即可触发拒绝服务攻击。
该漏洞的核心问题在于BMP解码器中extent值的计算逻辑。在coders/bmp.c文件中,当解析BMP图像时,代码会执行类似 `image->columns * bits_per_pixel` 的乘法运算来计算bytes_per_line等关键参数。在32位系统中,size_t为4字节无符号整数,其最大值为4,294,967,295(约42亿)。当width设置为536,870,912(0x20000000)且bits_per_pixel为32时,乘积为536,870,912 * 32 = 17,179,869,184,超出了32位无符号整数的最大值,导致整数溢出并环绕为0。关键问题在于:1)原代码中为修复CVE-2025-57803而添加的溢出检查逻辑位置不当——检查发生在乘法运算之后,而非之前,因此无法阻止溢出发生;2)当bytes_per_line变为0后,后续的内存分配和数据处理将基于错误的参数,可能导致除零错误、缓冲区分配异常或内存损坏,最终造成拒绝服务。攻击者仅需构造一个58字节的最小化BMP文件即可触发此漏洞,文件结构包含14字节的BMP文件头和40字节的BITMAPINFOHEADER以及4字节的像素数据。该漏洞的利用条件较为苛刻:仅影响32位系统且需要修改默认资源限制,但一旦满足条件,攻击可通过网络远程实施,无需任何用户交互。