Описание
ImageMagick has a Memory Leak in LoadOpenCLDeviceBenchmark() when parsing malformed XML
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:
- When a
<devicetag is encountered, aMagickCLDeviceBenchmarkstructure is allocated (line 807-812) - String attributes (
platform,vendor,name,version) are allocated viaConstantString()(lines 878, 885, 898, 900) - These strings are only freed when a
/>closing tag is encountered (lines 840-849) - At function exit (lines 908-910), only the
device_benchmarkstructure is freed, but its member variables are not freed if/>was never parsed
Vulnerable Code (lines 908-910):
Correct cleanup (only executed when /> is found, lines 840-849):
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
Step 2: Create malformed XML file
Step 3: Place file in OpenCL cache directory
Step 4: Run ImageMagick with leak detection
ASAN Output:
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
Пакеты
Magick.NET-Q8-x64
< 14.10.2
14.10.2
Magick.NET-Q8-arm64
< 14.10.2
14.10.2
Magick.NET-Q8-x86
< 14.10.2
14.10.2
Magick.NET-Q8-OpenMP-x64
< 14.10.2
14.10.2
Magick.NET-Q8-OpenMP-arm64
< 14.10.2
14.10.2
Magick.NET-Q16-x64
< 14.10.2
14.10.2
Magick.NET-Q16-arm64
< 14.10.2
14.10.2
Magick.NET-Q16-x86
< 14.10.2
14.10.2
Magick.NET-Q16-OpenMP-x64
< 14.10.2
14.10.2
Magick.NET-Q16-OpenMP-arm64
< 14.10.2
14.10.2
Magick.NET-Q16-OpenMP-x86
< 14.10.2
14.10.2
Magick.NET-Q16-HDRI-x64
< 14.10.2
14.10.2
Magick.NET-Q16-HDRI-arm64
< 14.10.2
14.10.2
Magick.NET-Q16-HDRI-x86
< 14.10.2
14.10.2
Magick.NET-Q16-HDRI-OpenMP-x64
< 14.10.2
14.10.2
Magick.NET-Q16-HDRI-OpenMP-arm64
< 14.10.2
14.10.2
Magick.NET-Q8-AnyCPU
< 14.10.2
14.10.2
Magick.NET-Q16-AnyCPU
< 14.10.2
14.10.2
Magick.NET-Q16-HDRI-AnyCPU
< 14.10.2
14.10.2
6.5 Medium
CVSS3
Дефекты
6.5 Medium
CVSS3