漏洞摘要
CVE-2025-62171是ImageMagick图像处理库中BMP解码器(ReadBMP)的一个整数溢出漏洞。虽然早期漏洞CVE-2025-57803声称已在ImageMagick 7.1.2-2中修复,但该补丁并不完整且无效。截至最新版本7.1.2-5,该漏洞仍然存在,攻击者可通过一个恶意构造的58字节BMP文件触发AddressSanitizer崩溃,导致拒绝服务(DoS)。
受影响版本
- ImageMagick:< 7.1.2-2(原始报告版本)以及 7.1.2-2 至 7.1.2-5(补丁不完整)
- 相关NuGet包(Magick.NET):所有版本号低于 14.9.0 的
Magick.NET-Q16-AnyCPU、Magick.NET-Q16-HDRI-AnyCPU、Magick.NET-Q16-HDRI-x86、Magick.NET-Q16-x86、Magick.NET-Q8-AnyCPU、Magick.NET-Q8-x86。
平台与配置要求:
- 仅影响 32位系统(如 i386, i686, armv7l 等),要求
size_t为 4 字节。64位系统不受影响。 - 需要手动修改了资源限制:必须提高了默认的宽度、高度和面积限制。使用默认ImageMagick资源限制的系统不易受攻击。
漏洞详情(根本原因分析)
易受攻击的代码位置
文件:coders/bmp.c
版本:7.1.2-5
行号:1120-1122
不完整的补丁
|
|
补丁失败的原因
攻击向量(32位系统):
-
输入BMP头信息:
- 宽度:536,870,912 (0x20000000)
- 高度:1
- 每像素位数:32
-
在32位系统上的计算:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15extent = 536,870,912 × 32 = 17,179,869,184 (0x400000000) // 32位截断: 0x400000000 & 0xFFFFFFFF = 0x00000000 ← 溢出归零! bytes_per_line = 4 × ((0 + 31) / 32) = 4 × 0 = 0 BMPOverflowCheck(0, 1): return (1 != 0) && (0 > 4294967295UL/1) return True && (0 > 4294967295) return True && False return False ← 未能检测到溢出!检查失败是因为:
- 溢出发生在第1120行(
extent计算)。 - 由于32位截断,
extent变为0。 bytes_per_line被计算为0(第1121行)。BMPOverflowCheck(0, 1)返回False(未检测到溢出)。- 代码继续执行并使用损坏的值,最终导致ASan崩溃。
- 溢出发生在第1120行(
概念验证(PoC)
最小的58字节BMP文件
十六进制转储:
|
|
关键字段:
- 偏移量 0x12:宽度 =
00 00 00 20= 0x20000000 (536,870,912) - 偏移量 0x16:高度 =
01 00 00 00= 1 - 偏移量 0x1C:每像素位数 =
20 00= 32
Python生成器
|
|
复现步骤
环境设置
|
|
使用AddressSanitizer构建(32位,关键!)
|
|
触发漏洞
|
|
AddressSanitizer 输出示例
|
|
影响
攻击场景
- 攻击者创建一个58字节的恶意BMP文件。
- 将其上传到使用ImageMagick(且在32位系统上)的Web服务。
- ImageMagick尝试处理该图像。
- 整数溢出触发AddressSanitizer崩溃。
- 服务变得不可用(拒绝服务)。
现实世界中的潜在目标
- 提供图像处理的网络托管平台。
- 带有缩略图生成功能的CDN服务。
- 遗留嵌入式系统。
- 运行32位Linux的物联网设备。
- 使用32位基础镜像的Docker容器。
建议的修复方案
正确的补丁
溢出检查必须在乘法运算之前进行:
|
|
替代方案:使用64位算术
|
|
致谢
- wooseokdotkim (wooseokdotkim@gmail.com)
参考资料
- GHSA-9pp9-cfwx-54rm
- https://nvd.nist.gov/vuln/detail/CVE-2025-62171
- ImageMagick/ImageMagick@cea1693
- https://github.com/dlemstra/Magick.NET/releases/tag/14.9.0
- https://lists.debian.org/debian-lts-announce/2025/10/msg00019.html
漏洞信息
- CVE ID: CVE-2025-62171
- GHSA ID: GHSA-9pp9-cfwx-54rm
- 严重等级: 中危 (CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:N/I:N/A:H,总分 4.4)
- 弱点枚举: CWE-190 - 整数溢出或回绕