Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessCraft malformed OLE file with valid EncryptionInfo
-
DeliveryDeliver to app that decrypts spreadsheets
-
ExploitDecrypt dispatches to standard/agile decryptor
-
ExecutionUnvalidated slice/index/divide triggers runtime panic
-
ImpactCalling process terminates (DoS)
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A10:2025 - Mishandling of Exceptional Conditions
ASVS 5.0
V16 - Security Logging and Error Handling Exception handling completeness
|
| Exploitation Conditions | Exploitation requires the host application to call Excelize's Decrypt on an attacker-supplied file (e.g. opening or decrypting an uploaded, password-protected .xlsx), and the malicious OLE compound file must contain a version-valid EncryptionInfo stream so that dispatch proceeds into standardDecrypt or agileDecrypt. The vulnerable code path is only reached for the encrypted-workbook decryption flow - applications that never process encrypted/untrusted spreadsheets are not exposed. Limiting factors: the attacker needs a channel to get the file to the decryption routine, affected versions are Excelize 2.3.1 through 2.11.0, and the worst-case outcome is process termination only (no code execution or data disclosure). No fixed version exists, so mitigation must occur at the application layer (validating or sandboxing untrusted file processing). |
| Impact | All impact signals point to a single outcome - denial of service. The provided CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H, base 7.5) and CWE-248 (uncaught exception) agree: there is no confidentiality or integrity impact, only availability loss via an unrecovered Go runtime panic that terminates the calling process. The 'network' attack vector is nominal - it reflects that a malicious file can be delivered remotely (e.g. uploaded to a service that decrypts it), not that the library listens on a socket; real exploitation always requires the victim application to open or pass an attacker-supplied spreadsheet to Decrypt. No EPSS score, KEV listing, or POC was provided in the input, so there is no public evidence of active exploitation; the risk is a reliability/crash issue rather than a code-execution or data-breach threat. The one aggravating factor is that no fixed version exists as of this review, so affected deployments cannot remediate by upgrading and must mitigate at the application layer. Net assessment: a genuine but bounded DoS - a real priority only for services that decrypt untrusted, encrypted Excel files; low urgency for applications that never process untrusted encrypted input. NOTE: EPSS data is absent, so exploitation probability cannot be quantified. |
| Exploit ScenarioDerived | An attacker uploads or supplies a malformed OLE compound file that carries a version-valid EncryptionInfo stream to an application that uses Excelize to open or decrypt spreadsheets. When the application calls Decrypt, the attacker-controlled EncryptionInfo and EncryptedPackage data reach standardDecrypt or agileDecrypt before validation, hitting one of nine malformed-input classes that causes an unrecovered Go runtime panic and crashes the process. No public exploit was identified at time of analysis, though the patch PR (#2395) and its test cases effectively document the triggering inputs. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 07, 2026
Denial of service in Excelize versions 2.3.1 through 2.11.0 allows unauthenticated remote attackers to terminate the calling Go process by supplying a malformed OLE compound file with a version-valid EncryptionInfo stream to the library's Decrypt function. The decryption dispatch lacks structural and parameter validation, causing nine malformed-input classes to trigger unrecovered Go runtime panics instead of returning documented errors. Exploitation requires the host application to process attacker-supplied encrypted spreadsheets, no fixed version is available as of this review, and no public exploit code has been identified.
RemediationAI
No vendor-released patch version exists as of this review; an upstream fix is available in PR 2395 (commit 22f76f9acb94b85b3eb9c4365ab4f750cebbc565) but a tagged release has not been independently confirmed. Until a patched version is released, do not call Excelize's Decrypt on untrusted files if that functionality is not required. If encrypted spreadsheet processing is essential, run it in an isolated child process or sandboxed worker so a panic terminates only that worker rather than the main service, accepting the added latency and operational complexity. Alternatively, implement strict pre-validation of the OLE compound file structure (checking EncryptionInfo stream version, stream lengths, and key-size fields) before invoking Decrypt, but note this duplicates upstream logic and may still miss edge cases. Monitor the vendor advisory at https://github.com/qax-os/excelize/security/advisories/GHSA-2j4c-ffch-9f23 and apply the fix from PR 2395 once a release is available.
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
Excelize is a Go library for reading and writing Microsoft Excel spreadsheets. Its encrypted-workbook decryption flow parses OLE compound files, extracting an EncryptionInfo stream that selects either standard or agile encryption, and an EncryptedPackage stream containing the ciphertext. CWE-248 (Uncaught Exception) is the root cause: before calling standardDecrypt or agileDecrypt, the dispatch routine fails to validate attacker-controlled values such as EncryptionHeaderSize, KeySize, KeyBits, BlockSize, SpinCount, and buffer lengths. Those values are then used in slice operations, indexing, memory allocation, and division, so nine distinct malformed inputs cause Go runtime panics that are not recovered. The CPE cpe:2.3:a:qax-os:excelize:*:*:*:*:*:*:*:* covers the package, but the vulnerable range is specifically 2.3.1 to 2.11.0, where the decryption dispatch first performed insufficient structural and parameter validation. The offered fix in GitHub PR 2395 and commit 22f76f9acb94b85b3eb9c4365ab4f750cebbc565 adds bounds checks, block-size validation, and key-length restrictions before decryption proceeds.
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
A malicious file can be delivered to an automated decryption service (AV:N, PR:N, UI:N) and reliably triggers a panic (AC:L); impact is availability-only crash, so C:N/I:N/A:H.
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, the decryption dispatch performs insufficient structural and parameter validation before standard and agile decryptors slice, index, allocate, and divide using attacker-controlled values. Decrypt passes attacker-controlled EncryptionInfo and EncryptedPackage data into standardDecrypt or agileDecrypt before validating the structures used by those routines. When a malformed OLE compound file with a version-valid EncryptionInfo stream is opened or passed to Decrypt, nine malformed-input classes reach unrecovered Go runtime panics instead of the documented error path, allowing an attacker to terminate the calling process. No fixed version is available as of this review.
Technical POC Analysis
CWE-248 (unrecovered exception).
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
A denial-of-service weakness in the Excelize Go library, affecting versions 2.3.1 through 2.11.0, lets a malformed encrypted spreadsheet crash the entire Go process that parses it - meaning any internal or customer-facing service that accepts uploaded Excel files can be knocked offline by a single bad document. Because Excelize is a broadly embedded open-source dependency, the exposure likely spans multiple application teams and products rather than a single system, and no vendor-released patch was identified at the time of this analysis, leaving availability risk unmitigated by upgrading alone. Leadership should care because the failure mode is whole-process termination, which can translate directly into service outages and SLA breaches rather than a contained error.
No vendor-released patch identified at time of analysis. Interim mitigations: isolate spreadsheet parsing in a separate, restartable process or sandboxed worker to contain panic-induced termination; wrap Decrypt and file-opening calls in panic-recovery handlers that return errors to the caller; validate and allow-list uploaded file formats and reject password-protected or encrypted spreadsheets where business requirements permit; enforce strict file-size and upload-rate limits; and monitor for abnormal process exits or restarts correlated with document ingestion.
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
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 library (versions 2.3.1 through 2.11.0) allows unauthenticated remote attackers to
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
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-94531
GHSA-2j4c-ffch-9f23
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB