ImageMagick CLAHE: 无符号整数下溢与除零导致越界指针运算和进程崩溃(DoS)· CVE-2025-62594 · GitHub Advisory Database
漏洞详情
Dependabot 警报: 0
受影响包与版本
包: nuget/Magick.NET-Q16-HDRI-OpenMP-arm64 (NuGet) 受影响版本: <= 14.9.0 已修复版本: 无
包: nuget/Magick.NET-Q16-HDRI-OpenMP-x64 (NuGet) 受影响版本: <= 14.9.0 已修复版本: 无
包: nuget/Magick.NET-Q16-HDRI-arm64 (NuGet) 受影响版本: <= 14.9.0 已修复版本: 无
包: nuget/Magick.NET-Q16-HDRI-x64 (NuGet) 受影响版本: <= 14.9.0 已修复版本: 无
包: nuget/Magick.NET-Q16-OpenMP-arm64 (NuGet) 受影响版本: <= 14.9.0 已修复版本: 无
包: nuget/Magick.NET-Q16-OpenMP-x64 (NuGet) 受影响版本: <= 14.9.0 已修复版本: 无
包: nuget/Magick.NET-Q16-arm64 (NuGet) 受影响版本: <= 14.9.0 已修复版本: 无
包: nuget/Magick.NET-Q16-x64 (NuGet) 受影响版本: <= 14.9.0 已修复版本: 无
包: nuget/Magick.NET-Q8-OpenMP-arm64 (NuGet) 受影响版本: <= 14.9.0 已修复版本: 无
包: nuget/Magick.NET-Q8-OpenMP-x64 (NuGet) 受影响版本: <= 14.9.0 已修复版本: 无
包: nuget/Magick.NET-Q8-arm64 (NuGet) 受影响版本: <= 14.9.0 已修复版本: 无
包: nuget/Magick.NET-Q8-x64 (NuGet) 受影响版本: <= 14.9.0 已修复版本: 无
描述
摘要
ImageMagick 的 CLAHE 实现中存在一个根本原因——图块(tile)宽度或高度变为零——导致了两种不同但相关的危险行为。
漏洞存在于 ImageMagick 的 MagickCore/enhance.c 文件中的 CLAHEImage() 函数。
- 无符号整数下溢 → 越界指针运算(OOB):当
tile_info.height == 0时,表达式tile_info.height - 1(无符号)会回绕为一个非常大的值;在指针运算中使用该值会产生巨大的偏移量和越界内存访问(导致内存损坏、SIGSEGV 或资源耗尽)。 - 除以零/模零:代码中在未重新检查零值的情况下执行
... / tile_info.width或... % tile_info.height,导致在启用消毒工具时立即出现除以零崩溃,或在运行时中止。
这两种行为都由相同的无效图块条件触发(例如,CLI 命令 -clahe 0x0! 或对于非常小的图像,自动图块推导 dim >> 3 == 0)。
详情
-
无符号下溢(可导致越界)
- 位置:
MagickCore/enhance.c,大约第 609 行 - 测试版本:7.1.2-8 (本地 ASan/UBSan 构建)
- 易受攻击的代码 (
enhance.c: 609):1p += (ptrdiff_t) clahe_info->width * (tile.height - 1); - 根本原因:
如果
tile.height == 0,则(tile.height - 1)会下溢到UINT_MAX。 与clahe_info->width相乘会得到一个接近SIZE_MAX的巨大值。 将此值加到指针p上会导致指针算术下溢。
- 位置:
-
除以零
- 文件/位置:
MagickCore/enhance.c,大约第 669 行 - 测试版本:7.1.2-8 (本地 ASan/UBSan 构建)
- 易受攻击的代码 (
enhance.c: 669-673):1 2 3 4 5if ((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 的图像,除非进行限制,否则结果为零。
- 精确指定图块: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→ 内存区域损坏。1./magick -size 10x10 xc:black -clahe 0x0 null:→ 显著的内存消耗和内存区域损坏迹象。1./magick -size 2000x2000 xc:black -clahe 0x0 null:→ 内存使用量更大;进程似乎正在积极消耗缓存和地址空间。1./magick -size 4000x4000 xc:black -clahe 0x0 null:→ 内存使用量进一步上升并开始耗尽可用缓存。如果持续运行,进程可能在持续尝试分配后崩溃(DoS)。1./magick -size 8000x8000 xc:black -clahe 0x0 null:
除以零
- 环境:启用 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: - 输出:
1ERROR: ... undefined behavior: division by zero - 注意:在未启用消毒工具的情况下,进程可能仅以
Aborted终止(仍是 DoS)。
影响
- 主要影响:拒绝服务 —— 当通过 CLI 或 API 处理恶意构造的参数或微小图像时,导致崩溃或持续的资源耗尽(内存/缓存颠簸)。攻击者可以通过
-clahe 0x0!命令或向使用 ImageMagick 的服务上传非常小的图像来轻易触发。 - 次要影响(理论上):越界内存访问和内存损坏可能与其他漏洞结合,导致更严重的后果;然而,仅凭这些概念验证并未证明能实现可靠的代码执行。
建议的具体补丁代码片段
在 CLAHEImage() 函数中,在图块尺寸计算完成后,但在任何除法/模运算/指针运算之前应用:
|
|
关于 exact_tiles_requested 的说明:如果 CLI/Wand 解析器已经公开了是否存在 !,则使用它。如果没有,则添加一个解析时标志,以便 CLAHEImage 能够知道 0 是字面值还是自动推导值。
致谢
- 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
时间线
- dlemstra 发布于 ImageMagick/ImageMagick – Oct 26, 2025
- 由国家漏洞数据库发布 – Oct 27, 2025
- 发布到 GitHub Advisory Database – Oct 27, 2025
- 已审核 – Oct 27, 2025
- 最后更新 – Oct 31, 2025
严重程度
中等 CVSS 总分: 4.7 / 10
CVSS v3 基础指标
- 攻击向量(AV):本地 (L)
- 攻击复杂度(AC):高 (H)
- 所需权限(PR):无 (N)
- 用户交互(UI):需要 (R)
- 范围(S):未改变 (U)
- 机密性影响(C):无 (N)
- 完整性影响(I):无 (N)
- 可用性影响(A):高 (H)
CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:N/I:N/A:H
EPSS 分数: 0.013% (第2百分位)
弱点
- CWE-119 – 对内存缓冲区操作的限制不当
- CWE-191 – 整数下溢(回绕)
- CWE-369 – 除以零
标识符
- CVE ID: CVE-2025-62594
- GHSA ID: GHSA-wpp4-vqfq-v4hp
源代码
ImageMagick/ImageMagick
报告者
- amethyst0225
- jin-156
- hanbunny
- yosiimich