ImageMagick CLAHE漏洞分析:无符号下溢与除零错误导致内存越界和DoS攻击
漏洞详情
包信息
- NuGet包:Magick.NET-Q16-HDRI-OpenMP-arm64等多个变体
- 受影响版本:<= 14.9.0
- 已修复版本:无
漏洞描述
概述
CLAHE实现中的单一根本原因——瓦片宽度/高度变为零——产生了两种不同但相关的不安全行为。
漏洞存在于ImageMagick的MagickCore/enhance.c文件中的CLAHEImage()函数。
具体问题
无符号整数下溢 → 越界指针算术(OOB)
- 位置:MagickCore/enhance.c,约第609行
- 当tile_info.height == 0时,表达式tile_info.height - 1(无符号)回绕到一个非常大的值
- 在指针算术中使用该值会产生巨大的偏移量和OOB内存访问
除零错误
- 文件/位置:MagickCore/enhance.c,约第669-673行
- 当代码执行… / tile_info.width或… % tile_info.height而没有重新检查零值时,会导致除零崩溃
复现步骤
无符号下溢复现
环境配置
|
|
命令
|
|
输出
|
|
除零错误复现
命令
|
|
影响分析
主要影响:拒绝服务——在处理 crafted 参数或小图像时导致进程崩溃或持续资源耗尽 次要影响:OOB内存访问和内存损坏可能与其他漏洞结合实现更严重后果
修复建议
在CLAHEImage()中计算tile_info后,但在任何除法/模运算/指针算术之前应用以下补丁:
|
|
技术细节
漏洞代码位置:
- enhance.c:609:
p += (ptrdiff_t) clahe_info->width * (tile.height - 1); - enhance.c:669-673: 涉及
image->columns % tile_info.width和image->rows % tile_info.height的计算
根本原因:
- 在计算默认瓦片尺寸后缺少输入验证/边界检查
- 零值可能通过以下方式到达此点:
- 精确瓦片:CLI命令
clahe 0x0! - 小图像上的自动瓦片:当图像尺寸小于8时,默认推导结果为零
- 精确瓦片:CLI命令
参考信息
- GHSA ID: GHSA-wpp4-vqfq-v4hp
- CVE ID: CVE-2025-62594
- 提交者:Team Whys,Bug Hunting Master Program成员