Skip to main content
← Vulnerabilities

Panic and unbounded allocation (OOM) in the CFB/OLE2 parser on malformed input

Exploited
No known exploitation
Fix
Fixed in 0.38.0
Who is exposed
Not reported

Do first: Upgrade to a fixed version: 0.38.0.

Published
Last modified
10/100 · provisional
None on Exploit-DB, Metasploit or GitHub

Summary

The calamine Rust library, which reads Excel workbooks (.xls, .xlsb, and VBA projects in .xlsx), is affected. A specially crafted spreadsheet file can crash an application that parses it, either through a thread panic or process abort, or cause it to consume excessive memory and run out of resources, resulting in denial of service.

Written by anthropic/claude-haiku-5.5 from the sources below. Verify against them.

Read the original description

The Compound File Binary (OLE2) parser (src/cfb.rs), used when reading .xls and .xlsb workbooks and when extracting VBA projects from .xlsx, can panic or allocate without bound on crafted input. Both are reachable through the public reader API (open_workbook, Xls::new, Xlsb::new) on an attacker-supplied file. Impact is denial of service only — no memory unsafety (safe Rust turns the out-of-bounds read into a bounds-checked panic).

  1. Reachable panic (out-of-bounds slice index). The directory stream is iterated with .chunks(128), but Directory::from_slice reads fixed offsets (buf[..64], buf[116..120], buf[120..128]) without checking the chunk length. A directory stream whose length is not a multiple of 128 yields a short final chunk, causing a panic (range end index 64 out of range for slice of length N). SectorSize::Small 64-byte mini sectors are a second trigger.
  2. Unbounded allocation / OOM. The DIFAT loader grows the difat vector without bounding the number of iterations; a crafted self-referential DIFAT chain drives a multi-gigabyte allocation from a tiny file (a 512-byte file attempts an allocation of several gigabytes).

A consumer that parses untrusted or user-supplied spreadsheets can be crashed (thread panic, or process abort under panic=abort) or driven out of memory by a small crafted file.

Fixed in calamine 0.38.0 (commit b8ec4f0); the maintainer confirmed the fix in https://github.com/tafia/calamine/pull/762.

cve.now Index

10Pcve.now Index 10 of 100 · methodology v3 · provisional
  • Exploitation?/40Unknown. No CISA SSVC exploitation rating yet
  • Exposure?/25Unknown. No advisory context yet
  • Reach10/20Affects crates.io packages
  • Severity?/10Unknown. No CVSS score or vendor rating
  • No patch0/5No signal

What would change the score

  • Would score about 65 if added to CISA KEV
  • Would score about 60 if CISA's SSVC rates exploitation active
  • Would score about 32 if advisories confirm default setups are exposed

What to do

  • Upgrade to a fixed version: 0.38.0.

Timeline

  1. Advisory published6 days
  2. Record last updated

Affected versions

  • calaminecrates.io

    From 0.0.0-0 · fixed in 0.38.0

Evidence 3

  1. Advisory
  2. Repository
  3. Link

Corrections

None so far.

Something wrong on this page? Report an error. Every fix is listed here.

Questions about RUSTSEC-2026-0436

Is RUSTSEC-2026-0436 being exploited?

It is not in CISA's Known Exploited Vulnerabilities catalog, and CISA's SSVC assessment does not mark exploitation as active. That does not mean it has not been attacked: vendors and researchers can report attacks before CISA lists them. No public exploit code is tracked.Source: cve.now feed data

Which versions are affected by RUSTSEC-2026-0436?

calamine (crates.io): from 0.0.0-0 before 0.38.0.Source: cve.now feed data

How do I fix RUSTSEC-2026-0436?

Upgrade to a fixed version: 0.38.0.Source: cve.now feed data