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

CVE-2026-65970: OpenImageIO Use-After-Free Vulnerability

CVE-2026-65970 is a use-after-free vulnerability in OpenImageIO that allows attackers to trigger denial of service through crafted TIFF files. This post covers the technical details, affected versions, and mitigation.

Published:

CVE-2026-65970 Overview

CVE-2026-65970 affects OpenImageIO, a toolset for reading, writing, and manipulating image files used across visual effects (VFX) and animation pipelines. The vulnerability exists in the multithreaded TIFF scanline reader prior to version 3.1.16.0. A crafted ZIP-compressed TIFF processed with TIFF multithreading enabled triggers a use-after-scope condition in TIFFInput::read_native_scanlines(). Worker tasks continue accessing stale stack and heap storage after their owning objects are destroyed, causing a crash and denial of service. The issue is tracked under [CWE-825] (Expired Pointer Dereference).

Critical Impact

A single malformed TIFF file can crash any application or pipeline stage that uses OpenImageIO with TIFF multithreading enabled, disrupting rendering, asset processing, and image ingestion workflows.

Affected Products

  • OpenImageIO versions prior to 3.1.16.0
  • VFX and animation pipelines relying on OpenImageIO for TIFF ingestion
  • Applications embedding OpenImageIO with TIFF multithreading enabled

Discovery Timeline

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

Technical Details for CVE-2026-65970

Vulnerability Analysis

The defect lives in src/tiff.imageio/tiffinput.cpp inside TIFFInput::read_native_scanlines(). The function dispatches strip decompression work through a task_set that captures references to local objects. When decoding fails, the function returns through an error path while decompression tasks are still queued. Because task_set is declared before ok and compressed_scratch, C++ destroys those captured objects first. The task_set destructor then waits for worker tasks that dereference already-destroyed storage. The result is a use-after-scope condition triggered by a crafted ZIP-compressed TIFF.

Root Cause

The root cause is variable declaration ordering. In C++, local objects are destroyed in reverse declaration order. Because task_set tasks(pool) was declared before ok and compressed_scratch, its destructor executed last. Worker threads inside that destructor then referenced ok and compressed_scratch after their lifetime had already ended. The lifetime mismatch produced expired pointer dereferences during error unwinding.

Attack Vector

Exploitation requires an attacker-supplied TIFF file to reach an OpenImageIO consumer that has TIFF multithreading enabled. User interaction is required to open or process the file. Successful triggering causes a process crash and denial of service. The vulnerability does not expose confidentiality or integrity impact according to the published CVSS vector.

cpp
// Patch excerpt from src/tiff.imageio/tiffinput.cpp
// The task_set declaration was moved to ensure its destructor
// runs while ok and compressed_scratch are still alive.

     // Make room for, and read the raw (still compressed) strips. As each
     // one is read, kick off the decompress and any other extras, to execute
     // in parallel.
-    task_set tasks(pool);
     bool ok        = true;  // failed compression will stash a false here
     int y          = ybegin;
     size_t ystride = m_spec.scanline_bytes(true);

Source: GitHub Commit 31201c2

Detection Methods for CVE-2026-65970

Indicators of Compromise

  • Unexpected crashes in processes linking OpenImageIO when handling TIFF assets, particularly ZIP-compressed variants.
  • Core dumps or stack traces referencing TIFFInput::read_native_scanlines(), uncompress_one_strip(), or task_set destruction.
  • Repeated ingestion failures on the same TIFF asset across render nodes or automated pipelines.

Detection Strategies

  • Inventory build systems and DCC (Digital Content Creation) tools for OpenImageIO versions below 3.1.16.0 using software bill of materials (SBOM) data.
  • Add crash-signal telemetry for processes that load liboiio and correlate crashes with recently ingested TIFF files.
  • Scan incoming asset shares for ZIP-compressed TIFFs and route unknown-origin files through sandboxed validation.

Monitoring Recommendations

  • Monitor render farms, asset ingest gateways, and thumbnail services for abnormal exit codes on image processing workers.
  • Enable OpenImageIO logging where available to capture the file path that preceded each crash.
  • Track TIFF submissions from external vendors and freelancers as higher-risk inputs.

How to Mitigate CVE-2026-65970

Immediate Actions Required

  • Upgrade OpenImageIO to version 3.1.16.0 or later across build environments, render nodes, and packaged applications.
  • Rebuild and redistribute any internal tools that statically link OpenImageIO after applying the fix.
  • Quarantine untrusted TIFF submissions until downstream consumers are patched.

Patch Information

The fix reorders local variable declarations in TIFFInput::read_native_scanlines() so that task_set is destroyed before the objects its worker tasks capture. This ensures pending decompression work completes while ok and compressed_scratch remain valid. Details are available in the GitHub Security Advisory GHSA-v278-gpwr-r836, the GitHub Pull Request #5294, and the GitHub Release v3.1.16.0.

Workarounds

  • Disable TIFF multithreading in OpenImageIO configuration where patching is not immediately possible.
  • Restrict TIFF processing to isolated sandbox workers so crashes do not disrupt shared pipeline services.
  • Validate TIFF compression types at ingest and reject or transcode ZIP-compressed TIFFs from untrusted sources.
bash
# Configuration example: force single-threaded TIFF decoding
# by disabling OpenImageIO's global multithreading for TIFF I/O.
export OPENIMAGEIO_OPTIONS="threads=1,tiff:multithread=0"

# Verify installed OpenImageIO version
oiiotool --version

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.