CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-34588

CVE-2026-34588: Signed 32-bit Integer Overflow leading to Out-of-Bounds Memory Access in OpenEXR PIZ Decoder

Alon Barad
Alon Barad
Software Engineer

Apr 8, 2026·6 min read·40 visits

Executive Summary (TL;DR)

A signed integer overflow in OpenEXR's PIZ decoder allows attackers to execute out-of-bounds memory accesses via crafted EXR image files, leading to application crashes or potential remote code execution.

OpenEXR versions 3.1.0 through 3.4.8 contain a signed 32-bit integer overflow vulnerability in the PIZ decompression routine. Processing maliciously crafted EXR files with extreme image dimensions triggers out-of-bounds read and write operations, potentially enabling arbitrary code execution or localized denial of service.

Vulnerability Overview

OpenEXR provides the industry-standard specification and reference implementation for the EXR file format used extensively in motion picture production. The OpenEXRCore library, introduced in OpenEXR 3, exposes a low-level C API for handling these EXR files. This library processes various compression schemes, including the PIZ wavelet compression format.

Versions 3.1.0 through 3.4.8 of the OpenEXR library contain an integer overflow vulnerability in the PIZ decompression routine. The specific flaw resides within the internal_exr_undo_piz() function responsible for reconstructing wavelet-compressed image channels. This vulnerability corresponds to CWE-190 (Integer Overflow or Wraparound).

When a maliciously crafted EXR file specifies abnormally large image dimensions, the decompression logic performs unsafe arithmetic operations. This results in the calculation of an invalid memory pointer. Subsequent operations utilize this corrupted pointer, leading to both out-of-bounds read (CWE-125) and out-of-bounds write (CWE-787) conditions.

Root Cause Analysis

The root cause of CVE-2026-34588 lies in how the internal_exr_undo_piz() function calculates memory offsets for subsequent image channels. During PIZ decompression, the decoder iterates through each channel and determines the boundaries of the target wavelet buffer. The base pointer for the next channel is incremented using the expression wavbuf += nx * ny * wcount;.

The variables nx (channel width), ny (channel height), and wcount (data type multiplier) are declared as standard signed 32-bit integers (int). Because the multiplication is performed using signed 32-bit arithmetic, the maximum representable positive value is 2,147,483,647 (INT_MAX). If the product of these dimensions exceeds this boundary, a two's complement wrap-around occurs.

When the arithmetic overflows, the resulting value wraps to a negative integer. The program adds this negative offset to the wavbuf pointer, causing it to point backward into previously allocated memory or entirely outside the designated heap segment. The decoder fails to validate this resulting pointer against the expected buffer boundaries.

Code Analysis

The vulnerability stems directly from the type declarations in the channel iteration loop. In the vulnerable implementation, the calculation operates strictly within the bounds of standard integers. The compiler emits instructions for 32-bit signed multiplication without checking the overflow flag.

// Vulnerable Code Pattern
int nx = channel_width;
int ny = channel_height;
int wcount = type_multiplier;
// Multiplication performed as signed 32-bit integer
wavbuf += nx * ny * wcount; 

The patch addresses this by promoting the arithmetic operation to use 64-bit unsigned integers. By casting the variables or changing their underlying types to uint64_t, the product can safely accommodate the maximum theoretical dimensions of an EXR image channel without overflowing.

// Patched Code Pattern
uint64_t span_size = (uint64_t)nx * (uint64_t)ny * (uint64_t)wcount;
// explicit bounds check added against total buffer allocation 'outsz'
if (current_offset + span_size > outsz) {
    return EXR_ERR_OUT_OF_MEMORY;
}
wavbuf += span_size;

Furthermore, the patched versions introduce an explicit bounds validation step. The decoder calculates the cumulative size of all channels and verifies that this sum does not exceed the total allocated size of the decompression buffer (outsz). This secondary check ensures that even if the arithmetic is mathematically correct, the pointer remains strictly within the bounds of the allocated heap object.

Exploitation Mechanism

Exploiting CVE-2026-34588 requires the attacker to deliver a maliciously crafted EXR file to a vulnerable application. The file must declare a PIZ compression scheme and specify extreme dimensions in the channel metadata. The targeted application must then attempt to render or process this image using the vulnerable OpenEXRCore API.

