Apr 13, 2026·6 min read·39 visits
A heap-based buffer overflow exists in ImageMagick's VIFF encoder on 32-bit builds due to CWE-190 (Integer Truncation). Crafting an image with dimensions exceeding 32-bit size boundaries causes undersized memory allocations and subsequent heap corruption.
ImageMagick and Magick.NET contain a heap-based buffer overflow vulnerability in the VIFF encoder due to an integer truncation issue on 32-bit architectures. Processing maliciously crafted images can result in an undersized memory allocation, leading to out-of-bounds writes and potential system compromise.
ImageMagick is a widely deployed open-source software suite used for displaying, creating, converting, and editing raster image and vector image files. The software includes support for a vast array of file formats, handled by specific encoder and decoder modules. The viff module is responsible for processing Khoros Visualization Image Format (VIFF) files. This format is heavily utilized in scientific and technical computing contexts.
A vulnerability exists within the WriteVIFFImage function of the VIFF encoder when the software is compiled and executed on 32-bit architectures. The flaw is classified as an Integer Overflow or Wraparound (CWE-190) but practically functions as an integer truncation bug. The vulnerability occurs because the memory allocation mechanism improperly handles 64-bit dimension data when casting it to the native architecture's pointer width.
When a 32-bit instance of ImageMagick processes an image with extreme dimensions, the truncation during the memory allocation phase results in a buffer that is significantly smaller than required. The subsequent processing loop then writes the full 64-bit quantity of data into this undersized buffer. This out-of-bounds write operation constitutes a classical heap-based buffer overflow, enabling an attacker to corrupt adjacent heap memory chunks.
The root cause of CVE-2026-33900 is an implicit 64-bit to 32-bit integer truncation in coders/viff.c. ImageMagick uses a specialized type called MagickSizeType, which is a 64-bit unsigned integer, to track the packets variable. This variable represents the total count of pixel data units that need to be processed for the target VIFF image.
The calculation of packets correctly handles large image dimensions because it occurs within a 64-bit context. However, the system relies on the AcquireVirtualMemory function to allocate the corresponding memory buffer. The function signature of AcquireVirtualMemory accepts a size_t argument for the allocation size. On a 32-bit operating system or build environment, size_t is exactly 32 bits wide.
When packets is passed to AcquireVirtualMemory, a type cast from MagickSizeType to size_t takes place. If the value of packets exceeds the maximum value of a 32-bit unsigned integer ($2^{32}-1$), the upper 32 bits are discarded. For example, a packets value of 0x100000005 will be truncated to 0x00000005. The allocator provisions memory for only 5 units, but the subsequent memory write routines operate on the original 64-bit value, executing an extensive out-of-bounds write across the heap.
The vulnerability is localized to a specific memory allocation call within WriteVIFFImage. The unpatched code performs a direct cast without verifying if the value fits within the target architectural constraints. The vulnerable implementation invokes pixel_info=AcquireVirtualMemory((size_t) packets,sizeof(*pixels));.
The official patch, introduced in commit d27b840a61b322419a66d0d192ff56d52498148d, implements a standard integer truncation validation mechanism. The maintainers added a round-trip cast check immediately preceding the memory allocation. This approach verifies that no data is lost during the downcast to size_t.
+ if (packets != (MagickSizeType) ((size_t) packets))
+ ThrowWriterException(ResourceLimitError,"MemoryAllocationFailed");
pixel_info=AcquireVirtualMemory((size_t) packets,sizeof(*pixels));The patched logic casts the 64-bit packets to a 32-bit size_t, then immediately casts the result back to the 64-bit MagickSizeType. If the original value was greater than the 32-bit maximum, the truncation causes the round-trip value to differ from the original. The conditional check intercepts this disparity and safely aborts the operation by throwing a ResourceLimitError. This fix is architecturally complete and comprehensively addresses the specific memory exhaustion and truncation vectors present in the VIFF encoder.
Exploiting this vulnerability requires specific environmental preconditions and the construction of a tailored malicious file. The primary requirement is that the target application or service must be utilizing a 32-bit build of the ImageMagick or Magick.NET library. The attacker must then identify an attack surface where user-supplied images are processed, converted, or written to the VIFF format.
The payload construction phase requires the attacker to manipulate the image header dimensions (width and height) to produce a specific pixel count. The attacker calculates values such that width multiplied by height yields a packets value slightly larger than $2^{32}$. By aiming for a truncated value like 0x00000010, the attacker ensures the allocation is small, making it easier to overwrite adjacent heap structures with deterministic data.
During execution, the application allocates the undersized chunk. As the image processing loop executes, it writes the attacker-controlled pixel data into memory beyond the bounds of the allocated chunk. This corrupts adjacent heap metadata and application data. Depending on the memory layout and the underlying libc allocator (e.g., ptmalloc), this corruption typically results in a denial of service via a segmentation fault. Developing this into reliable remote code execution requires precise heap massaging to overwrite function pointers or object vtables, which is complicated by the large volume of data being written.
The CVSS v3.1 base score for CVE-2026-33900 is calculated at 5.9 (Medium severity), primarily driven by the High Availability impact and High Attack Complexity. The vector string CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H reflects the network-accessible nature of the vulnerability, requiring no user interaction or specialized privileges to trigger.
The High Attack Complexity (AC:H) rating is justified by the requirement for the specific 32-bit architecture environment. Modern server deployments predominantly utilize 64-bit operating systems and binaries, significantly reducing the widespread exploitation potential. However, embedded systems, legacy software containers, and specific Windows application environments often still rely on 32-bit libraries, leaving them exposed.
The primary realized impact is denial of service. The out-of-bounds heap write inevitably triggers memory corruption protections in modern operating systems, resulting in immediate process termination. While arbitrary code execution is theoretically possible, the massive scale of the out-of-bounds write (typically exceeding 4GB of data) frequently causes the process to hit unmapped memory pages and crash before execution control can be successfully hijacked.
The absolute and definitive remediation for this vulnerability is applying the vendor-supplied patches. Organizations utilizing ImageMagick must upgrade to version 7.1.2-19 or 6.9.13-44. Development teams utilizing the Magick.NET bindings in C# or other .NET environments must upgrade the respective NuGet packages to version 14.12.0 or later. This ensures the truncation validation logic is present.
For environments where immediate patching is untenable, organizations can leverage ImageMagick's built-in policy configuration file (policy.xml) to implement mitigating controls. Administrators should explicitly restrict the maximum width, height, and memory limits for processed images. Setting rigorous boundaries on the area and memory parameters prevents the allocation function from ever processing dimension values large enough to trigger the 32-bit integer boundary overflow.
Furthermore, migrating production systems to 64-bit architectures entirely neutralizes this specific vulnerability vector. On 64-bit builds, size_t is inherently 64 bits wide, meaning the cast from MagickSizeType to size_t performs no truncation. Security engineering teams should mandate the deprecation of 32-bit media processing binaries across deployment pipelines to harden the environment against similar memory management flaws.
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H| Product | Affected Versions | Fixed Version |
|---|---|---|
ImageMagick ImageMagick | < 6.9.13-44 | 6.9.13-44 |
ImageMagick ImageMagick | < 7.1.2-19 | 7.1.2-19 |
Magick.NET Dirk Lemstra | < 14.12.0 | 14.12.0 |
| Attribute | Detail |
|---|---|
| CWE ID | CWE-190 |
| Attack Vector | Network |
| CVSS Score | 5.9 (Medium) |
| Impact | Denial of Service (DoS), Potential Remote Code Execution |
| Exploit Status | None (No public PoC) |
| KEV Status | Not Listed |
Integer Overflow or Wraparound
An improper authentication vulnerability (CWE-287) in ZITADEL's external identity provider handler before version 4.15.3 allows remote attackers to perform complete account takeover. When auto-linking by email is enabled, ZITADEL verifies that the local target account has a verified email address but fails to verify if the external provider confirmed ownership of that same email. Attackers can exploit this by registering an unverified account with a victim's email address on a permissive external provider, leading to unauthorized account binding and persistent access.
A critical authentication bypass and cross-tenant account takeover vulnerability exists in the Prowler cloud security platform due to improper validation of the SAML Assertion Consumer Service (ACS) flow. An authenticated attacker controlling a custom Identity Provider (IdP) can forge assertions targeting arbitrary user identities across distinct tenants, allowing complete unauthorized access to target tenant-scoped resources.
An issue was identified in Central Dogma prior to version 0.84.0. The Git mirror SSH client does not verify remote host keys for git+ssh:// connections, which allows an on-path attacker to execute man-in-the-middle attacks and compromise mirrored repositories.
Open WebUI from version 0.9.0 to 0.11.1 is vulnerable to a state desynchronization and privilege persistence flaw. When an administrator is demoted to a standard user via Single Sign-On (SSO) role synchronization, the local database is updated, but their active Socket.IO connection is not invalidated. Because the WebSocket handlers authorize operations using the cached role in the socket context, the demoted user retains administrative read and write access to all collaborative notes.
An authenticated denial of service vulnerability exists in Open WebUI versions 0.10.0 through 0.11.0. An attacker can update a folder's parent identifier to establish cyclic folder references, causing recursive tree-walking operations to execute infinitely, leading to CPU exhaustion and localized application denial of service.
Open WebUI is a self-hosted AI platform. Versions 0.9.0 through 0.11.0 contain a denial-of-service vulnerability where an authenticated user can inject non-numeric values into calendar event alert metadata. The shared scheduler process fails to validate the type, leading to an unhandled TypeError that halts the execution of instance-wide alerts, suppressing notifications for all users.