Skip to main content
Vulnerability Database/CVE-2026-63635

CVE-2026-63635: OpenImageIO PSD Parser DOS Vulnerability

CVE-2026-63635 is a denial of service vulnerability in OpenImageIO that allows attackers to crash the application through crafted PSD files. This post explains its technical details, affected versions, and mitigation steps.

Published:

CVE-2026-63635 Overview

CVE-2026-63635 is an out-of-bounds read vulnerability [CWE-125] in OpenImageIO, the open-source toolset used across visual effects and animation pipelines for reading, writing, and manipulating image files. The flaw resides in the Photoshop Document (PSD) input plugin at src/psd.imageio/psdinput.cpp. A crafted PSD file with an invalid color_mode bypasses header validation when the oiio:rawcolor or psd:rawdata attribute is enabled. The unchecked value is then used to index fixed color-mode tables inside PSDInput::setup(), causing a global out-of-bounds read and potentially a bogus allocation. Versions prior to 3.0.21.0, 3.1.16.0, and 3.2.0.3-beta1 are affected.

Critical Impact

A local attacker can trigger denial of service in any application that parses attacker-supplied PSD files through OpenImageIO with raw color or raw data modes enabled.

Affected Products

  • OpenImageIO versions prior to 3.0.21.0
  • OpenImageIO versions prior to 3.1.16.0
  • OpenImageIO versions prior to 3.2.0.3-beta1

Discovery Timeline

  • 2026-09-18 - CVE-2026-63635 published to the National Vulnerability Database
  • 2026-09-24 - Last updated in NVD database

Technical Details for CVE-2026-63635

Vulnerability Analysis

The defect lies in the PSD header validation logic. When either oiio:rawcolor or psd:rawdata is set, PSDInput::validate_header() returned early before verifying the color_mode field. That field is an attacker-controlled 16-bit value pulled directly from the PSD header. PSDInput::setup() subsequently uses color_mode as an index into fixed-size tables such as mode_channel_count to determine channel counts and allocation sizes.

Because the index was never bounds-checked in the raw path, reads occur past the end of these global tables. The resulting values can propagate into memory allocation calls, producing bogus sizes and reliable process termination. The vulnerability is exploitable purely through file parsing and does not require network access.

Root Cause

The validation function short-circuited on m_WantRaw before checking color_mode against the known set of Photoshop color modes (Bitmap, Indexed, RGB, Grayscale, CMYK, Multichannel, Duotone, Lab). Any other value passed unchecked into table-indexing code, producing an out-of-bounds read [CWE-125].

Attack Vector

Exploitation requires an authenticated local user to open or process a malicious PSD file with an OpenImageIO-backed tool where oiio:rawcolor or psd:rawdata is enabled. Impact is limited to availability; there is no confidentiality or integrity compromise. User interaction is required.

cpp
// Patch: validate color_mode BEFORE the raw-mode early return
// Source: https://github.com/AcademySoftwareFoundation/OpenImageIO/commit/50481b0f90932a4675f65f3cc26407139cb9e20e
         errorfmt("[Header] invalid depth {}", m_header.depth);
         return false;
     }
-    if (m_WantRaw)
-        return true;
-
-    //There are other (undocumented) color modes not listed here
+    // Reject color modes outside the known set
     switch (m_header.color_mode) {
     case ColorMode_Bitmap:
     case ColorMode_Indexed:
     case ColorMode_RGB:
     case ColorMode_Grayscale:
     case ColorMode_CMYK:
-    case ColorMode_Multichannel: break;
+    case ColorMode_Multichannel:
     case ColorMode_Duotone:
-    case ColorMode_Lab:
-        errorfmt("[Header] unsupported color mode {:d}", m_header.color_mode);
-        return false;
+    case ColorMode_Lab: break;
     default:
         errorfmt("[Header] unrecognized color mode {:d}", m_header.color_mode);
         return false;
     }
+
+    if (m_WantRaw)
+        return true;
+
+    // Duotone and Lab are only supported via the raw path (handled above).

The fix relocates the color-mode allow-list check so it always runs before the raw-mode early return. See the OpenImageIO Pull Request 5282 for full context.

Detection Methods for CVE-2026-63635

Indicators of Compromise

  • Unexpected crashes or aborts in processes linking OpenImageIO (oiiotool, iinfo, maketx, or DCC applications) when handling PSD input.
  • PSD files whose header color_mode value falls outside the range 0–8.
  • Log entries containing [Header] unrecognized color mode from patched builds indicate blocked exploitation attempts.

Detection Strategies

  • Scan asset ingestion pipelines for PSD files with malformed headers by parsing bytes 24–25 of the PSD signature block and validating them against known color modes.
  • Enable core dump collection on render farms and asset workers to identify repeated PSDInput::setup() crashes.
  • Track OpenImageIO library versions across build systems and endpoints using software inventory tooling.

Monitoring Recommendations

  • Alert on process termination signals (SIGSEGV, SIGABRT) originating from image-processing services that consume user-supplied content.
  • Monitor upload directories used by render pipelines for PSD files exceeding expected structural constraints.
  • Correlate file-parser crashes with the file hash and originating user account to identify sources of malicious inputs.

How to Mitigate CVE-2026-63635

Immediate Actions Required

  • Upgrade OpenImageIO to 3.0.21.0, 3.1.16.0, or 3.2.0.3-beta1 or later across all workstations, render nodes, and build systems.
  • Audit dependent applications (Blender, Houdini, Maya, Nuke, Substance) for bundled OpenImageIO copies and update or rebuild them.
  • Restrict processing of untrusted PSD content until affected hosts are patched.

Patch Information

The fix is available in OpenImageIO Release v3.0.21.0 and OpenImageIO Release v3.1.16.0. Full technical details are documented in GitHub Security Advisory GHSA-3c8w-9xvm-r6gf and the corrective OpenImageIO Commit Update.

Workarounds

  • Disable the oiio:rawcolor and psd:rawdata attributes in pipeline configurations where they are not required.
  • Sandbox image-processing tools using seccomp, AppArmor, or containerization to contain crashes and limit blast radius.
  • Validate PSD headers with an external tool before passing files to OpenImageIO-based workflows.
bash
# Configuration example: disable raw PSD paths in oiiotool invocations
# Avoid setting these attributes on untrusted inputs:
#   --attrib oiio:rawcolor 1
#   --attrib psd:rawdata 1

# Verify installed OpenImageIO version
oiiotool --version

# Example pinned upgrade using pip (Python bindings)
pip install --upgrade 'OpenImageIO>=3.1.16.0'

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.