Loading...
Skip to main content

CVE-2026-56364

MEDIUM

ImageMagick has a Memory Leak in LoadOpenCLDeviceBenchmark() when parsing malformed XML

Published January 21, 2026Updated July 8, 2026Source: osv

Summary

### Summary A memory leak vulnerability exists in the `LoadOpenCLDeviceBenchmark()` function in `MagickCore/opencl.c`. When parsing a malformed OpenCL device profile XML file that contains `<device` elements without proper `/>` closing tags, the function fails to release allocated memory for string members (`platform_name`, `vendor_name`, `name`, `version`), leading to memory leaks that could result in resource exhaustion. **Affected Version**: ImageMagick 7.1.2-12 and possibly earlier versions --- ### Details The vulnerability is located in `MagickCore/opencl.c`, function `LoadOpenCLDeviceBenchmark()` (lines 754-911). **Root Cause Analysis:** 1. When a `<device` tag is encountered, a `MagickCLDeviceBenchmark` structure is allocated (line 807-812) 2. String attributes (`platform`, `vendor`, `name`, `version`) are allocated via `ConstantString()` (lines 878, 885, 898, 900) 3. These strings are **only freed** when a `/>` closing tag is encountered (lines 840-849) 4. At function exit (lines 908-910), only the `device_benchmark` structure is freed, but **its member variables are not freed** if `/>` was never parsed **Vulnerable Code (lines 908-910):** ```c token=(char *) RelinquishMagickMemory(token); device_benchmark=(MagickCLDeviceBenchmark *) RelinquishMagickMemory( device_benchmark); // BUG: members (platform_name, vendor_name, name, version) not freed! ``` **Correct cleanup (only executed when `/>` is found, lines 840-849):** ```c device_benchmark->platform_name=(char *) RelinquishMagickMemory(device_benchmark->platform_name); device_benchmark->vendor_name=(char *) RelinquishMagickMemory(device_benchmark->vendor_name); device_benchmark->name=(char *) RelinquishMagickMemory(device_benchmark->name); device_benchmark->version=(char *) RelinquishMagickMemory(device_benchmark->version); device_benchmark=(MagickCLDeviceBenchmark *) RelinquishMagickMemory(device_benchmark); ``` --- ### PoC **Environment:** - OS: Ubuntu 22.04.5 LTS (Linux 6.8.0-87-generic x86_64) - Compiler: GCC 11.4.0 - ImageMagick: 7.1.2-13 (commit `a52c1b402be08ef8ae193f28ac5b2e120f2fa26f`) **Step 1: Build ImageMagick with AddressSanitizer** ```bash cd ImageMagick ./configure \ CFLAGS="-g -O0 -fsanitize=address -fno-omit-frame-pointer" \ CXXFLAGS="-g -O0 -fsanitize=address -fno-omit-frame-pointer" \ LDFLAGS="-fsanitize=address" \ --disable-openmp make -j$(nproc) ``` **Step 2: Create malformed XML file** **Step 3: Place file in OpenCL cache directory** ```bash mkdir -p ~/.cache/ImageMagick cp malformed_opencl_profile.xml ~/.cache/ImageMagick/ImagemagickOpenCLDeviceProfile.xml ``` **Step 4: Run ImageMagick with leak detection** ```bash export ASAN_OPTIONS="detect_leaks=1:symbolize=1" ./utilities/magick -size 100x100 xc:red output.png ``` **ASAN Output:** ``` ================================================================= ==2543490==ERROR: LeakSanitizer: detected memory leaks Direct leak of 96 byte(s) in 2 object(s) allocated from: #0 ... in AcquireMagickMemory MagickCore/memory.c:536 #1 ... in LoadOpenCLDeviceBenchmark MagickCore/opencl.c:807 Direct leak of 16 byte(s) in 1 object(s) allocated from: #0 ... in ConstantString MagickCore/string.c:692 #1 ... in LoadOpenCLDeviceBenchmark MagickCore/opencl.c:878 ← name Direct leak of 14 byte(s) in 1 object(s) allocated from: #0 ... in ConstantString MagickCore/string.c:692 #1 ... in LoadOpenCLDeviceBenchmark MagickCore/opencl.c:885 ← platform_name Direct leak of 14 byte(s) in 1 object(s) allocated from: #0 ... in ConstantString MagickCore/string.c:692 #1 ... in LoadOpenCLDeviceBenchmark MagickCore/opencl.c:898 ← vendor_name Direct leak of 15 byte(s) in 1 object(s) allocated from: #0 ... in ConstantString MagickCore/string.c:692 #1 ... in LoadOpenCLDeviceBenchmark MagickCore/opencl.c:900 ← version SUMMARY: AddressSanitizer: 203 byte(s) leaked in 18 allocation(s). ``` --- ### Impact **Vulnerability Type:** CWE-401 (Missing Release of Memory after Effective Lifetime) **Severity:** Low **Who is impacted:** - Users who have OpenCL enabled in ImageMagick - Systems where an attacker can place or modify files in the OpenCL cache directory (`~/.cache/ImageMagick/`) - Long-running ImageMagick processes or services that repeatedly initialize OpenCL **Potential consequences:** - Memory exhaustion over time if the malformed configuration is repeatedly loaded - Denial of Service (DoS) in resource-constrained environments **Attack Vector:** Local - requires write access to the user's OpenCL cache directory

