ImageMagick TIM解码器整数溢出漏洞分析(仅限32位系统)
漏洞概述
ImageMagick的TIM(PSX TIM)图像解析器中存在一个关键的整数溢出漏洞。该漏洞位于ReadTIMImage函数(文件:coders/tim.c)内。当在32位系统(或size_t为32位的系统)上处理特定尺寸的TIM图像时,可能导致越界读取,进而引发任意内存数据泄露。
漏洞细节
受影响组件
- 软件包: ImageMagick
- 受影响文件:
coders/tim.c
漏洞代码分析
在ReadTIMImage函数中,代码从文件头读取宽度(width)和高度(height)值(均为16位),随后执行以下计算:
|
|
此处,width和height直接相乘并乘以2,未对乘法结果进行溢出检查。
触发条件
在32位系统上,当width和height的值都很大时(例如,两者均接近65535),2 * width * height的计算结果可能超出32位整数的表示范围,发生整数溢出。溢出后的值会“回绕”成一个较小的数值。
漏洞影响
- 内存分配错误:由于
image_size计算溢出,后续通过AcquireQuantumMemory函数进行的内存分配会基于错误的小尺寸值。 - 越界读取:后续的图像处理操作(如像素数据读取)会依据原始的、较大的
width和height维度进行,从而访问到分配内存边界之外的数据。 - 安全后果:攻击者可利用此漏洞构造特定的TIM图像文件,在受影响的系统上触发越界读取,可能导致敏感内存信息(如进程内存内容)泄露。
影响范围
- 仅限32位系统:此漏洞的利用依赖于32位环境下的整数溢出行为。
- 受影响版本:所有低于修复版本的ImageMagick及相关NuGet包(见下文)。
受影响软件包与版本
| 软件包(NuGet) | 受影响版本 | 已修复版本 |
|---|---|---|
| Magick.NET-Q16-AnyCPU | < 14.10.0 | 14.10.0 |
| Magick.NET-Q16-HDRI-AnyCPU | < 14.10.0 | 14.10.0 |
| Magick.NET-Q16-HDRI-x86 | < 14.10.0 | 14.10.0 |
| Magick.NET-Q16-x86 | < 14.10.0 | 14.10.0 |
| Magick.NET-Q8-AnyCPU | < 14.10.0 | 14.10.0 |
| Magick.NET-Q8-x86 | < 14.10.0 | 14.10.0 |
漏洞标识
- CVE ID: CVE-2025-66628
- GHSA ID: GHSA-6hjr-v6g4-3fm8
- CWE分类: CWE-125 - 越界读取
严重性评估
- CVSS v3.1 评分: 7.5(高危)
- 基本指标:
- 攻击向量(AV):网络(N)
- 攻击复杂度(AC):低(L)
- 所需权限(PR):无(N)
- 用户交互(UI):无(N)
- 影响范围(S):未改变(U)
- 机密性影响(C):高(H)
- 完整性影响(I):无(N)
- 可用性影响(A):无(N)
解决方案
用户应尽快将ImageMagick及相关软件包升级至已修复的版本(14.10.0或更高版本)。
参考链接
- 漏洞修复提交:dlemstra/Magick.NET@2dfa08e
- GitHub安全公告:GHSA-6hjr-v6g4-3fm8