Skip to main content

OpenImageIO CVE-2026-59956

| EUVDEUVD-2026-83120 MEDIUM
Out-of-bounds Read (CWE-125)
2026-09-18 GitHub_M
6.1
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Craft malicious 16-bit IFF with z-buffer
  2. Delivery
    Deliver image to victim or pipeline
  3. Exploit
    Victim opens file in OpenImageIO reader
  4. Execution
    Oversized memcpy over-reads heap buffer
  5. Impact
    Crash 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

OpenImageIO < 3.0.20.0
OpenImageIO 3.2.0.0-dev, < 3.2.0.3-beta1
OpenImageIO 3.1.0.0, < 3.1.15.0

Affected Packages

euvd openimageio fix: 3.0.20.0, 3.1.15.0
euvd openimageio_3_2_0_0_dev fix: 3.2.0.3-beta1

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

Vendor (GitHub_M) PRIMARY 6.1 MEDIUM
AV:L/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:H
vuln.today AI 6.1 MEDIUM

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.

3.1 AV:L/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:H
4.0 AV:L/AC:L/AT:N/PR:N/UI:P/VC:L/VI:N/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Local
Attack Complexity
Low
Privileges Required
None
User Interaction
Required
Scope
Unchanged
Confidentiality
Low
Integrity
None
Availability
High

Lifecycle Timeline

1
Patch available
Sep 18, 2026 - 17:17 EUVD

DescriptionCVE.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

EPSS Score
0.2%
Top 90% exploitable
Prevalence
Medium
Widely-used VFX/animation image library, but niche IFF-with-z-buffer code path
Data Quality
6 sources
Confidence: High

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Defer
Exploitation
Poc
System Exposure· derived
Small
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

30
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +30
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

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.

CVE-2023-42299 CRITICAL POC
9.8 Nov 02

Buffer Overflow vulnerability in OpenImageIO oiio v.2.4.12.0 allows a remote attacker to execute arbitrary code and caus

CVE-2022-41838 CRITICAL POC
9.8 Dec 22

A code execution vulnerability exists in the DDS scanline parsing functionality of OpenImageIO Project OpenImageIO v2.4.

CVE-2022-41837 CRITICAL POC
9.8 Dec 22

An out-of-bounds write vulnerability exists in the OpenImageIO::add_exif_item_to_spec functionality of OpenImageIO Proje

CVE-2022-41794 CRITICAL POC
9.8 Dec 22

A heap based buffer overflow vulnerability exists in the PSD thumbnail resource parsing code of OpenImageIO 2.3.19.0. Ra

CVE-2022-41639 CRITICAL POC
9.8 Dec 22

A heap based buffer overflow vulnerability exists in tile decoding code of TIFF image parser in OpenImageIO master-branc

CVE-2022-38143 CRITICAL POC
9.8 Dec 22

A heap out-of-bounds write vulnerability exists in the way OpenImageIO v2.3.19.0 processes RLE encoded BMP images. Rated

CVE-2022-41649 CRITICAL POC
9.1 Dec 22

A heap out of bounds read vulnerability exists in the handling of IPTC data while parsing TIFF images in OpenImageIO v2.

CVE-2023-42295 HIGH POC
8.8 Oct 23

An issue in OpenImageIO oiio v.2.4.12.0 allows a remote attacker to execute arbitrary code and cause a denial of service

CVE-2022-43602 HIGH POC
8.1 Dec 22

Multiple code execution vulnerabilities exist in the IFFOutput::close() functionality of OpenImageIO Project OpenImageIO

CVE-2022-43601 HIGH POC
8.1 Dec 22

Multiple code execution vulnerabilities exist in the IFFOutput::close() functionality of OpenImageIO Project OpenImageIO

CVE-2022-43600 HIGH POC
8.1 Dec 22

Multiple code execution vulnerabilities exist in the IFFOutput::close() functionality of OpenImageIO Project OpenImageIO

CVE-2022-43599 HIGH POC
8.1 Dec 22

Multiple code execution vulnerabilities exist in the IFFOutput::close() functionality of OpenImageIO Project OpenImageIO

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy