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-34543

CVE-2026-34543: Heap Information Disclosure in OpenEXR PXR24 Decompression

Amit Schendel
Amit Schendel
Senior Security Researcher

Apr 3, 2026·6 min read·51 visits

Executive Summary (TL;DR)

OpenEXR versions 3.4.0 through 3.4.7 fail to validate decompressed stream lengths in the PXR24 decoder. An attacker can craft a truncated EXR file that leaks uninitialized heap memory into pixel data. Updating to version 3.4.8 resolves the vulnerability.

A critical heap information disclosure vulnerability in OpenEXR allows remote attackers to leak uninitialized heap memory contents via maliciously crafted EXR files. The flaw exists in the PXR24 decompression logic, where missing bounds checks on truncated zlib streams lead to out-of-bounds reads during image reconstruction.

Vulnerability Overview

CVE-2026-34543 identifies a critical heap information disclosure flaw within the OpenEXR project, a widely adopted image format standard maintained by the Academy Software Foundation. The vulnerability specifically affects the OpenEXRCore library, targeting the PXR24 decompression logic handled by the undo_pxr24_impl function. Systems utilizing OpenEXR versions 3.4.0 through 3.4.7 are susceptible to this flaw.

The vulnerability is classified under CWE-908 (Use of Uninitialized Resource). It manifests when the application processes a maliciously structured EXR file containing a truncated zlib stream. A failure in length validation causes the internal decompression routines to read beyond the initialized boundary of the decompression buffer, accessing residual heap memory left behind by previous application operations.

Exploitation of this vulnerability results in the direct leakage of sensitive heap memory contents into the output image's pixel data. The attack requires zero privileges and no user interaction beyond the target system processing the malicious file. This makes automated processing pipelines, such as cloud rendering services and media ingestion endpoints, highly vulnerable to remote exploitation.

Root Cause Analysis

The underlying vulnerability results from a two-part logical failure in how OpenEXR handles mismatched buffer sizes during decompression. The process begins in src/lib/OpenEXRCore/compression.c, where the exr_uncompress_buffer function delegates the decompression task to the libdeflate library. When a truncated stream is processed, libdeflate correctly identifies the state and returns the LIBDEFLATE_SHORT_OUTPUT status code.

The first point of failure occurs because exr_uncompress_buffer incorrectly interprets LIBDEFLATE_SHORT_OUTPUT as a fully successful operation. The function returns EXR_ERR_SUCCESS to the calling routine without properly validating whether the produced output size aligns with the caller's allocation expectations. The decompression engine fails to signal the size discrepancy, passing an incompletely populated buffer to the reconstruction logic.

The second point of failure resides in the PXR24 decoder (undo_pxr24_impl in internal_pxr24.c). This function ignores the actual number of decompressed bytes written, referred to as outSize. Instead, the function relies on the uncompressed_size field provided directly by the untrusted EXR file header to drive its byte-plane reconstruction and difference decoding loops.

Because the uncompressed_size field dictates the iteration length, the loops march past the initialized data boundaries of the scratch_data buffer. The decoder processes the uninitialized heap memory following the truncated data payload, reconstructing it as valid image pixels. The resulting image file encodes chunks of raw heap data, successfully exfiltrating the memory contents.

Code Analysis

Prior to version 3.4.8, the undo_pxr24_impl function explicitly trusted the EXR header metadata to define processing boundaries. The code checked the iteration progress against uncompressed_size, an integer entirely controlled by the file structure. This assumption proved dangerous when coupled with the upstream failure to reject truncated zlib streams.

The patch applied in commit 5f6d0aaa9e43802917af7db90f181e88e083d3b8 corrects the iteration bounds check. The relevant modification occurs in src/lib/OpenEXRCore/internal_pxr24.c. The comparison operator now evaluates the processing index against outSize, which represents the actual byte count returned by the decompression engine.

// Snippet from src/lib/OpenEXRCore/internal_pxr24.c
- if (nDec + nBytes > uncompressed_size)
+ if (nDec + nBytes > outSize)
      return EXR_ERR_CORRUPT_CHUNK;

