Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessCraft encrypted XLSX with excessive spinCount
-
DeliveryDeliver file to target application
-
ExploitOpenFile invokes agileDecrypt
-
ExecutionKey-derivation loop runs unbounded
-
ImpactCPU core exhausted for attacker-chosen duration
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V2 - Validation and Business Logic Resource consumption limits
MITRE ATT&CK
1 technique across 1 tactic: Impact The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires that the target application open an attacker-supplied, agile-encrypted (OOXML agile encryption) .xlsx workbook via Excelize OpenFile with decryption attempted - the crafted file must carry an OLE encrypted-workbook header whose KeyEncryptor EncryptedKey declares an excessively large spinCount, which is then fed unbounded to convertPasswdToKey before verifier validation. Limiting factors: only Excelize versions 2.3.1 through 2.11.0 are affected; the workbook must use agile encryption and the application must actually invoke decryption (i.e., supply/attempt a password on an encrypted file), so plain unencrypted spreadsheet handling is not reachable; and impact is bounded to one CPU core per malicious file rather than a full host outage. No authentication or user privileges are required to supply the file, but realistic network exploitation depends on the service auto-ingesting untrusted encrypted spreadsheets. |
| Impact | This is a genuine but moderate-priority availability issue, not a critical system-takeover flaw. The provided CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/C:N/I:N/A:H) indicates a network-reachable, low-complexity, unauthenticated condition with availability-only impact (CWE-400 uncontrolled resource consumption), which is consistent with the description: a crafted encrypted workbook forces an unbounded, uncancellable password-key-derivation loop. However, several signals temper the raw 7.5 score. No EPSS probability was provided, no CISA KEV listing applies, and no public exploit was flagged in the input, so there is no evidence of active or widespread exploitation. The A:H rating is arguably generous: the description states the impact is consumption of a single CPU core for an attacker-controlled duration, which is degraded performance/partial DoS rather than a full outage on multi-core hosts - I would independently assess availability as A:L (see assessed vector). The AV:N rating also depends on deployment: Excelize is a library, so network exploitability is only realistic when a service automatically ingests and decrypts attacker-supplied .xlsx files; in a desktop/offline tool the realistic vector is lower. Net: treat as a medium-priority hardening fix for any service that decrypts untrusted encrypted spreadsheets, but not an emergency. |
| Exploit ScenarioDerived | An attacker uploads a malicious encrypted .xlsx file to a web service that uses Excelize to open and decrypt spreadsheets (e.g., a document-processing or import endpoint). The crafted OLE encrypted-workbook header declares an excessive spinCount, and when the service calls OpenFile and reaches agileDecrypt/convertPasswdToKey, the key-derivation loop spins for the attacker-chosen number of iterations, pinning a CPU core and degrading service for a sustained period. No public exploit was identified at time of analysis, though the upstream fix PR (#2389) and its test case clearly reveal the triggering mechanism. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 07, 2026
Denial of service in the Excelize Go library (versions 2.3.1 through 2.11.0) allows unauthenticated remote attackers to pin a CPU core by supplying a crafted agile-encrypted .xlsx workbook whose OLE encryption header declares an excessively large spinCount, which the library feeds unbounded into its password-key derivation loop. Opening such a file with decryption attempted (OpenFile with a password) makes agileDecrypt run attacker-selected iterations before any verifier validation, and the work cannot be cancelled. There is no confirmed active exploitation (not in CISA KEV) and no public exploit code identified at time of analysis, but the impact per malicious file is bounded to one CPU core rather than a full host outage. An upstream fix exists in PR #2389 / commit 2badfcd, but no tagged patched release is confirmed.
RemediationAI
Upstream fix available (PR/commit); released patched version not independently confirmed. PR #2389 / commit 2badfcd adds a maxSpinCount cap of 1e7 in crypt.go and returns ErrMaxSpinCount when the file-supplied spinCount is negative or above the cap, so upgrade to the Excelize release that incorporates this change as soon as it is tagged, or vendor the patched crypt.go/errors.go files directly if you must ship sooner (verify the commit hash 2badfcd5841d0d88b0ffea119f5a2f3c53b4910b). Because no fixed release is confirmed, use compensating controls in the interim: do not call OpenFile with a password on untrusted workbooks (the attack is unreachable unless decryption is attempted, so rejecting or skipping encrypted files removes the exposure entirely); if encrypted files must be processed, parse and validate the OLE EncryptionInfo header yourself and reject workbooks whose EncryptedKey spinCount exceeds a sane ceiling such as 100,000 (the value Excel itself emits), accepting that legitimate files with unusual spinCounts will be refused; and run decryption in a CPU-limited, time-limited sandbox or worker with per-file quotas and request timeouts, which contains the damage to one core per file but adds latency and operational complexity. Reference the advisory at https://github.com/qax-os/excelize/security/advisories/GHSA-jrfj-fhj2-jjvm for updates on the patched release.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in go, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The vulnerability lives in Excelize's OOXML agile encryption implementation (crypt.go). Spreadsheets saved with ECMA-376 agile encryption store an EncryptionInfo stream containing KeyEncryptors whose EncryptedKey element carries a spinCount value; the library uses this count as the number of iterated hash rounds performed by convertPasswdToKey when deriving the password key, mirroring the iterated-hash scheme Microsoft defines for agile encryption. Because the spinCount is read from the file itself and passed to the loop before the password verifier is checked, the count is fully attacker-controlled and imposes no upper bound on work per open. The root cause is CWE-400 (Uncontrolled Resource Consumption): a missing sanity bound and lack of cancellation on a loop driven by untrusted input. The reported CPE (cpe:2.3:a:qax-os:excelize:*:*:*:*:*:*:*) covers the Excelize library from the qax-os project, and the upstream fix introduces maxSpinCount = 1e7 plus a new ErrMaxSpinCount returned when spinCount is negative or exceeds that cap, validated inside agileDecrypt before convertPasswdToKey is invoked.
Know when Excelize 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:N/S:U/C:N/I:N/A:H
Unauthenticated low-complexity processing of an attacker-supplied file (AV:N/AC:L/PR:N/UI:N), no confidentiality/integrity impact, and availability set to A:L because the impact is single-CPU-core exhaustion, not full denial.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
DescriptionCVE.org
Excelize is a Go language library for reading and writing Microsoft Excel spreadsheets. From 2.3.1 to 2.11.0, agile decryption accepts an attacker-controlled spinCount and performs that many password-key derivation iterations before verifier validation. OpenFile reaches agileDecrypt, which passes the unbounded spinCount to convertPasswdToKey before password verification. When a crafted OLE encrypted-workbook header supplies an excessive spinCount and the file is opened, the key-derivation loop performs unbounded attacker-selected work and cannot be cancelled, allowing an attacker to consume a CPU core for an attacker-controlled duration. No fixed version is available as of this review.
Technical POC Analysis
CWE-400 (Uncontrolled Resource Consumption), specifically unbounded attacker-controlled loop count in password-key derivation.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
The Excelize Go library (versions 2.3.1 through 2.11.0) contains a HIGH-severity denial-of-service flaw that can pin a CPU core when an application attempts password-based decryption of a crafted agile-encrypted .xlsx workbook. Organizations that accept and decrypt untrusted spreadsheets through Go services are exposed to repeated resource exhaustion, which can degrade availability; the impact per malicious file is bounded to one CPU core rather than a full host outage. Leadership should care because no vendor-released patch is confirmed, no public exploit identified at time of analysis, and service owners need to locate affected dependencies and apply interim CPU and timeout isolation.
No vendor-released patch identified at time of analysis; restrict password-protected .xlsx ingestion to trusted sources, disable or avoid OpenFile with passwords where possible, run parsing in isolated CPU-limited workers with strict timeouts and concurrency limits, monitor CPU utilization for pinning, and track PR #2389 / commit 2badfcd for a tagged release.
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.
Denial of service in the Excelize Go library (github.com/xuri/excelize/v2, a.k.a. qax-os/excelize) before 2.11.0 allows
Denial of service in the Excelize Go library (versions 2.1.0 through 2.11.0) allows an attacker-controlled spreadsheet t
A crafted Excel (.xlsx) file can crash any Go application that parses it with Excelize 2.0.0 through 2.11.0 using a non-
Uncontrolled memory and CPU consumption in Excelize (qax-os/excelize), the widely used Go library for reading and writin
Denial of service in Excelize 2.9.0 through 2.11.0 allows a crafted spreadsheet to panic and terminate a Go process that
Go slice-bounds panic in the Excelize spreadsheet library versions 2.8.1 through 2.11.0 lets a crafted .xlsx workbook cr
Denial of service in the Excelize Go spreadsheet library (github.com/xuri/excelize/v2 2.0.0-2.11.0 and github.com/xuri/e
Uncontrolled recursion in the Excelize Go library (versions 2.8.1 through 2.11.0) allows a fatal Go stack overflow that
Denial of service in Excelize versions 2.3.1 through 2.11.0 allows unauthenticated remote attackers to terminate the cal
Memory exhaustion and runtime panic in the Excelize Go library (versions 2.3.1 through 2.11.0) let unauthenticated remot
Resource exhaustion in the Excelize Go library (versions 2.1.0 through 2.11.0) lets a crafted .xlsx workbook drive exces
Panic-triggering denial of service in the Excelize Go library (all versions prior to 2.11.0) allows any actor who can su
EUVD-2026-94549
GHSA-jrfj-fhj2-jjvm
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB