Description
OpenMcdf is a fully .NET / C# library to manipulate Compound File Binary File Format files, also known as Structured Storage. In 3.1.3 and earlier, the BST name-lookup loop in DirectoryTree.TryGetDirectoryEntry (OpenMcdf/DirectoryTree.cs:35-46) walks directory entries by repeatedly calling directories.TryGetSibling(child, siblingType, validateColor). A crafted CFB file with cyclic Left/Right sibling links among directory entries, constructed so the per-step BST-order check in TryGetSibling (DirectoryEntries.cs:84-85) is satisfied at every step, drives this while (child is not null) loop forever. There is no cycle detection in TryGetDirectoryEntry, and the bug is reachable from RootStorage.OpenStorage(name), TryOpenStorage(name), OpenStream(name), and TryOpenStream(name), causing an unrecoverable denial of service. This issue is fixed in version 3.1.4.
Published: 2026-07-17
Score: 6.2 Medium
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

OpenMcdf is a .NET/C# library for manipulating Compound File Binary (CFB) files. In versions 3.1.3 and earlier, its DirectoryTree.TryGetDirectoryEntry routine contains a BST name‑lookup loop that iterates over directory entries by repeatedly calling directories.TryGetSibling(child, siblingType, validateColor). When a CFB file is crafted with cyclic left/right sibling links that satisfy the BST‑order check at every step, the loop, which has no cycle detection, runs indefinitely. This causes the host application to consume CPU resources endlessly and ultimately become unresponsive, resulting in a denial of service. The flaw is a classic infinite‑loop (CWE‑835) bug and is resolved in OpenMcdf version 3.1.4.

Affected Systems

The issue affects the openmcdf library, versions 3.1.3 and earlier. The fix is available in version 3.1.4 and later releases of the library.

Risk and Exploitability

The CVSS score of 6.2 indicates moderate severity, but the EPSS score of less than 1% suggests a low probability of exploitation at this time. The vulnerability is not listed in the CISA KEV catalog. An attacker can exploit this by supplying a specially crafted CFB file to any application that uses OpenMcdf’s OpenStorage or OpenStream functions, leading to an unrecoverable denial of service. Based on the description, it is inferred that no additional authentication is required; the attack could be local or remote depending on the library exposure.

Generated by OpenCVE AI on July 30, 2026 at 23:27 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Update the openmcdf library to version 3.1.4 or later, which includes loop termination logic.
  • If an upgrade is not immediately possible, add defensive validation to reject CFB files that contain cyclic sibling references before invoking OpenMcdf functions.
  • Deploy application-level monitoring to detect prolonged CPU usage or hangs during file handling, and trigger alerts or automated restart of the offending process.

Generated by OpenCVE AI on July 30, 2026 at 23:27 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-5qwm-7pvp-w988 OpenMcdf: Uncatchable infinite loop in DirectoryTree.TryGetDirectoryEntry on crafted CFB directory cycle
History

Tue, 21 Jul 2026 03:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'poc', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Fri, 17 Jul 2026 22:45:00 +0000

Type Values Removed Values Added
First Time appeared Openmcdf
Openmcdf openmcdf
Vendors & Products Openmcdf
Openmcdf openmcdf

Fri, 17 Jul 2026 21:00:00 +0000

Type Values Removed Values Added
Description OpenMcdf is a fully .NET / C# library to manipulate Compound File Binary File Format files, also known as Structured Storage. In 3.1.3 and earlier, the BST name-lookup loop in DirectoryTree.TryGetDirectoryEntry (OpenMcdf/DirectoryTree.cs:35-46) walks directory entries by repeatedly calling directories.TryGetSibling(child, siblingType, validateColor). A crafted CFB file with cyclic Left/Right sibling links among directory entries, constructed so the per-step BST-order check in TryGetSibling (DirectoryEntries.cs:84-85) is satisfied at every step, drives this while (child is not null) loop forever. There is no cycle detection in TryGetDirectoryEntry, and the bug is reachable from RootStorage.OpenStorage(name), TryOpenStorage(name), OpenStream(name), and TryOpenStream(name), causing an unrecoverable denial of service. This issue is fixed in version 3.1.4.
Title OpenMcdf: Uncatchable infinite loop in DirectoryTree.TryGetDirectoryEntry on crafted CFB directory cycle
Weaknesses CWE-835
References
Metrics cvssV3_1

{'score': 6.2, 'vector': 'CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H'}


Subscriptions

Openmcdf Openmcdf
cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-07-21T02:20:18.829Z

Reserved: 2026-05-13T07:45:21.252Z

Link: CVE-2026-45785

cve-icon Vulnrichment

Updated: 2026-07-21T02:20:13.897Z

cve-icon NVD

No data.

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-07-30T23:30:08Z

Weaknesses
  • CWE-835

    Loop with Unreachable Exit Condition ('Infinite Loop')