Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessCraft malicious XLSX with malformed cellIs/dataBar/colorScale rule
-
DeliveryDeliver file to app that parses spreadsheets
-
ExploitApp calls GetConditionalFormats on crafted worksheet
-
ExecutionOut-of-range index or nil dereference triggers panic
-
ImpactUnprotected process terminates (DoS)
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V2 - Validation and Business Logic Array index validation
|
| Exploitation Conditions | Exploitation requires that the host application (1) ingest an attacker-controlled spreadsheet and (2) explicitly call GetConditionalFormats on it; the crafted worksheet must contain a cellIs rule lacking its formula, a dataBar rule missing Cfvo/Color children, or a colorScale rule that is absent or declares three colors with fewer than three cfvo value objects. Only Excelize versions 2.7.0 through 2.11.0 are affected and no fixed version exists yet. Limiting factors: the application must actually invoke the conditional-format extraction path (UI:R), the impact is confined to a process panic (availability only), and a host that wraps the call in a Go recover() or isolates parsing in a sandboxed worker can prevent full process termination. |
| Impact | This is a medium-severity denial-of-service issue, and the signals are internally consistent rather than conflicting. The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H) correctly reflects a remote, unauthenticated, low-complexity panic with availability-only impact and no confidentiality or integrity loss (C:N/I:N) - consistent with CWE-129 (improper validation of array index) and the nil-dereference/out-of-range crashes described. No EPSS score was provided in the input, so exploitation probability cannot be quantified. KEV status is not present (treated as NO) and no public exploit is listed, though the fix PR #2375 and its added test cases publicly demonstrate the exact crafted-worksheet inputs that trigger the crash. The key risk-tempering facts are: impact is limited to a process panic (not RCE or data exposure), exploitation requires UI:R - the host application must both ingest an attacker-controlled spreadsheet and specifically call GetConditionalFormats - and in Go a panic can be contained with recover(), so well-architected services may degrade gracefully rather than terminate. The notable aggravating factor is that the description states no fixed version is available as of review, leaving no clean upgrade path. Net: a legitimate but moderate-priority availability bug for services that parse untrusted spreadsheets, not a high-urgency item despite AV:N. |
| Exploit ScenarioDerived | An attacker uploads a crafted .xlsx file to a web service that uses Excelize to inspect conditional formatting (e.g., a document-processing or reporting backend). The file contains a cellIs, dataBar, or colorScale rule missing its expected child elements; when the service calls GetConditionalFormats, Excelize indexes an empty slice or dereferences a nil colorScale and panics, terminating the unprotected worker process. No public weaponized exploit is identified, but the fix PR's test cases publicly document the exact triggering payloads. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 07, 2026
Malformed Excel workbooks can terminate Go processes that use Excelize's conditional-format extractor, because versions 2.7.0 through 2.11.0 index required child slices and dereference an optional colorScale element without validating rule structure. An unauthenticated remote attacker who can get a crafted spreadsheet ingested by a host application that subsequently calls GetConditionalFormats can trigger an out-of-range index or nil-pointer dereference that panics and terminates an unprotected process; user interaction is required to deliver the file and the impact is availability only. No public exploit code has been identified at time of analysis, and no released fixed version exists, although the upstream fix is visible in PR #2375 and commit be7a16390fa69c71d3ca618c741d1a2b5ed362cd.
RemediationAI
No vendor-released patched version is available as of this review; the upstream fix exists only as pull request https://github.com/qax-os/excelize/pull/2375 and commit https://github.com/qax-os/excelize/commit/be7a16390fa69c71d3ca618c741d1a2b5ed362cd, so operators should track the repository for the next tagged release and pin to it once published, or vendor the commit patch into their build. The most direct compensating control is to wrap every GetConditionalFormats call in a Go recover() block or run spreadsheet parsing in a segregated goroutine or sandboxed worker so a panic degrades to a per-file parse failure instead of terminating the host process, at the cost of losing partial output for that file and possibly masking unrelated defects. Alternatively, pre-validate incoming workbook XML and reject conditionalFormatting/cfRule elements of type cellIs without a formula child, dataBar without both cfvo and color children, or colorScale that is absent or declares three colors with fewer than three cfvo value objects, which is effective but requires an XML pre-parse pass and can break legitimate files produced by permissive spreadsheet writers. Blocking untrusted uploads entirely is the safest but least functional option. Applications that never call GetConditionalFormats are not exposed, so removing or gating that code path is also a valid stopgap. Consult the advisory at https://github.com/qax-os/excelize/security/advisories/GHSA-rxcj-4pj5-74gr for status updates.
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 pure-Go library for reading and writing Microsoft Excel (OOXML) spreadsheets, mapped in the CPE data as cpe:2.3:a:qax-os:excelize (version wildcard, reflecting the upstream qax-os/excelize repository). The relevant technology is OOXML conditional formatting: worksheet XML carries conditionalFormatting/cfRule elements whose types include cellIs, dataBar and colorScale, and the library unmarshals these into Go structs (xlsxCfRule, xlsxColorScale, xlsxDataBar). The root cause is CWE-129 (Improper Validation of Array Index), compounded by unchecked nil dereferences: extractCondFmtCellIs reads c.Formula[0] without confirming any formula child exists, extractCondFmtNoErrors dereferences c.ColorScale without a nil guard, extractCondFmtColorScale allows a rule declaring three colors while fewer than three cfvo value objects are present, and extractCondFmtDataBarRule operates on DataBar.Cfvo and DataBar.Color without confirming the expected children exist. A panic inside the Go runtime is unrecoverable for the goroutine's caller unless the host explicitly wraps the call in recover(), so a single malformed rule in an otherwise valid workbook is sufficient to abort the parsing process. The patch in PR #2375 adds the missing length and nil checks and introduces regression tests covering exactly these four malformed rule shapes.
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:R/S:U/C:N/I:N/A:H
A remotely supplied file reaches the parser (AV:N) with no auth (PR:N) but requires the app to process it and call GetConditionalFormats (UI:R); only a panic results, 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.7.0 to 2.11.0, conditional-format extraction indexes required child slices or dereferences an optional colorScale child without validating malformed rule structure. GetConditionalFormats reaches extractCondFmtCellIs and also indexes ColorScale.Cfvo, DataBar.Cfvo, and DataBar.Color without complete structural checks. When a crafted worksheet supplies a cellIs, dataBar, or colorScale rule missing expected children and the application calls GetConditionalFormats, missing formula, color, value-object, or colorScale data reaches an out-of-range index or nil dereference, allowing an attacker to panic and terminate an unprotected process. No fixed version is available as of this review.
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
Uncontrolled memory and CPU consumption in Excelize (qax-os/excelize), the widely used Go library for reading and writin
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-
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
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
EUVD-2026-94552
GHSA-rxcj-4pj5-74gr
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB