Skip to main content

Excelize EUVDEUVD-2026-94549

| CVE-2026-107219 HIGH
Uncontrolled Resource Consumption (CWE-400)
2026-10-07 GitHub_M GHSA-jrfj-fhj2-jjvm
7.5
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Craft encrypted XLSX with excessive spinCount
  2. Delivery
    Deliver file to target application
  3. Exploit
    OpenFile invokes agileDecrypt
  4. Execution
    Key-derivation loop runs unbounded
  5. Impact
    CPU 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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

excelize 2.3.1, ≤ 2.11.0

Affected Packages

go github.com/xuri/excelize/v2 fix: 2.11.1-0.20260906004932-2badfcd5841d
euvd excelize_2_3_1 no fix

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

Vendor (GitHub_M) PRIMARY 7.5 HIGH
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
vuln.today AI 5.3 MEDIUM

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.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
High

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

Why It Matters

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.

Business Impact: High
Compensating Controls

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

EPSS Score
0.3%
Top 75% exploitable
Prevalence
Medium
popular Go Excel library, broad but not universal ecosystem footprint
Threat Intel
1
1 sources
Data Quality
6 sources
Confidence: High

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
Yes
Human Impact
High
Technical Impact
Partial

Priority Score

38
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +38
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

CVE-2026-54063 HIGH POC
7.5 Jul 10

Denial of service in the Excelize Go library (github.com/xuri/excelize/v2, a.k.a. qax-os/excelize) before 2.11.0 allows

CVE-2026-107212 HIGH POC
7.5 Oct 07

Denial of service in the Excelize Go library (versions 2.1.0 through 2.11.0) allows an attacker-controlled spreadsheet t

CVE-2026-107221 MEDIUM POC
6.5 Oct 07

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-

CVE-2026-59161 HIGH POC
8.7 Jul 10

Uncontrolled memory and CPU consumption in Excelize (qax-os/excelize), the widely used Go library for reading and writin

CVE-2026-107213 HIGH
8.7 Oct 07

Denial of service in Excelize 2.9.0 through 2.11.0 allows a crafted spreadsheet to panic and terminate a Go process that

CVE-2026-107211 HIGH
8.7 Oct 07

Go slice-bounds panic in the Excelize spreadsheet library versions 2.8.1 through 2.11.0 lets a crafted .xlsx workbook cr

CVE-2026-107217 HIGH
7.5 Oct 07

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

CVE-2026-107216 HIGH
7.5 Oct 07

Uncontrolled recursion in the Excelize Go library (versions 2.8.1 through 2.11.0) allows a fatal Go stack overflow that

CVE-2026-107214 HIGH
7.5 Oct 07

Denial of service in Excelize versions 2.3.1 through 2.11.0 allows unauthenticated remote attackers to terminate the cal

CVE-2026-107215 HIGH
7.5 Oct 07

Memory exhaustion and runtime panic in the Excelize Go library (versions 2.3.1 through 2.11.0) let unauthenticated remot

CVE-2026-107223 HIGH
7.1 Oct 07

Resource exhaustion in the Excelize Go library (versions 2.1.0 through 2.11.0) lets a crafted .xlsx workbook drive exces

CVE-2026-59162 MEDIUM
6.9 Jul 10

Panic-triggering denial of service in the Excelize Go library (all versions prior to 2.11.0) allows any actor who can su

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy