ImageMagick TIM解码器整数溢出漏洞分析(仅限32位系统)

ImageMagick的TIM图像解析器存在一个关键整数溢出漏洞,攻击者可利用此漏洞在32位系统上触发越界读取,导致任意内存数据泄露。本文详细分析了漏洞成因、影响范围及修复版本。

ImageMagick TIM解码器整数溢出漏洞分析(仅限32位系统)

漏洞概述

ImageMagick的TIM(PSX TIM)图像解析器中存在一个关键的整数溢出漏洞。该漏洞位于ReadTIMImage函数(文件:coders/tim.c)内。当在32位系统(或size_t为32位的系统)上处理特定尺寸的TIM图像时,可能导致越界读取,进而引发任意内存数据泄露。

漏洞细节

受影响组件

  • 软件包: ImageMagick
  • 受影响文件: coders/tim.c

漏洞代码分析

ReadTIMImage函数中,代码从文件头读取宽度(width)和高度(height)值(均为16位),随后执行以下计算:

1
image_size = 2 * width * height; // 第234行 - 未进行溢出检查!

此处,widthheight直接相乘并乘以2,未对乘法结果进行溢出检查。

触发条件

在32位系统上,当widthheight的值都很大时(例如,两者均接近65535),2 * width * height的计算结果可能超出32位整数的表示范围,发生整数溢出。溢出后的值会“回绕”成一个较小的数值。

漏洞影响

  1. 内存分配错误:由于image_size计算溢出,后续通过AcquireQuantumMemory函数进行的内存分配会基于错误的小尺寸值。
  2. 越界读取:后续的图像处理操作(如像素数据读取)会依据原始的、较大的widthheight维度进行,从而访问到分配内存边界之外的数据。
  3. 安全后果:攻击者可利用此漏洞构造特定的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或更高版本)。

参考链接

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计