Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessCraft malicious 16-bit IFF with z-buffer
-
DeliveryDeliver image to victim or pipeline
-
ExploitVictim opens file in OpenImageIO reader
-
ExecutionOversized memcpy over-reads heap buffer
-
ImpactCrash or adjacent heap data disclosed
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Bounds checking, read limits
MITRE ATT&CK
1 technique across 1 tactic: Collection The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires the target to parse a specifically malformed IFF image through OpenImageIO's iff.imageio reader: an UNCOMPRESSED 16-bit IFF file that INCLUDES a z-buffer channel, which causes rgba_count-sized allocation to mismatch the pixel_bytes() copy stride in IffInput::readimg(). Limiting factors: the CVSS vector is AV:L with UI:R, so a user or automated process must actively open the attacker-supplied file - there is no remote, unauthenticated, zero-interaction path. Only OpenImageIO versions prior to 3.0.20.0, 3.1.15.0, and 3.2.0.3-beta1 are affected, and only the 16-bit-plus-z-buffer IFF path triggers it; ordinary IFF or other formats are unaffected. Realistic risk concentrates in automated VFX/render/asset pipelines that ingest untrusted images without human review. |
| Impact | This is a genuine but low-urgency memory-safety issue best characterized as a moderate-severity local vulnerability, not a network-facing emergency. The vendor CVSS 3.1 vector (6.1, AV:L/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:H) correctly frames it as a LOCAL vector requiring a victim to open a crafted file (UI:R): an attacker cannot reach it remotely without first delivering a malicious .iff image. Impact is bounded - a heap over-read yielding a crash (A:H) or limited disclosure of adjacent heap bytes copied into the decoded image (C:L), with no integrity impact (I:N). No EPSS score, no CISA KEV listing, and no weaponized exploit are present in the input; a regression test file (tiny_rgba16z.iff) exists in the fix but that is a trigger sample, not an exploitation POC. Signals are internally consistent - there is no CVSS-vs-description conflict here - so this reads as a low-real-risk, defense-worthy bug rather than a priority-patch scenario. The main caveat is exposure context: OpenImageIO is frequently embedded in automated render/asset-ingestion pipelines that process untrusted images, which can effectively remove the human UI:R step and make availability-based DoS more relevant than the raw AV:L suggests. |
| Exploit ScenarioDerived | An attacker crafts an uncompressed 16-bit IFF image containing a z-buffer channel and delivers it to a victim (via an asset pack, email attachment, or an automated image-ingestion service) that uses OpenImageIO to read it. When IffInput::readimg() allocates a scanline sized by rgba_count but copies using the larger pixel_bytes() stride, the oversized memcpy over-reads the heap, crashing the process or leaking adjacent heap contents into the output image. No public exploit is identified at time of analysis, though the fix includes a regression trigger sample. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 18, 2026
Heap out-of-bounds read in OpenImageIO's IFF image reader (src/iff.imageio/iffinput.cpp, IffInput::readimg()) affects all releases prior to 3.0.20.0, 3.1.15.0, and 3.2.0.3-beta1, allowing a caller that opens a crafted uncompressed 16-bit IFF file containing a z-buffer channel to trigger a crash or leak adjacent heap contents into the decoded image output. The flaw is an allocation/stride mismatch: the temporary scanline buffer is sized from m_header.rgba_count while the subsequent memcpy uses m_header.pixel_bytes(), whose stride also counts z-buffer bytes, producing an oversized copy. Exploitation requires local, user-initiated parsing of the malicious file (CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:H, 6.1) with no privileges needed but no remote zero-interaction path; no public exploit code and no confirmed active exploitation were identified at time of analysis, and EPSS/KEV data were not provided. Vendor-released patches exist in versions 3.0.20.0, 3.1.15.0, and 3.2.0.3-beta1.
RemediationAI
Upgrade OpenImageIO to 3.0.20.0, 3.1.15.0, or 3.2.0.3-beta1 (or any later release on the corresponding branch) - vendor-released patches per the advisory at https://github.com/AcademySoftwareFoundation/OpenImageIO/security/advisories/GHSA-hjfv-gvxc-qgvh; downstream applications that embed OpenImageIO must be rebuilt or relinked against a fixed version. The upstream fix is PR #5251 / commit f01bd16764b2a06f372899e3e302280a7f9c8c02, which replaces the intermediate scanline buffer with direct per-pixel writes; cherry-picking that commit is an option only if you cannot move to a tagged release, in which case treat the backport as unverified until tested. If immediate upgrade is impossible, compensating controls are: block untrusted IFF files at the ingestion boundary (content-type/extension filtering at upload, watch-folder, and render-farm entry points) - effective but trivially bypassed by renaming or mislabeled extensions, so pair it with magic-byte validation; pre-process untrusted images in an isolated, low-privilege worker (container, seccomp/AppArmor profile, ulimit on address space) so that a crash or heap over-read cannot reach production memory or other jobs' data - this costs pipeline latency and infrastructure complexity but contains both the availability and the disclosure impact; and, where the IFF format is not required at all, build/configure OpenImageIO without the IFF imageio plugin to remove the attack surface entirely, accepting that any legitimate IFF asset in the pipeline will then fail to load. Restricting who can submit images and monitoring for reader crashes/ASan reports in VFX ingest services are useful detection adjuncts, and applying the provided regression asset (testsuite/iff/src/tiny_rgba16z.iff) as a post-patch smoke test verifies the fix behaves as expected.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
OpenImageIO is a C++ image I/O library and toolset widely embedded in VFX, animation, and rendering pipelines. Its IFF reader plugin (src/iff.imageio/iffinput.cpp) handles ILBM/PBM-style bitmaps, and IffInput::readimg() reconstructs scanlines from the file header fields m_header.rgba_count (number of RGBA channels) and m_header.pixel_bytes() (bytes per pixel, which for these files also accounts for z-buffer channel bytes). In the vulnerable code path the reader allocated a temporary std::vector<uint16_t> scanline sized as tw * m_header.rgba_count, then copied into the output row using memcpy(out_dy, scanline.data(), tw * m_header.pixel_bytes()). When an uncompressed 16-bit IFF carries a z-buffer, pixel_bytes() exceeds the rgba_count-derived size, so the memcpy reads past the end of the temporary heap buffer and writes the over-read bytes into the destination image, surfacing as a crash (availability) or as disclosure of adjacent heap memory to whoever reads the decoded image (confidentiality). This is CWE-125 (Out-of-bounds Read), rooted in inconsistent length calculations for the same buffer rather than in a missing bounds check alone. The upstream fix (PR #5251, commit f01bd16764b2a06f372899e3e302280a7f9c8c02) removes the intermediate scanline vector entirely and writes each decoded pixel directly into the output buffer, advancing the destination pointer by sizeof(pixel), which eliminates the divergent sizing; a regression test using testsuite/iff/src/tiny_rgba16z.iff (1x1, 5 channel, uint16 RGBA + float Z) was added to lock in correct behavior. CPE cpe:2.3:a:academysoftwarefoundation:openimageio:*:*:*:*:*:*:*:* confirms the affected product family across all pre-fix versions.
Know when Openimageio gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:L/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:H
Local crafted-file parsing needing a user to open the image (AV:L/UI:R), no auth (PR:N); heap over-read leaks limited adjacent data (C:L) and crashes the process (A:H), no integrity impact.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
OpenImageIO is a toolset for reading, writing, and manipulating image files of any image file format relevant to VFX / animation. Prior to 3.0.20.0, 3.1.15.0, and 3.2.0.3-beta1, An uncompressed 16-bit iff image with a z-buffer makes iffinput::readimg() allocate a temporary scanline from m_header.rgba_count but copy from it using m_header.pixel_bytes(), whose stride also includes z-buffer bytes. the oversized memcpy reads beyond the temporary heap buffer and copies adjacent memory into the output image, resulting in a crash or disclosure of adjacent heap data. The affected implementation is identified by src/iff.imageio/iffinput.cpp, IffInput::readimg(), m_header.rgba_count, and m_header.pixel_bytes(), which define the relevant source path, functions, state, and trigger. This issue is fixed in versions 3.0.20.0, 3.1.15.0, and 3.2.0.3-beta1.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
A buffer overflow occurs when a program writes more data to a memory buffer than it was allocated to hold, causing the excess data to spill into adjacent memory regions.
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
More in Openimageio
View allBuffer Overflow vulnerability in OpenImageIO oiio v.2.4.12.0 allows a remote attacker to execute arbitrary code and caus
A code execution vulnerability exists in the DDS scanline parsing functionality of OpenImageIO Project OpenImageIO v2.4.
An out-of-bounds write vulnerability exists in the OpenImageIO::add_exif_item_to_spec functionality of OpenImageIO Proje
A heap based buffer overflow vulnerability exists in the PSD thumbnail resource parsing code of OpenImageIO 2.3.19.0. Ra
A heap based buffer overflow vulnerability exists in tile decoding code of TIFF image parser in OpenImageIO master-branc
A heap out-of-bounds write vulnerability exists in the way OpenImageIO v2.3.19.0 processes RLE encoded BMP images. Rated
A heap out of bounds read vulnerability exists in the handling of IPTC data while parsing TIFF images in OpenImageIO v2.
An issue in OpenImageIO oiio v.2.4.12.0 allows a remote attacker to execute arbitrary code and cause a denial of service
Multiple code execution vulnerabilities exist in the IFFOutput::close() functionality of OpenImageIO Project OpenImageIO
Multiple code execution vulnerabilities exist in the IFFOutput::close() functionality of OpenImageIO Project OpenImageIO
Multiple code execution vulnerabilities exist in the IFFOutput::close() functionality of OpenImageIO Project OpenImageIO
Multiple code execution vulnerabilities exist in the IFFOutput::close() functionality of OpenImageIO Project OpenImageIO
EUVD-2026-83120
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB