CVE-2026-63638
Executive Summary
CVE-2026-63638 is a heap-based out-of-bounds write (CWE-787) in OpenImageIO, a widely used image I/O toolkit for VFX and animation pipelines. A crafted Cineon image that declares an unsupported component bit depth of 26 causes CineonInput::open() to allocate a 32-bit image specification while the underlying libcineon decoder writes data sized for an 8-byte-per-component value, allowing attacker-controlled bytes to be written past the caller's 4-byte-per-pixel buffer. With a CVSS 3.1 base score of 8.3, exploitation requires user interaction (opening a malicious image) but yields high integrity and availability impact, making it a serious risk for render farms, media asset pipelines, and any service that processes untrusted image input.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Technical Analysis
OpenImageIO is a library and toolset for reading, writing, and manipulating image files relevant to VFX and animation workflows. The Cineon image format plugin is implemented at src/cineon.imageio/cineoninput.cpp, and this CVE concerns three components within it: CineonInput::open(), CineonInput::read_native_scanline(), and the helper ComponentDataSize().
The vulnerability arises from a type/size mismatch between two layers of the image decoding stack:
OpenImageIO layer: A crafted Cineon file can declare a component bit depth of 26 bits. This value is not a supported bit depth in the normal integer set (e.g., 8, 10, 16, 32). When
CineonInput::open()parses the file header and encounters bit depth 26, it maps the value to a 32-bitImageSpec.ImageSpecis OpenImageIO's structure describing image dimensions, channel count, and per-channel data formats. A 32-bit spec means each channel component is assumed to occupy 4 bytes per pixel.libcineon layer: The underlying libcineon decoder does not treat bit depth 26 as an error. Instead, it maps the unsupported depth to an 8-byte value. Consequently, the buffer stride and element size expected by libcineon do not match the 4-byte-per-pixel buffer that OpenImageIO allocated based on the 32-bit
ImageSpec.Out-of-bounds write: During
CineonInput::read_native_scanline(), the decoder writes a scanline of pixel data using its 8-byte component size into a buffer sized for 4-byte components. Because the write exceeds the allocated caller buffer, attacker-controlled data is written beyond the buffer boundary, producing a heap out-of-bounds write and memory corruption.
The root cause is a failure to validate or normalize the declared bit depth when the file header is parsed, and a failure to reconcile the differing interpretations of "bit depth 26" between OpenImageIO and libcineon before a buffer is allocated and filled. ComponentDataSize() is the helper implicated in determining component element size, which is where the 4-byte vs. 8-byte discrepancy manifests. CWE-787 (Out-of-bounds Write) is the assigned weakness, and the subtype is a heap-based out-of-bounds write driven by an integer/size mismatch (a classic "declared size vs. actual write size" flaw).
Attack surface: any code path that opens a Cineon file with OpenImageIO — command-line tools like oiiotool/iconvert, library consumers in DCC applications (e.g., compositing and rendering software), automated asset ingestion services, thumbnail generators, and format-conversion microservices. The vulnerability is network-deliverable in the sense that the malicious file can be transmitted to a victim, but reliable code execution requires the victim (or an automated pipeline) to open the file, as reflected by UI:R in the CVSS vector.
Exploitation Scenarios
No public proof-of-concept or exploit code is known at the time of writing; the attack chain below is inferred from the vulnerability class and the NVD description. Where specific identifiers are used, they appear verbatim in the NVD description.
Step 1 — Reconnaissance / target identification. An adversary identifies a target that processes image files with OpenImageIO, such as a VFX studio render farm, an asset management or transcoding service, a media ingestion API, or a desktop application that embeds the library for Cineon support. Public package metadata, error pages, or job-submission interfaces may reveal the product and version. The attacker does not need authentication to craft the file (PR:N), only the ability to get it opened (UI:R).
Step 2 — Triggering the flaw class. The attacker constructs a Cineon image whose header declares an unsupported component bit depth of 26. This is the specific trigger identified in the NVD description. When CineonInput::open() processes the file, it accepts the 26-bit declaration and produces a 32-bit ImageSpec; libcineon separately maps the unsupported depth to an 8-byte value. No public tool is required to author the malformed header — an attacker can modify a valid Cineon file's bit-depth field or synthesize a minimal one.
Step 3 — Payload / execution method. The attacker delivers the crafted file through the normal business channel: an email attachment, a shared asset repository, a job/queue submission, an upload form, or a URL. When the victim or pipeline invokes CineonInput::read_native_scanline(), the mismatch causes the decoder to write 8-byte-per-component data into a buffer allocated as 4 bytes per pixel. The bytes written past the buffer boundary derive from attacker-controlled file contents, so the attacker controls the out-of-bounds data. Because the overflow length is driven by the number of components and scanline width, the attacker can tune the overflow volume. At the vulnerability-class level, a controlled heap out-of-bounds write of this kind is typically leveraged to corrupt adjacent heap metadata or objects, and with sufficient control may be steered toward code execution; the described impact of "memory corruption" and the CVSS I:H/A:H ratings are consistent with that.
Step 4 — Post-exploitation impact. Successful corruption of the heap can crash the process (availability) or be chained to modify adjacent data structures (integrity). In a pipeline context, compromising a worker process that handles untrusted submissions could allow lateral movement within a render or storage cluster. The CVSS vector rates confidentiality impact as Low (C:L) — suggestive of limited information disclosure from memory corruption — and integrity/availability as High.
Impact Assessment
- Business impact: Organizations running VFX, animation, media, or any pipeline that ingests third-party image assets with OpenImageIO are exposed. A successful exploit can cause crashes (throttling availability of render or conversion services) or, in the worst case, memory corruption exploitable for code execution within a trusted worker process.
- Affected systems: Anything linking an affected version of OpenImageIO and processing untrusted Cineon files — CLI tools (
oiiotool,iconvert), DCC plugins, transcoding services, asset management systems, and build-time image processing in CI. - Blast radius: Medium to high in media-focused environments where untrusted image submission is routine; lower in locked-down environments where all image input is trusted and provenance-controlled.
- CVSS 3.1 subscores:
AV:N(network-deliverable payload),AC:L(no special conditions beyond the crafted header),PR:N(no privileges required),UI:R(victim must open the file),S:U(impact confined to the vulnerable component),C:L,I:H,A:H. Base score 8.3 (High). - EPSS: Not yet scored by FIRST.org at the time of writing. No CISA KEV listing. PoC: None. Nuclei template: No.
Detection Guidance
Detection should focus on (a) crafted Cineon files declaring bit depth 26 or otherwise anomalous component depths, and (b) process behavior (crashes, heap errors) in OpenImageIO-based tooling. The rules below are behavior- and content-oriented heuristics; because no public PoC exists, they target the vulnerability class and IOC patterns rather than a known signature.
Sigma Rule
title: OpenImageIO Cineon Bit Depth Out-of-Bounds Write Attempt
id: 7c2f1a44-9b3e-4d0a-a6c1-6b2e5f9d8a10
status: experimental
description: Detects crashes or abnormal terminations of OpenImageIO-based tools (oiiotool, iconvert) when processing Cineon files, consistent with CVE-2026-63638 heap OOB write.
references:
- https://nvd.nist.gov/vuln/detail/CVE-2026-63638
author: valtersit.com
date: 2026/01/01
logsource:
category: process_creation
product: linux
detection:
selection_img:
Image|endswith:
- '/oiiotool'
- '/iconvert'
- '/idiff'
selection_cineon:
CommandLine|contains: '.cin'
selection_crash:
CommandLine|contains:
- 'heap-buffer-overflow'
- 'AddressSanitizer'
- 'Segmentation fault'
condition: selection_img and (selection_cineon or selection_crash)
falsepositives:
- Legitimate conversion of very large Cineon assets
- Debug builds with sanitizers enabled
level: medium
tags:
- attack.t1203
- cve.2026.63638
YARA Rule
rule CVE_2026_63638_Cineon_BitDepth26
{
meta:
author = "valtersit.com"
description = "Detects crafted Cineon image headers declaring an unsupported component bit depth of 26 (CVE-2026-63638)"
reference = "https://nvd.nist.gov/vuln/detail/CVE-2026-63638"
date = "2026-01-01"
severity = "high"
strings:
$magic = { 80 2A 5F D7 }
$cineon_magic2 = { D7 5F 2A 80 }
condition:
($magic at 0 or $cineon_magic2 at 0) and
uint32be(0) == 0x802A5FD7 and
filesize < 50MB
}
Note: A Cineon file begins with the 4-byte magic
0x802A5FD7. Because the bit-depth field offset is implementation-specific to the header layout and is not documented in the provided NVD description, a positional byte-level match for the value 26 is intentionally omitted to avoid false precision. This rule identifies candidate Cineon files for downstream validation with a hardened parser or sanitizer.
Suricata IDS Rule
alert http any any -> any any (msg:"CVE-2026-63638 OpenImageIO Cineon Bit Depth 26 Heap OOB Write Attempt"; flow:established,to_server; http.method; content:"POST"; http.uri; content:".cin"; nocase; file_data; content:"|80 2A 5F D7|"; depth:4; filestore; sid:202663638; rev:1; metadata:cve CVE-2026-63638, created_at 2026_01_01; classtype:attempted-user; reference:url,nvd.nist.gov/vuln/detail/CVE-2026-63638;)
Elastic Detection
process where process.name in ("oiiotool", "iconvert", "idiff") and
(process.command_line like~ "*.cin*" or
process.args like~ "*.cin*") and
process.exit_code != 0
Rationale: OpenImageIO command-line tools that exit non-zero shortly after being invoked on a .cin argument are a strong behavioral indicator of a malformed Cineon file triggering the parsing/reading failure path described in CVE-2026-63638.
Splunk SPL Query
index=endpoint OR index=linux_sysmon
(process_name IN ("oiiotool","iconvert","idiff") OR process_image="*oiiotool*")
| search (command_line="*.cin*" OR command_line="*.cineon*")
| stats count min(_time) as first_seen max(_time) as last_seen
values(command_line) as commands
values(process_name) as procs
by host user
| where count > 0
| convert ctime(first_seen) ctime(last_seen)
Wazuh OSSEC Rule
<group name="openimageio,cve-2026-63638,">
<rule id="1006638" level="10">
<decoded_as>json</decoded_as>
<field name="process.name">oiiotool|iconvert|idiff</field>
<field name="process.command_line">\.cin</field>
<description>CVE-2026-63638: OpenImageIO processing Cineon file - possible heap out-of-bounds write</description>
<mitre>
<id>T1203</id>
</mitre>
<group>attack,cve_2026_63638,</group>
</rule>
<rule id="1006639" level="12">
<decoded_as>json</decoded_as>
<field name="process.name">oiiotool|iconvert|idiff</field>
<regex>heap-buffer-overflow|AddressSanitizer|SIGSEGV</regex>
<description>CVE-2026-63638: OpenImageIO crash consistent with crafted Cineon bit depth 26</description>
<mitre>
<id>T1203</id>
</mitre>
<group>attack,cve_2026_63638,</group>
</rule>
</group>
Mitigation & Patch Guidance
Patch confidence: 0/4 (UNPATCHED — no patch evidence from any tracked source). The NVD description states the issue "is fixed in versions 3.0.21.0, 3.1.16.0, and 3.2.0.3-beta1," but no vendor advisory, commit, or source artifact was available to corroborate a patch; treat upgrades as unverified until a signed release is confirmed.
Immediate mitigations
- Block or quarantine Cineon (
.cin) files from untrusted sources at the email gateway, upload endpoint, and asset-ingestion service. - If Cineon input is not business-required, disable the format in OpenImageIO builds or remove the plugin from processing pipelines.
- Enforce least privilege for pipelines and workers that open untrusted image files; run them in a sandbox or container with no access to shared credentials or clusters.
- Enable OpenImageIO's format filtering/preferences to restrict accepted formats where supported, and front-line validation of image headers before processing.
- Block or quarantine Cineon (
Patch / upgrade steps
- Upgrade to OpenImageIO 3.0.21.0, 3.1.16.0, or 3.2.0.3-beta1 (per the NVD description) as soon as a signed vendor release is confirmed. Because patch confidence is 0/4, verify release integrity and changelogs before deployment.
- Rebuild and redeploy any vendored or statically linked copies of the library; OpenImageIO is frequently bundled inside DCC tools and container images.
- Regenerate SBOMs and rescan container images and CI artifacts after upgrading.
Long-term hardening
- Treat all image input as untrusted: fuzz the Cineon parser (and other format plugins) with libFuzzer/AFL and ASan in CI.
- Add strict validation/normalization of declared bit depths and reconcile OpenImageIO's
ImageSpecexpectations with libcineon's actual write sizes at parse time. - Adopt memory-safe decoding boundaries (bounds checks in
read_native_scanline-class functions) and compile with-D_FORTIFY_SOURCE, ASan/Valgrind in test, and hardened allocators in production. - Monitor upstream OpenImageIO releases and subscribe to vendor advisories for the three affected branches.
References
- NVD — CVE-2026-63638: https://nvd.nist.gov/vuln/detail/CVE-2026-63638
- OpenImageIO project (source, releases, advisories): https://github.com/AcademySoftwareFoundation/OpenImageIO
- CWE-787 — Out-of-bounds Write: https://cwe.mitre.org/data/definitions/787.html
- FIRST EPSS (currently unscored for this CVE): https://www.first.org/epss/
- CISA Known Exploited Vulnerabilities catalog (CVE not listed as of writing): https://www.cisa.gov/known-exploited-vulnerabilities-catalog
Threat actor / in-the-wild note: No threat actor campaigns, exploit-in-the-wild evidence, public proof-of-concept, or Nuclei template were identified for CVE-2026-63638 at the time of writing. CISA KEV: NO. EPSS: not yet scored.
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.