CVE-2026-78206 Overview
CVE-2026-78206 affects exceljs-hardened versions prior to 5.0.0, a Node.js library used to parse and generate Excel .xlsx workbooks. The library decompresses every entry from a supplied XLSX archive into memory without enforcing limits on entry size, total uncompressed size, or compression ratio. An unauthenticated attacker can supply a crafted, highly compressed workbook that expands to gigabytes in memory, exhausting available resources on the host process. The flaw is classified under CWE-409: Improper Handling of Highly Compressed Data (Data Amplification) and is commonly known as a zip bomb condition.
Critical Impact
Remote, unauthenticated attackers can crash Node.js services that ingest attacker-supplied XLSX files, producing sustained denial of service.
Affected Products
- exceljs-hardened npm package versions prior to 5.0.0
- Node.js applications that accept user-supplied XLSX uploads and parse them with the affected library
- Downstream services and pipelines that process XLSX attachments through the vulnerable code path
Discovery Timeline
- 2026-08-24 - CVE-2026-78206 published to NVD
- 2026-08-26 - Last updated in NVD database
Technical Details for CVE-2026-78206
Vulnerability Analysis
An XLSX file is a ZIP archive containing XML parts such as xl/worksheets/sheet1.xml, xl/sharedStrings.xml, and [Content_Types].xml. The affected code path in exceljs-hardened iterates all archive entries and decompresses them fully into memory buffers before parsing. No checks are performed on the declared or observed uncompressed entry size, the aggregate uncompressed size across entries, or the compression ratio between compressed and uncompressed bytes.
Attackers can build a small ZIP archive containing a single stream of repeating null bytes that DEFLATE compresses at ratios exceeding 1000:1. A payload of a few hundred kilobytes on the wire expands into multiple gigabytes of resident memory. The Node.js process reaches its heap limit, triggers V8 out-of-memory termination, or is killed by the operating system OOM handler. Repeated submissions produce sustained denial of service against multi-tenant workers and serverless functions.
Root Cause
The root cause is missing resource governance in the decompression loop referenced in the ExcelJS xlsx.js source. The parser trusts the archive metadata and buffers full entry content without a streaming ceiling. Because the library targets server-side ingestion of externally supplied workbooks, this trust boundary is misplaced.
Attack Vector
Exploitation requires only the ability to submit an XLSX file to an endpoint that hands the file to exceljs-hardened. Typical vectors include file upload forms, email attachment processors, report ingestion APIs, and background job queues. No authentication, user interaction, or prior foothold is required when the upload endpoint is publicly reachable. Refer to the GitHub Security Advisory GHSA-7cvf-3r55-r39q and the VulnCheck advisory for additional detail. No verified public exploit code is available; describing the vulnerability class is sufficient without synthetic proof-of-concept snippets.
Detection Methods for CVE-2026-78206
Indicators of Compromise
- Node.js worker processes terminating with FATAL ERROR: JavaScript heap out of memory or SIGKILL from the OS OOM killer shortly after XLSX ingestion.
- Uploaded XLSX files with unusually small compressed size but declared or observed uncompressed size in the gigabyte range.
- Repeated 5xx responses or gateway timeouts from upload endpoints correlated with spikes in container memory usage.
Detection Strategies
- Inventory package-lock.json and yarn.lock files across repositories and build artifacts to identify exceljs-hardened versions below 5.0.0.
- Add pre-parsing checks that inspect ZIP central directory metadata and reject archives whose uncompressed-to-compressed ratio exceeds a safe threshold (for example, 100:1).
- Instrument the parsing service with per-request memory ceilings and log any request that approaches the ceiling for review.
Monitoring Recommendations
- Alert on Node.js process restarts, OOM kills, and container memory saturation events on hosts that parse XLSX content.
- Track upload endpoint error rates and response latency, and correlate anomalies with file size distributions.
- Retain ingested XLSX samples for forensic replay so that suspected zip-bomb submissions can be analyzed offline.
How to Mitigate CVE-2026-78206
Immediate Actions Required
- Upgrade exceljs-hardened to version 5.0.0 or later across all services, container images, and serverless deployments.
- Place XLSX parsing behind a request size limit at the reverse proxy or API gateway to reduce attacker payload budget.
- Isolate XLSX parsing in a dedicated worker process with a hard heap cap so that abuse cannot degrade the primary application.
Patch Information
The maintainers addressed the flaw in exceljs-hardened 5.0.0 by enforcing limits on entry size, aggregate uncompressed size, and compression ratio during XLSX decompression. Review the fix and release notes in the exceljs-hardened advisory GHSA-7cvf-3r55-r39q and pin the dependency to a version at or above 5.0.0.
Workarounds
- Validate ZIP central directory metadata before invoking the parser and reject archives with an uncompressed-to-compressed ratio above a conservative threshold.
- Run XLSX parsing with node --max-old-space-size=<limit> set to a value that bounds worst-case memory usage and restarts the worker on breach.
- Restrict XLSX upload endpoints to authenticated users and apply per-user rate limits until the patched version is deployed.
# Configuration example
npm install exceljs-hardened@^5.0.0
node --max-old-space-size=512 server.js
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