This modification fundamentally alters the trust model within the function. By constraining the iteration bounds to the validated, physical size of the decompressed buffer rather than arbitrary file metadata, the loops correctly terminate before crossing into uninitialized heap space. The function returns an EXR_ERR_CORRUPT_CHUNK error upon encountering mismatched stream limits, preventing the CWE-908 condition entirely.

Exploitation Methodology

Exploiting CVE-2026-34543 requires the attacker to deliver a carefully constructed EXR file to the target system. The payload targets the PXR24 compression scheme specifically. The attacker manually configures the EXR header, assigning an artificially large value to the uncompressed_size metadata field while attaching a compressed data payload that is structurally valid but deliberately truncated.

When the vulnerable application processes the file, the large uncompressed_size value dictates the initial allocation of the internal decoding buffer. The libdeflate routine processes the truncated zlib stream, populating only the beginning of the allocated buffer. The remaining space within the buffer consists of residual heap memory from previously executed application tasks.

The target application completes the decoding process without throwing a fatal exception. The uninitialized heap bytes are subjected to the PXR24 byte-plane reconstruction algorithms and stored within the final pixel array. The attacker completes the exploitation sequence by retrieving the resulting output image, either through a direct download feature or by capturing the visual output, and reversing the PXR24 encoding to read the raw heap memory.

Impact Assessment

The primary impact of CVE-2026-34543 is a severe breach of confidentiality. Applications that process untrusted media files, such as rendering farms, image hosting platforms, and content delivery networks, run a high risk of exposing internal process memory. The leaked memory frequently contains sensitive application state data, including API keys, authentication tokens, TLS private keys, or data belonging to other tenants in a shared environment.

The vulnerability is scored at 8.7 (High) under the CVSSv4 framework. The vector string (CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N) reflects the complete absence of prerequisites. An unauthenticated attacker can launch the attack over the network with low complexity, requiring no user interaction. The high confidentiality impact score accurately captures the severity of process memory exposure.

Despite the severity, the Exploit Prediction Scoring System (EPSS) rating currently sits at 0.04% (12.21st percentile). This low probability indicates that active exploitation in the wild remains unlikely in the near term. Furthermore, the vulnerability only affects the confidentiality of the system; an attacker cannot alter application behavior or cause a denial of service through this specific code path.

Remediation and Mitigation

The most definitive remediation for CVE-2026-34543 is updating the OpenEXR library to version 3.4.8 or later. Organizations must audit their dependency trees to identify both dynamic and static linkages to libOpenEXRCore. Applications utilizing static linking require recompilation with the updated library to eliminate the vulnerable code path completely.

For systems where immediate patching is unfeasible, administrators should implement defensive strategies around the image ingestion pipeline. Isolating the image processing workloads within short-lived, sandboxed containers significantly limits the value of the exposed heap memory. A fresh container allocation ensures the heap does not contain long-lived secrets or residual data from prior operations belonging to other users.

Additionally, security teams can implement structural validation checks prior to passing files to the OpenEXR parser. Rejecting EXR files that exhibit extreme disparities between declared metadata sizes and physical byte counts can disrupt the exploitation sequence. However, this approach carries a high risk of false positives and may break compatibility with legitimate, highly compressed media files.

Official Patches

AcademySoftwareFoundationOfficial GitHub Security Advisory
AcademySoftwareFoundationOpenEXR v3.4.8 Release Notes

Fix Analysis (1)

Technical Appendix

CVSS Score
8.7/ 10
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
EPSS Probability
0.04%
Top 88% most exploited

Affected Systems

Applications dynamically linking OpenEXRCore 3.4.0 - 3.4.7Applications statically compiling OpenEXR 3.4.0 - 3.4.7Cloud rendering services accepting user-uploaded EXR filesMedia processing pipelines using affected OpenEXR implementations

Affected Versions Detail

Product
Affected Versions
Fixed Version
OpenEXR
AcademySoftwareFoundation
3.4.0 - 3.4.73.4.8
AttributeDetail
CWE IDCWE-908
Attack VectorNetwork
CVSS v4.08.7 (High)
EPSS Score0.04%
ImpactHigh Confidentiality (Heap Memory Disclosure)
Exploit StatusPoC
CISA KEVFalse

MITRE ATT&CK Mapping

T1005Data from Local System
Collection
T1592Gather Victim Host Information
Reconnaissance
CWE-908
Use of Uninitialized Resource

