CVE-2025-62594:ImageMagick CLAHE漏洞分析
漏洞概述
在ImageMagick的CLAHE实现中存在一个根本原因:当分块宽度或高度变为零时,会产生两种不同但相关的不安全行为。这些漏洞存在于ImageMagick的MagickCore/enhance.c文件的CLAHEImage()函数中。
漏洞详情
1. 无符号整数下溢导致越界指针运算
- 位置:
MagickCore/enhance.c,约第609行 - 受影响版本:测试于7.1.2-8(本地ASan/UBSan构建)
- 漏洞代码:
1 2enhance.c: 609 p += (ptrdiff_t) clahe_info->width * (tile.height - 1); - 根本原因:
如果
tile.height == 0,则(tile.height - 1)下溢至UINT_MAX。与clahe_info->width相乘会产生一个接近SIZE_MAX的巨大值。将此值加到p会导致指针算术下溢。
2. 除零错误
- 文件/位置:
MagickCore/enhance.c,约第669行 - 受影响版本:测试于7.1.2-8(本地ASan/UBSan构建)
- 漏洞代码:
1 2 3 4 5 6enhance.c: 669-673 if ((image->columns % tile_info.width) != 0) tile_info.x=(ssize_t) (tile_info.width-(image->columns % tile_info.width)); tile_info.y=0; if ((image->rows % tile_info.height) != 0) tile_info.y=(ssize_t) (tile_info.height-(image->rows % tile_info.height)); - 根本原因:
计算默认分块尺寸后缺少输入验证/边界检查:如果
tile_info.width或tile_info.height为0,则会触发除零错误。零值可以通过以下方式到达此点:- 精确分块:CLI命令
-clahe 0x0!(!强制直接使用零)。 - 小图像上的自动分块:当请求的分块为0(无
!)时,代码会从图像尺寸推导默认值(例如dim >> 3)。对于尺寸小于8的图像,除非进行钳制,否则结果为0。
- 精确分块:CLI命令
复现步骤
无符号下溢
- 环境:启用AddressSanitizer和UndefinedBehaviorSanitizer构建。
1 2export UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1 export ASAN_OPTIONS=abort_on_error=1:allocator_may_return_null=1:detect_leaks=0 - 命令:
1./magick xc:black -clahe 0x0 null: - 输出:
其他测试命令(如不同尺寸的图像)会导致内存区域损坏和显著的资源消耗。
1 2MagickCore/enhance.c:609:6: runtime error: addition of unsigned offset overflowed SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior MagickCore/enhance.c:609:6 in CLAHEImage
除零错误
- 环境:启用ASan/UBSan构建。
1 2export UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1 export ASAN_OPTIONS=abort_on_error=1:allocator_may_return_null=1:detect_leaks=0 - 命令:
1./magick -size 16x2 gradient: -type TrueColor -depth 8 -clahe 0x0! null: - 输出:进程终止,显示“Aborted”(构成拒绝服务)。
影响
- 主要影响:拒绝服务——当通过CLI或API处理特制参数或小图像时,导致崩溃或持续的资源耗尽(内存/缓存抖动)。攻击者可以通过
-clahe 0x0!或向使用ImageMagick的服务上传非常小的图像来轻松触发。 - 次要影响:越界内存访问和内存损坏可能与其他漏洞结合以实现更严重的后果;然而,仅从这些PoC中未演示出可靠的代码执行。
建议的补丁代码片段
在CLAHEImage()中,在计算tile_info之后、进行任何除法/取模/指针运算之前应用:
|
|
致谢 Team Whys Bug Hunting Master Program, HSpace/Findthegap Youngmin Kim (kunshim@naver.com) Woojin Park (@jin-156, 1203kids@gmail.com) Youngin Won (@amethyst0225, youngin04@korea.ac.kr) Siyeon Han (@hanbunny, kokosyeon@gmail.com) Shinyoung Won (@yosiimich, yosimich123@gmail.com)
参考链接
- GHSA-wpp4-vqfq-v4hp
- https://nvd.nist.gov/vuln/detail/CVE-2025-62594
- ImageMagick/ImageMagick@7b47fe3
漏洞信息
- CVE ID: CVE-2025-62594
- GHSA ID: GHSA-wpp4-vqfq-v4hp
- 严重程度: 中等(CVSS评分4.7)
- CVSS向量: CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:N/I:N/A:H
- 弱点标识:
- CWE-119: 内存缓冲区边界操作限制不当
- CWE-191: 整数下溢(回绕)
- CWE-369: 除零错误