Upon processing the crafted header, the decoder allocates the initial buffers and enters the internal_exr_undo_piz() routine. The integer overflow occurs silently during the calculation of the wavbuf pointer for subsequent channels. The corrupted pointer is subsequently passed as an argument to the wav_2D_decode() function.

The wav_2D_decode() function performs an in-place wavelet transformation. It actively reads from and writes to the memory locations dictated by the corrupted wavbuf pointer. Because the pointer typically wraps to a negative value, the function writes decoding artifacts into memory addresses preceding the allocated buffer.

An attacker manipulates the EXR channel data to control the values written during the wavelet transformation. By aligning the negative offset and controlling the output of the inverse wavelet transform, the attacker overwrites adjacent heap metadata or function pointers. This provides the primitive necessary to hijack execution flow and achieve code execution.

Impact Assessment

The primary impact of this vulnerability is memory corruption leading to out-of-bounds read and write operations. When the decoder processes data outside the allocated heap chunk, it causes immediate application instability, resulting in a localized denial of service. The CVSS v4.0 base score of 8.6 reflects the severe local impact of this flaw.

In the context of the motion picture industry, OpenEXR files are routinely processed by automated render farms and artist workstations. A malicious file submitted to a rendering queue or opened by a compositor executes the out-of-bounds operations within the context of the rendering application. This execution context often holds significant privileges regarding network storage and intellectual property.

While out-of-bounds memory accesses provide a theoretical pathway to arbitrary code execution, achieving reliable exploitation requires overcoming modern memory mitigation techniques such as ASLR and Heap randomization. The out-of-bounds read primitive provided by the corrupted pointer assists an attacker in locating necessary memory addresses, bypassing ASLR protections prior to executing the out-of-bounds write.

Remediation and Mitigation

The Academy Software Foundation released patched versions of OpenEXR to address CVE-2026-34588. Organizations must update their OpenEXRCore dependencies to version 3.2.7, 3.3.9, or 3.4.9. Versions prior to 3.1.0 are not affected by this specific implementation flaw, as the vulnerable C API was introduced in the OpenEXR 3 branch.

Software developers distributing applications that statically link OpenEXR must rebuild their binaries with the updated library versions. System administrators should identify all dynamically linked applications relying on system-level libOpenEXRCore packages and apply the corresponding operating system updates.

There are no effective configuration workarounds for this vulnerability short of completely disabling the processing of PIZ-compressed EXR files. Applications that process untrusted EXR files before patching is possible should execute the decoding logic within heavily restricted sandbox environments. Implementing strict pre-validation of image dimensions prior to invoking the OpenEXR API mitigates the attack vector.

Official Patches

Academy Software FoundationRelease 3.2.7
Academy Software FoundationRelease 3.3.9
Academy Software FoundationRelease 3.4.9

Technical Appendix

CVSS Score
7.8/ 10
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
EPSS Probability
0.02%
Top 94% most exploited

Affected Systems

OpenEXR 3.1.0 through 3.1.13OpenEXR 3.2.0 through 3.2.6OpenEXR 3.3.0 through 3.3.8OpenEXR 3.4.0 through 3.4.8

Affected Versions Detail

Product
Affected Versions
Fixed Version
OpenEXR
Academy Software Foundation
3.1.0 - 3.1.133.2.7
OpenEXR
Academy Software Foundation
3.2.0 - < 3.2.73.2.7
OpenEXR
Academy Software Foundation
3.3.0 - < 3.3.93.3.9
OpenEXR
Academy Software Foundation
3.4.0 - < 3.4.93.4.9
AttributeDetail
CWE IDCWE-190
Attack VectorLocal
CVSS v3.17.8
EPSS Score0.00022
ImpactOut-of-Bounds Read/Write
Exploit StatusNone
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1203Exploitation for Client Execution
Execution
T1068Exploitation for Privilege Escalation
Privilege Escalation
T1005Data from Local System
Collection
CWE-190
Integer Overflow or Wraparound

The software performs a calculation that can produce an integer overflow or wraparound, when the logic assumes that the resulting value will always be larger than the original value.

Vulnerability Timeline

Preliminary release workflow updates observed in the OpenEXR repository.
2026-03-27
Fixes committed to SECURITY.md and source code by Cary Phillips.
2026-04-02
Vulnerability publicly disclosed and CVE-2026-34588 published.
2026-04-06
Vendor releases patched versions (3.2.7, 3.3.9, 3.4.9).
2026-04-06
Red Hat and SUSE publish advisories acknowledging the flaw.
2026-04-08

References & Sources

  • [1]GitHub Advisory
  • [2]Red Hat Advisory
  • [3]SUSE Advisory
  • [4]CVE Record

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 7 hours ago•CVE-2026-48861
2.1

CVE-2026-48861: HTTP Request Splitting and Smuggling via Method Parameter CRLF Injection in Elixir Mint

CVE-2026-48861 is a client-side HTTP request-line CRLF (Carriage Return Line Feed) injection vulnerability in the popular Elixir HTTP client library, Mint. The vulnerability permits HTTP Request Splitting and HTTP Request Smuggling when an application forwards untrusted, attacker-controlled inputs to Mint's HTTP client requests as either the HTTP request method or target. By embedding CRLF characters within these parameters, an attacker can terminate the request line prematurely, inject malicious headers, or pipeline entirely independent requests. These smuggled requests are then processed by upstream or downstream proxy servers as separate HTTP queries on the same TCP connection. While Mint version 1.7.0 introduced target validation to secure the request target, the HTTP request method parameter remained completely unvalidated. This flaw allows attackers to bypass routing filters, access restricted internal APIs, or poison HTTP caches under default configurations.

Amit Schendel
Amit Schendel
4 views•7 min read
•about 7 hours ago•CVE-2026-49753
6.3

CVE-2026-49753: HTTP Request/Response Smuggling via Inconsistent Content-Length Parsing in Elixir Mint Client

An Inconsistent Interpretation of HTTP Requests (HTTP Request/Response Smuggling) vulnerability in the Elixir Mint HTTP client allows attacker-controlled HTTP/1 servers to desynchronize response framing on shared connections due to over-lenient parsing of sign-prefixed Content-Length headers.

Amit Schendel
Amit Schendel
6 views•6 min read
•about 8 hours ago•CVE-2026-49754
8.2

CVE-2026-49754: Denial of Service via Unbounded HTTP/2 CONTINUATION Frame Accumulation in Elixir Mint

An allocation of resources without limits or throttling vulnerability in Elixir Mint allows an attacker-controlled HTTP/2 server to exhaust memory in a Mint client. The vulnerability is exploited by sending a HEADERS frame without the END_HEADERS flag followed by an infinite stream of CONTINUATION frames. Because the client lacks limits on the incoming header-block accumulator, the client continuously consumes memory until an out-of-memory crash occurs.

Amit Schendel
Amit Schendel
7 views•6 min read
•about 8 hours ago•CVE-2026-48596
2.1

CVE-2026-48596: Improper Neutralization of CRLF Sequences in Elixir Tesla Multipart HTTP Client

CVE-2026-48596 is an Improper Neutralization of CRLF Sequences in HTTP Headers (HTTP Request/Response Splitting, CWE-113) in the Elixir Tesla HTTP client. The flaw resides in how multipart content-type parameters are joined and serialized, enabling attackers to inject arbitrary headers or split HTTP requests when applications pass untrusted inputs to the parameters of multipart uploads.

Alon Barad
Alon Barad
5 views•6 min read
•about 9 hours ago•CVE-2026-48594
8.2

CVE-2026-48594: Decompression Bomb Denial of Service in Elixir Tesla HTTP Client

An improper handling of highly compressed data (decompression bomb) vulnerability exists in the Elixir Tesla HTTP client when utilizing response decompression middlewares. By serving highly compressed responses or stacked content-encoding headers, a malicious server can cause arbitrary heap exhaustion, leading to a denial of service (DoS) crash in the BEAM virtual machine.

Amit Schendel
Amit Schendel
6 views•6 min read
•about 9 hours ago•CVE-2026-48595
8.2

CVE-2026-48595: Cross-Origin Credential Leakage in Elixir Tesla Client via Case-Sensitive Redirect Filter Bypass

A high-severity security vulnerability in Elixir's Tesla HTTP client library (CVE-2026-48595) allows unauthenticated remote attackers to harvest sensitive credentials, including Authorization headers and cookies. The flaw resides in the 'Tesla.Middleware.FollowRedirects' component, which performs case-sensitive lookups when stripping credentials during cross-origin redirects. Because HTTP headers are case-insensitive by RFC specifications, standard canonical casing (e.g., 'Authorization') bypasses the lowercase-only blocklist, leaking tokens to untrusted external redirect destinations.

Alon Barad
Alon Barad
6 views•5 min read