The software uses a resource, such as memory, before it is initialized.

Known Exploits & Detection

Research AnalysisProof of concept methodology detailed in GitHub Advisory analysis.

Vulnerability Timeline

Official fix committed to the OpenEXR repository
2026-03-22
Vulnerability publicly disclosed in NVD and GitHub Advisory databases
2026-04-01
OpenEXR v3.4.8 released containing the security patch
2026-04-01

References & Sources

  • [1]GitHub Advisory: GHSA-vc68-257w-m432
  • [2]Fix Commit in OpenEXR Repository
  • [3]OpenEXR v3.4.8 Release
  • [4]NVD Entry for CVE-2026-34543
  • [5]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

•26 minutes ago•CVE-2026-74904
8.7

CVE-2026-74904: Missing Authorization in SiYuan Note-Taking Application API

A high-severity missing authorization vulnerability (CWE-862) exists in the SiYuan note-taking application before v3.7.4. Seventeen block metadata and content-derived endpoints within kernel/api/block.go lack proper publish-access and role-based checks. This allows low-privilege or anonymous users in publish mode to bypass workspace restrictions and disclose private block content, trace workspace structures, map document indexes, and verify the existence of private notes. The vulnerability is addressed in version v3.7.4.

Amit Schendel
Amit Schendel
1 views•6 min read
•about 1 hour ago•CVE-2026-71416
8.8

CVE-2026-71416: Cross-Site WebSocket Hijacking in Headroom Proxy Server

A critical cross-site WebSocket hijacking (CSWSH) vulnerability in headroomlabs-ai/headroom prior to version 0.35.0 allows unauthorized external origins to establish connection channels to the Headroom proxy, enabling arbitrary prompt execution and remote code execution through local tool integration.

Amit Schendel
Amit Schendel
3 views•6 min read
•about 2 hours ago•GHSA-CJCG-CXMH-9WCR
7.5

GHSA-cjcg-cxmh-9wcr: Unbounded Memory Allocation via HTTP/2 Bomb in praxis-proxy

A critical vulnerability exists in the praxis-proxy library where the omission of default limits on HTTP/2 server options allows remote attackers to trigger a Denial of Service (DoS) using an HPACK compression bomb and flow-control window stalls. This vulnerability is cataloged as GHSA-cjcg-cxmh-9wcr.

Amit Schendel
Amit Schendel
4 views•7 min read
•about 3 hours ago•GHSA-MWM8-39RW-8826
8.1

GHSA-MWM8-39RW-8826: Use-After-Free Vulnerability in Ruby sqlite3 Gem native extension

A Use-After-Free (UAF) vulnerability exists in the sqlite3-ruby native C extension when marshaling arguments for user-defined SQLite aggregate functions with multiple arguments. Due to temporary heap-allocated argument arrays not being registered with the Ruby Garbage Collector, active objects can be prematurely reclaimed, resulting in memory corruption or process-level crashes.

Alon Barad
Alon Barad
3 views•7 min read
•about 4 hours ago•CVE-2026-19484
7.5

CVE-2026-19484: Remote Denial of Service via Boyer-Moore-Horspool Integer Wrap-around in @fastify/busboy

An unauthenticated remote denial of service vulnerability exists in @fastify/busboy versions 3.1.0 through 3.2.0. The vulnerability is caused by an integer wrap-around in the Boyer-Moore-Horspool algorithm implementation inside the sbmh submodule when initializing skip distances. When processing a specific boundary of 252 bytes, the parser triggers an infinite loop, stalling the single-threaded Node.js event loop and exhausting CPU resources.

Alon Barad
Alon Barad
6 views•6 min read
•about 5 hours ago•CVE-2026-19481
7.5

CVE-2026-19481: Unauthenticated Remote Denial of Service via Prototype Lookup Crash in @fastify/busboy

A critical remote, unauthenticated Denial of Service (DoS) vulnerability in @fastify/busboy (<= 3.2.0) allows attackers to crash the Node.js process. By submitting a crafted multipart/form-data request with a header key matching an inherited property of Object.prototype (like __proto__ or constructor), the internal HeaderParser triggers a synchronous TypeError.

Amit Schendel
Amit Schendel
4 views•7 min read