Remediation

Upgrade to the fixed version using your package manager.

NuGet
Update Magick.NET-Q8-x64 to 14.10.2 or later
dotnet add package Magick.NET-Q8-x64 --version 14.10.2
NuGet
Update Magick.NET-Q16-HDRI-OpenMP-x64 to 14.10.2 or later
dotnet add package Magick.NET-Q16-HDRI-OpenMP-x64 --version 14.10.2
NuGet
Update Magick.NET-Q8-AnyCPU to 14.10.2 or later
dotnet add package Magick.NET-Q8-AnyCPU --version 14.10.2
NuGet
Update Magick.NET-Q16-HDRI-OpenMP-arm64 to 14.10.2 or later
dotnet add package Magick.NET-Q16-HDRI-OpenMP-arm64 --version 14.10.2
NuGet
Update Magick.NET-Q16-OpenMP-arm64 to 14.10.2 or later
dotnet add package Magick.NET-Q16-OpenMP-arm64 --version 14.10.2
NuGet
Update Magick.NET-Q16-HDRI-arm64 to 14.10.2 or later
dotnet add package Magick.NET-Q16-HDRI-arm64 --version 14.10.2
NuGet
Update Magick.NET-Q8-x86 to 14.10.2 or later
dotnet add package Magick.NET-Q8-x86 --version 14.10.2
NuGet
Update Magick.NET-Q16-x86 to 14.10.2 or later
dotnet add package Magick.NET-Q16-x86 --version 14.10.2
NuGet
Update Magick.NET-Q16-OpenMP-x86 to 14.10.2 or later
dotnet add package Magick.NET-Q16-OpenMP-x86 --version 14.10.2
NuGet
Update Magick.NET-Q16-arm64 to 14.10.2 or later
dotnet add package Magick.NET-Q16-arm64 --version 14.10.2
NuGet
Update Magick.NET-Q8-OpenMP-x64 to 14.10.2 or later
dotnet add package Magick.NET-Q8-OpenMP-x64 --version 14.10.2
NuGet
Update Magick.NET-Q16-HDRI-x64 to 14.10.2 or later
dotnet add package Magick.NET-Q16-HDRI-x64 --version 14.10.2
NuGet
Update Magick.NET-Q8-arm64 to 14.10.2 or later
dotnet add package Magick.NET-Q8-arm64 --version 14.10.2
NuGet
Update Magick.NET-Q16-HDRI-x86 to 14.10.2 or later
dotnet add package Magick.NET-Q16-HDRI-x86 --version 14.10.2
NuGet
Update Magick.NET-Q8-OpenMP-arm64 to 14.10.2 or later
dotnet add package Magick.NET-Q8-OpenMP-arm64 --version 14.10.2
NuGet
Update Magick.NET-Q16-AnyCPU to 14.10.2 or later
dotnet add package Magick.NET-Q16-AnyCPU --version 14.10.2
NuGet
Update Magick.NET-Q16-OpenMP-x64 to 14.10.2 or later
dotnet add package Magick.NET-Q16-OpenMP-x64 --version 14.10.2
NuGet
Update Magick.NET-Q16-x64 to 14.10.2 or later
dotnet add package Magick.NET-Q16-x64 --version 14.10.2
NuGet
Update Magick.NET-Q16-HDRI-AnyCPU to 14.10.2 or later
dotnet add package Magick.NET-Q16-HDRI-AnyCPU --version 14.10.2

After upgrading, run your dependency scanner again to confirm the vulnerability is resolved.

Affected Packages (19)

