CVE-2026-59189 in OpenEXRinfo

Summary

by MITRE • 08/25/2026

OpenEXR is the reference implementation and specification for the EXR image format, widely used in the motion picture industry. In OpenEXRUtil versions 3.3.0 through 3.3.12 and 3.4.0 through 3.4.12, the documented TypedDeepImageChannel<T>::row() API can return an out-of-bounds pointer when a deep image has a non-zero dataWindow origin, resulting in a heap out-of-bounds read and crash, with potential information disclosure under a controlled heap layout. The flaw arises because ImfDeepImageChannel uses two conflicting coordinate models: at(x, y) uses absolute coordinates (with _base offset by dataWindow.min), while row(r) is documented as 0-based logical access. For a non-zero dataWindow.min, row(0) therefore points outside the _sampleListPointers allocation instead of at the first logical row. This issue is fixed in versions 3.3.13 and 3.4.13.

Be aware that VulDB is the high quality source for vulnerability data.

Analysis

by VulDB Data Team • 08/28/2026

OpenEXR serves as the reference implementation for the EXR image format, a standard extensively utilized within the motion picture industry for high-dynamic-range imaging and visual effects workflows. The vulnerability identified in OpenEXRUtil versions ranging from 3.3.0 through 3.3.12 and 3.4.0 through 3.4.12 centers on a critical memory safety flaw located within the TypedDeepImageChannel<T>::row() application programming interface. This function is designed to provide access to image data rows, but under specific conditions involving deep images with non-zero data window origins, it fails to correctly calculate memory offsets. The root cause of this defect lies in an inconsistency between two conflicting coordinate models employed by the ImfDeepImageChannel class structure. Specifically, the at(x, y) method utilizes absolute coordinates that properly account for the _base offset derived from the minimum bounds of the data window. In contrast, the row(r) function is documented and intended to support zero-based logical access relative to the image content rather than raw memory addresses.

When a deep image possesses a non-zero value in its dataWindow.min component, indicating that the image origin does not start at coordinates (0, 0), the implementation of row(0) incorrectly returns an out-of-bounds pointer. Instead of pointing to the first logical row within the allocated _sampleListPointers buffer, the function calculates an address that falls outside the bounds of this heap allocation. This miscalculation results in a heap-based out-of-bounds read operation when the application attempts to dereference or access data through this invalid pointer. Such memory violations typically manifest as immediate application crashes due to segmentation faults or general protection faults, leading to a denial of service for users attempting to process affected image files.

Beyond simple stability issues, this vulnerability carries significant security implications regarding information disclosure. If an attacker can control the heap layout surrounding the vulnerable allocation, they may be able to influence what data is read from memory addresses adjacent to the intended buffer. This scenario enables potential side-channel attacks or direct leakage of sensitive information stored in neighboring memory regions, such as credentials, session tokens, or other proprietary assets held by the application processing the image. The severity of this risk is compounded by the fact that deep images are complex structures often containing substantial amounts of pixel data and metadata, making them attractive targets for exploitation in automated pipelines where untrusted inputs might be processed without rigorous validation.

From a classification perspective, this vulnerability aligns with CWE-125, which describes Out-of-bounds Read, as it involves accessing memory beyond the intended buffer boundaries. It also relates to CWE-787, an out-of-bounds write scenario if similar logic errors exist in writing functions, though the primary reported issue is a read operation. In terms of offensive security frameworks like MITRE ATT&CK, this flaw could facilitate techniques associated with T1059 Command and Scripting Interpreter or T1203 Exploitation for Client Execution if combined with other vulnerabilities to achieve remote code execution, although on its own it primarily represents an information disclosure vector via memory corruption. The inconsistency in coordinate handling highlights the importance of rigorous abstraction layer testing when dealing with complex data structures that map logical coordinates to physical memory addresses.

The issue has been addressed and resolved in OpenEXRUtil versions 3.3.13 and 3.4.13, which correct the logic within the row() function to properly account for the data window origin offset. Developers and organizations utilizing these libraries should prioritize upgrading to one of these patched versions immediately to mitigate the risk of crashes and potential information leakage. For systems that cannot be updated instantly, implementing strict input validation on image metadata before processing can serve as a temporary mitigation strategy by rejecting images with non-zero data window origins if such configurations are not required for specific workflows. Regular security audits focusing on memory management in C++ libraries used for media processing are recommended to identify similar logical errors in coordinate transformations and buffer indexing operations.

Responsible

GitHub M

Reservation

07/02/2026

Disclosure

08/25/2026

Moderation

accepted

CPE

ready

EPSS

0.00247

KEV

no

Activities

very low

Sources

Might our Artificial Intelligence support you?

Check our Alexa App!