Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessCraft FITS file with endless headerless blocks
-
DeliveryDeliver file to OpenImageIO-based app/pipeline
-
ExploitVictim opens/processes the image
-
ExecutionUnbounded recursion in read_fits_header()
-
ImpactStack exhaustion crashes process (DoS)
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Recursion depth limits
|
| Exploitation Conditions | Exploitation requires that a target application or service using OpenImageIO (prior to 3.0.20.0, 3.1.15.0, or 3.2.0.3-beta1) reads/parses an attacker-supplied FITS-format file. The specific trigger is a FITS stream containing consecutive 2880-byte header blocks that omit the mandatory END keyword, causing FitsInput::read_fits_header() in src/fits.imageio/fitsinput.cpp to recurse without a depth bound. Limiting factors: the victim must actually open/ingest the crafted file (UI:R), impact is limited to a crash of the parsing process (availability only, no code execution or data exposure), and installations on fixed versions are not affected. Practical exposure depends on whether the deployment accepts untrusted image uploads or processes external FITS assets automatically. |
| Impact | This is a genuine but bounded-severity denial-of-service issue, not a high-priority remote-code-execution threat. The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H) and CWE-674 (Uncontrolled Recursion) agree with the description: a crafted FITS image file drives FitsInput::read_fits_header() into unbounded self-recursion, exhausting the application stack and crashing the process. Impact is availability-only (C:N/I:N) - no data disclosure, no code execution, no scope change. The network vector (AV:N) is nominal for a file-parsing library: 'network' realistically means the crafted file is delivered to an application/service that embeds OpenImageIO, and UI:R correctly reflects that a user or automated pipeline must actually open/process the file. No EPSS score, no CISA KEV listing, and no public exploit code are provided in the input, so exploitation status is 'no public exploit identified at time of analysis.' There is no SSVC data supplied. Net: a real, easily-triggered crash that is worth patching in VFX/render pipelines, but the absence of confidentiality/integrity impact and of any exploitation signal keeps it a moderate-priority hygiene fix rather than an emergency. |
| Exploit ScenarioDerived | An attacker crafts a malicious FITS file consisting of consecutive 2880-byte header blocks that never contain the mandatory END keyword, then delivers it to any application, render farm, or asset-ingestion service that uses OpenImageIO to read images. When the file is opened, read_fits_header() recurses without a depth bound until the stack is exhausted and the process crashes. No public proof-of-concept is referenced, but the trigger is precisely described in the advisory and the fix diff, making reproduction straightforward. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 18, 2026
Stack exhaustion in OpenImageIO's FITS image reader (all releases prior to 3.0.20.0, 3.1.15.0, and 3.2.0.3-beta1) lets a crafted FITS stream crash a parsing process by driving FitsInput::read_fits_header() into unbounded recursion. The trigger is a stream of consecutive 2880-byte header blocks that never contain the mandatory END keyword, so each block causes another self-call until the application stack is consumed; remote, unauthenticated attackers can deliver the payload but successful exploitation requires the victim to open or ingest the file (UI:R), and the resulting impact is availability-only with no code execution or data disclosure. No public exploit code or confirmed active exploitation has been identified at time of analysis, and vendor-released fixes are available.
RemediationAI
Upgrade to a vendor-fixed release: 3.0.20.0, 3.1.15.0, or 3.2.0.3-beta1, which replace the recursive header parse with an iterative loop capped at 10,000 header blocks (upstream fix in PR #5248, commit b0de7d40d06eb4abc7ef14c1321a1a2a976d8c1c; advisory GHSA-xvwr-x6ch-v2fq). If immediate upgrade is not possible, the most effective compensating control is to stop passing untrusted FITS data to affected parsers - reject .fits/.fit/.fts uploads at the application boundary or route them through an external converter before OpenImageIO touches them - accepting that legitimate FITS workflows will be disrupted. Alternatively, disable the FITS format in the OpenImageIO plugin path so the parser is never reached, at the cost of losing all FITS support. Running the image-parsing stage in a dedicated worker process with a bounded stack (e.g. ulimit -s) and a supervisor that restarts on crash limits the blast radius to a single worker, though low stack limits can cause spurious failures on legitimate deeply nested formats. Because exploitation requires the victim to open the crafted file, blocking automated ingestion of externally supplied FITS assets from email, uploads, or shared storage further reduces exposure.
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 widely used C++ image I/O toolset for VFX, animation, and scientific pipelines, and its FITS plugin at src/fits.imageio/fitsinput.cpp implements parsing of the FITS (Flexible Image Transport System) container format originally from astronomy. A FITS header is composed of 2880-byte blocks made up of 80-character cards; the header is terminated by a mandatory END keyword card, and one or more header blocks may precede image data. In affected builds, when a block was processed without encountering END, FitsInput::read_fits_header() called itself to read the next block instead of looping, producing unbounded recursion - the classic CWE-674 (Uncontrolled Recursion) pattern. An attacker who supplies a FITS file consisting of an arbitrarily long run of well-formed-looking 2880-byte header blocks with no END card forces one stack frame per block; memory is consumed until a stack overflow aborts the process. The CPE cpe:2.3:a:academysoftwarefoundation:openimageio:*:*:*:*:*:*:*:* covers the entire pre-fix code line. The upstream remediation (PR #5248, commit b0de7d40d06eb4abc7ef14c1321a1a2a976d8c1c) restructures the parser into an iterative loop bounded to a maximum of 10,000 header blocks, a bounded-loop mitigation rather than a semantic enforcement of the END keyword.
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:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H
Crafted file processed by a networked consumer (AV:N) with no auth (PR:N) but requiring the victim to open it (UI:R); unbounded recursion yields a process crash - availability-only (A:H, C/I:N).
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, A crafted fits stream containing consecutive 2880-byte header blocks without the mandatory end keyword makes fitsinput::read_fits_header() call itself without a depth bound. repeated recursive parsing exhausts the application stack, resulting in denial of service. The affected implementation is identified by src/fits.imageio/fitsinput.cpp, FitsInput::read_fits_header(), END keyword, and 2880-byte FITS header blocks, 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
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
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-83121
NVD
CVE.org
EPSS
GitHub
Exploit-DB