Skip to main content

Excelize CVE-2026-107218

| EUVDEUVD-2026-94548 MEDIUM
Improper Validation of Array Index (CWE-129)
2026-10-07 GitHub_M GHSA-8jjq-8j9w-m2v6
5.3
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Upload crafted XLSX with RIGHT formula
  2. Exploit
    Application invokes CalcCellValue on untrusted cell
  3. Execution
    Negative rune-slice index from UTF-16/code-point mismatch
  4. Impact
    Panic 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.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

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

excelize 2.10.1, ≤ 2.11.0

Affected Packages

go github.com/xuri/excelize/v2 fix: 2.11.1-0.20260908032718-ecd99d761fe0
euvd excelize_2_10_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 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

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

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.

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
Low

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

EPSS Score
0.3%
Top 80% exploitable
Prevalence
Medium
widely-used open-source Go Excel library, moderate production footprint
Threat Intel
1
1 source
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 MEDIUM
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.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· derived
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
Yes
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

26
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +26
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0
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-107219 HIGH
7.5 Oct 07

Denial of service in the Excelize Go library (versions 2.3.1 through 2.11.0) allows unauthenticated remote attackers to

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

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