PackageEcosystemAffectedFixed In
Magick.NET-Q8-x64
nuget
10.0.0, 10.1.0, 11.0.0, 11.1.0 (+220 more)14.10.2
Magick.NET-Q16-HDRI-OpenMP-x64
nuget
10.0.0, 10.1.0, 11.0.0, 11.1.0 (+101 more)14.10.2
Magick.NET-Q8-AnyCPU
nuget
10.0.0, 10.1.0, 11.0.0, 11.1.0 (+204 more)14.10.2
Magick.NET-Q16-HDRI-OpenMP-arm64
nuget
10.0.0, 10.1.0, 11.0.0, 11.1.0 (+49 more)14.10.2
Magick.NET-Q16-OpenMP-arm64
nuget
10.0.0, 10.1.0, 11.0.0, 11.1.0 (+49 more)14.10.2
Magick.NET-Q16-HDRI-arm64
nuget
10.0.0, 10.1.0, 11.0.0, 11.1.0 (+49 more)14.10.2
Magick.NET-Q8-x86
nuget
10.0.0, 10.1.0, 11.0.0, 11.1.0 (+220 more)14.10.2
Magick.NET-Q16-x86
nuget
10.0.0, 10.1.0, 11.0.0, 11.1.0 (+220 more)14.10.2
Magick.NET-Q16-OpenMP-x86
nuget
All versions14.10.2
Magick.NET-Q16-arm64
nuget
10.0.0, 10.1.0, 11.0.0, 11.1.0 (+49 more)14.10.2
Magick.NET-Q8-OpenMP-x64
nuget
10.0.0, 10.1.0, 11.0.0, 11.1.0 (+101 more)14.10.2
Magick.NET-Q16-HDRI-x64
nuget
10.0.0, 10.1.0, 11.0.0, 11.1.0 (+201 more)14.10.2
Magick.NET-Q8-arm64
nuget
10.0.0, 10.1.0, 11.0.0, 11.1.0 (+49 more)14.10.2
Magick.NET-Q16-HDRI-x86
nuget
10.0.0, 10.1.0, 11.0.0, 11.1.0 (+201 more)14.10.2
Magick.NET-Q8-OpenMP-arm64
nuget
10.0.0, 10.1.0, 11.0.0, 11.1.0 (+49 more)14.10.2
Magick.NET-Q16-AnyCPU
nuget
10.0.0, 10.1.0, 11.0.0, 11.1.0 (+204 more)14.10.2
Magick.NET-Q16-OpenMP-x64
nuget
10.0.0, 10.1.0, 11.0.0, 11.1.0 (+101 more)14.10.2
Magick.NET-Q16-x64
nuget
10.0.0, 10.1.0, 11.0.0, 11.1.0 (+220 more)14.10.2
Magick.NET-Q16-HDRI-AnyCPU
nuget
10.0.0, 10.1.0, 11.0.0, 11.1.0 (+201 more)14.10.2

Vulnerability Classification

Common Weakness Enumeration (CWE) identifiers for this vulnerability type.

CVSS Score Breakdown

What the CVSS (Common Vulnerability Scoring System) 6.5 score means for each attack dimension.

Attack Vector
Network
Attack Complexity
High
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
Low
Availability
High

CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:H

Frequently Asked Questions

What is CVE-2026-56364?
ImageMagick has a Memory Leak in LoadOpenCLDeviceBenchmark() when parsing malformed XML This vulnerability has been assigned a severity rating of MEDIUM (CVSS score: 6.5/10).
How do I check if my project is affected by CVE-2026-56364?
CVE-2026-56364 affects Magick.NET-Q8-x64, Magick.NET-Q16-HDRI-OpenMP-x64 and Magick.NET-Q8-AnyCPU (and 16 more). Use GeekWala's free vulnerability scanner to check your dependencies against CVE-2026-56364 and 200,000+ other known vulnerabilities.

Severity & Exploitability

CVSS Score
6.5

Exploitation requires specific conditions or has limited impact. Remediate within weeks.

Also Known As

GHSA-qp59-x883-77qv

Related CVEs

  • CVE-2026-25989
    HIGH

    ImageMagick: Integer overflow or wraparound and incorrect conversion between numeric types in the internal SVG decoder

  • CVE-2026-25986
    MEDIUM

    ImageMagick has heap buffer overflow in YUV 4:2:2 decoder

  • CVE-2026-28692
    MEDIUM

    ImageMagick has a heap buffer over-read via 32-bit integer overflow in MAT decoder

  • CVE-2026-27799
    MEDIUM

    ImageMagick has a heap Buffer Over-read in its DJVU image format handler

  • CVE-2026-46557
    MEDIUM

    ImageMagick: Stack overflow in fx operation

  • CVE-2026-25984
    LOW

    ImageMagick: Integer Overflow in PSB (PSD v2) RLE decoding path causes heap Out of Bounds reads for 32-bit builds

  • CVE-2026-56376
    LOW

    ImageMagick has a possible heap Use After Free vulnerability in its meta coder

  • CVE-2025-55212
    LOW

    ImageMagick affected by divide-by-zero in ThumbnailImage via montage -geometry ":" leads to crash

Check if you're affected

Scan your dependencies to see if this vulnerability affects your projects.

Scan Your Dependencies