Description
OpenEXR is the reference implementation and specification for the EXR image file format, widely used in the motion picture industry. In versions 3.3.0 through 3.3.12 and 3.4.0 through 3.4.13, the PyOpenEXR Python bindings return stale heap data when reading a crafted deep scanline EXR that uses layer-prefixed RGB channels. With the default channel coalescing (separate_channels=False), the wrapper groups channels such as left.R, left.G, and left.B into a single RGB sample array, but the lane-offset calculation in PyPart::setDeepSliceData() only recognizes the exact unprefixed names G, B, and A. As a result, prefixed channels like left.G and left.B are decoded into lane 0 while lanes 1 and 2 are left uninitialized and returned to Python. A Python application that reads untrusted deep EXR files through the default OpenEXR.File API and then logs, serializes, previews, or otherwise processes the resulting NumPy sample arrays may expose uninitialized same-process heap contents, in addition to receiving incorrect green and blue channel data. This issue is fixed in versions 3.3.13 and 3.4.14.
Published: 2026-08-25
Score: 4.3 Medium
EPSS: n/a
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

In OpenEXR versions 3.3.0 through 3.3.12 and 3.4.0 through 3.4.13 the PyOpenEXR bindings incorrectly calculate lane offsets for deep scanlines that use layer‑prefixed RGB channels. When a crafted EXR file is processed, the wrapper treats channels such as left.R, left.G, and left.B as a single RGB array but the lane‑offset logic only recognizes unprefixed G, B, and A. The result is that left.G and left.B are decoded into lane 0, while lanes 1 and 2 are left uninitialized. The uninitialized memory is returned to Python as part of a NumPy array. A Python program that reads untrusted deep EXR files through the default OpenEXR.File API and then logs, serializes, previews, or otherwise processes the NumPy sample arrays can therefore expose same‑process heap contents or receive incorrect green and blue channel data.

Affected Systems

The Academy Software Foundation’s OpenEXR library (openexr) is affected. Vulnerable releases are 3.3.0 to 3.3.12 and 3.4.0 to 3.4.13. All builds that use the default channel coalescing (separate_channels=False) for deep scanlines can be impacted.

Risk and Exploitability

The CVSS score of 4.3 indicates a moderate impact, and the EPSS score is not available, implying no known widespread exploitation activity. The vulnerability is not listed in the CISA KEV catalog. The attack likely requires a local, privileged or unprivileged user to provide a crafted deep EXR file to the target Python application. A malicious file can leak internal heap data or corrupt image data for any process that imports PyOpenEXR and processes such files without additional validation. No remote or network exploitation path is explicitly documented.

Generated by OpenCVE AI on August 25, 2026 at 20:27 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade OpenEXR to at least version 3.3.13 or 3.4.14.
  • Implement source validation for EXR files; ensure only trusted files are processed by Python applications.
  • If an upgrade is not immediately possible, configure the OpenEXR API to use separate_channels=True when opening deep EXR files to bypass the faulty lane‑offset calculation.

Generated by OpenCVE AI on August 25, 2026 at 20:27 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Tue, 25 Aug 2026 20:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'none', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Tue, 25 Aug 2026 18:30:00 +0000

Type Values Removed Values Added
Description OpenEXR is the reference implementation and specification for the EXR image file format, widely used in the motion picture industry. In versions 3.3.0 through 3.3.12 and 3.4.0 through 3.4.13, the PyOpenEXR Python bindings return stale heap data when reading a crafted deep scanline EXR that uses layer-prefixed RGB channels. With the default channel coalescing (separate_channels=False), the wrapper groups channels such as left.R, left.G, and left.B into a single RGB sample array, but the lane-offset calculation in PyPart::setDeepSliceData() only recognizes the exact unprefixed names G, B, and A. As a result, prefixed channels like left.G and left.B are decoded into lane 0 while lanes 1 and 2 are left uninitialized and returned to Python. A Python application that reads untrusted deep EXR files through the default OpenEXR.File API and then logs, serializes, previews, or otherwise processes the resulting NumPy sample arrays may expose uninitialized same-process heap contents, in addition to receiving incorrect green and blue channel data. This issue is fixed in versions 3.3.13 and 3.4.14.
Title OpenEXR: PyOpenEXR deep prefixed RGB stale lane disclosure
Weaknesses CWE-200
CWE-457
CWE-908
References
Metrics cvssV3_1

{'score': 4.3, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:N'}


Subscriptions

No data.

cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-08-25T19:20:04.216Z

Reserved: 2026-07-14T22:48:09.781Z

Link: CVE-2026-62986

cve-icon Vulnrichment

Updated: 2026-08-25T19:19:26.753Z

cve-icon NVD

Status : Received

Published: 2026-08-25T19:16:52.120

Modified: 2026-08-25T20:17:00.027

Link: CVE-2026-62986

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-25T20:30:17Z

Weaknesses
  • CWE-200

    Exposure of Sensitive Information to an Unauthorized Actor

  • CWE-457

    Use of Uninitialized Variable

  • CWE-908

    Use of Uninitialized Resource