GHSA-cx6p-vjc6-3php on CTRL-OS 26.05
Aliases: GHSA-cx6p-vjc6-3php
Packages: openexr
Status: Plausible
Advisory Information
Summary
A malformed DWAA/DWAB EXR can declare a DWA
UNKNOWNstream shorter than the byte count required by UNKNOWN-classified channels. OpenEXR accepts the short declared stream, then the UNKNOWN row-copy path reconstructs full channel rows from_planarUncBuffer[UNKNOWN], exposing bytes that were never initialized by the file's UNKNOWN stream.This is a file-triggered uninitialized pixel disclosure, the focused harness aborts intentionally after detecting allocator-pattern bytes in decoded output.
Affected path
In
src/lib/OpenEXRCore/internal_dwa_compressor.h:
UNKNOWN_UNCOMPRESSED_SIZEis read from the DWA chunk counters.- The decoder checks only that
unknownUncompressedSize <= _planarUncBufferSize[UNKNOWN]before inflating UNKNOWN data.- The UNKNOWN channel copy loop later copies
chan->width * pixelSizefor each row until the full channel is reconstructed, bounded by_planarUncBufferSize[UNKNOWN], not by the initialized UNKNOWN byte count.For the PoC:
channel X requirement = 64 * 32 * 2 = 4096 bytes UNKNOWN_UNCOMPRESSED_SIZE = 20 UNKNOWN_COMPRESSED_SIZE = 11 zlib UNKNOWN output length = 20 leaked allocator pattern = 4076/4096 decoded bytesReproduction
From
/home/br0nzu/openexr/v3.4.13:./report/45.\ OpenEXR\ v3.4.13\ DWA\ UNKNOWN\ declared\ short\ uninitialized\ pixel\ disclosure/reproduce.shFresh validation results:
v3.4.13 exrcheck safe/PoC: rc=0 OK v3.4.13 harness PoC original/ASAN/UBSAN: rc=134, leaked allocator pattern into channel 0: 4076/4096 bytes origin-main snapshot harness PoC original/ASAN/UBSAN: rc=134, same 4076/4096 disclosureThe
origin/mainsource checked at6820342930d35c7c81a6b220c4a0aca9c2532542still lacks a check thatUNKNOWN_UNCOMPRESSED_SIZEis at least the byte count required by UNKNOWN-classified channels.PoC package
poc.zipcontains only the files needed for reproduction:reproduce.sh poc_dwaa_unknown_decl20_actual20_channel4096.exr poc_materials/base_dwaa_unknown_x.exr poc_materials/fuzz_dwa_unknown_declared_short_api.cppImpact
An attacker who can supply an EXR image to an application using OpenEXR can cause decoded UNKNOWN-channel pixel data to contain stale heap bytes from the decoding process. Applications that save, display, transmit, or otherwise expose decoded pixels may leak process memory contents.
Updates
2026-08-11 03:51 CEST
Metadata changes:
- Status for package
openexr: “Plausible”
2026-08-11 03:31 CEST
Metadata changes:
- Status for package
openexr: “New”