Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessUpload crafted XLSX with RIGHT formula
-
ExploitApplication invokes CalcCellValue on untrusted cell
-
ExecutionNegative rune-slice index from UTF-16/code-point mismatch
-
ImpactPanic crashes formula evaluation
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 the host application to call Excelize's formula engine (CalcCellValue) on attacker-controlled spreadsheet content, and the affected version must be between 2.10.1 and 2.11.0. The precise trigger is a RIGHT() formula evaluated over supplementary-plane (non-BMP, e.g. U+1D7D9) text with a requested character count that falls strictly between the rune (code-point) count and the UTF-16 code-unit count, producing a negative rune-slice index. Limiting factors: applications that never evaluate formulas on untrusted input are not exposed; a Go deferred recover() around formula evaluation mitigates the crash; and the bug only manifests with specific supplementary-plane strings, not ordinary BMP text. No fixed version exists yet, so mitigation currently depends on input filtering or panic recovery. |
| Impact | This is a denial-of-service (availability-only) bug, not a high-priority exploitation target. The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L, base 5.3 MEDIUM) shows no confidentiality or integrity impact - only a partial availability hit (A:L) from a panic during formula evaluation, consistent with CWE-129 (improper validation of array index). No EPSS score, no CISA KEV listing, and no public POC were provided, so exploitation status is 'no public exploit identified at time of analysis.' The AV:N rating is conditional: it only holds when the consuming application exposes Excelize's formula engine (CalcCellValue) to attacker-supplied spreadsheet content - the library itself has no network listener, so network reach is inherited from the host application rather than intrinsic. The 'Information Disclosure' tag in the input conflicts directly with the CVSS vector (C:N), which indicates no data exposure - this appears mislabeled and should be treated as a DoS issue. Overall real-world risk is low-to-moderate: a crash is recoverable in Go via deferred recover(), and the trigger requires a fairly specific Unicode edge case, so this is a robustness/availability defect worth patching when a fix ships but not an emergency. |
| Exploit ScenarioDerived | An application uses Excelize (2.10.1-2.11.0) to evaluate formulas in user-uploaded spreadsheets. An attacker uploads an XLSX containing a RIGHT() formula applied to supplementary-plane (non-BMP) Unicode text with a character count chosen to fall between the rune count and the UTF-16 code-unit count; when the server calls CalcCellValue, a negative rune-slice index triggers a panic that crashes the evaluation goroutine or process. No public exploit code is identified at time of analysis. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 07, 2026
Formula evaluation in the Excelize Go library (versions 2.10.1 through 2.11.0) can be crashed by a spreadsheet whose cells contain a RIGHT() formula applied to supplementary-plane (non-BMP) text, because the function validates the requested length in UTF-16 code units but then slices a rune array using code-point counts, producing a negative slice index and a Go panic. This is a denial-of-service (availability-only) issue: per the assessed vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L, there is no confidentiality or integrity impact, and remote unauthenticated attackers can trigger it only if the host application calls Excelize's CalcCellValue on attacker-controlled workbook content. No public exploit code was identified at time of analysis, and although an upstream fix commit and pull request exist, no released patched version has been confirmed.
RemediationAI
No vendor-released patched version was identified at time of analysis - the advisory lists no fixed release, so 'upgrade to X' cannot be stated. An upstream fix is available as a pull request / commit (https://github.com/qax-os/excelize/pull/2390, commit ecd99d761fe0489f1ed308e2f7dc2e0502d1a396) and can be applied as a vendored patch or, more safely, consumers can pin to a build that carries the commit until a tagged release ships. Until then, the highest-value compensating control is to wrap formula evaluation in a Go deferred recover(): catch the panic around CalcCellValue so the negative-index panic degrades to a handled error instead of crashing the process; the trade-off is that recover() masks other latent panics during evaluation, so log and alert on every recovery rather than swallowing silently. Additionally, avoid calling CalcCellValue on formulas from untrusted workbooks - pre-screen or strip formula cells (or evaluate only against a parsed, non-formula data model) before processing user-supplied xlsx files; this removes exposure entirely but breaks legitimate formula-driven features such as server-side recalculation. If neither is feasible, isolate formula evaluation in a separate, restartable process or sandbox with CPU/memory limits and crash supervision so a panic cannot take down the primary service, accepting the added operational complexity. Monitor the advisory at https://github.com/qax-os/excelize/security/advisories/GHSA-8jjq-8j9w-m2v6 for the first patched release and re-evaluate dependency pins when it appears.
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 bug is an out-of-bounds/negative-index condition (CWE-129, Improper Validation of Array Index) rooted in inconsistent string-length accounting. Excelize's leftRight helper implements the Excel LEFT/RIGHT (and byte-oriented LEFTB/RIGHTB) text functions. For RIGHT it used utf8.RuneCountInString(text)-numChars as the start index into a []rune conversion, but validated the caller-supplied character count through countUTF16String, which counts UTF-16 code units. For BMP text these two counts agree, but for supplementary-plane characters such as U+1D7D9 each code point occupies one rune but two UTF-16 code units, so when the requested count sits strictly between the rune count and the UTF-16 code-unit count, the computed start index becomes negative and Go panics on the slice operation. The path is reached through CalcCellValue, the library's formula engine entry point, and the same file also handled LEFT/RIGHT/LEFTB/RIGHTB, so the fix reworks the whole helper. The upstream pull request 2390 (commit ecd99d761fe0489f1ed308e2f7dc2e0502d1a396) normalizes the input to []rune up front, clamps the requested count with math.Min(numArg.Number, float64(len(text))), and unifies the slicing logic for LEFT/LEFTB/RIGHT/RIGHTB, with new tests covering U+1D7D9 strings, fractional counts (2.9) and huge counts (1e20). The affected CPE is cpe:2.3:a:qax-os:excelize:*:*:*:*:*:*:*:*, scoped by the advisory to 2.10.1 through 2.11.0.
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:L
Panic is reachable via untrusted spreadsheet content the host app evaluates (AV:N/AC:L/PR:N/UI:N); only availability is affected (A:L, recoverable), with no confidentiality or integrity impact.
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.10.1 to 2.11.0, RIGHT validates the requested length with UTF-16 code-unit counts but slices a rune array using Unicode code-point counts. RIGHT reaches leftRight through CalcCellValue, where countUTF16String validates one unit but utf8.RuneCountInString supplies the slice index in another. When RIGHT evaluates supplementary-plane text with a requested character count between the rune count and UTF-16 code-unit count, the inconsistent units produce a negative rune-slice index, allowing an attacker to panic during formula evaluation. 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
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
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-94548
GHSA-8jjq-8j9w-m2v6
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB