Skip to main content

Excelize CVE-2026-107216

| EUVDEUVD-2026-94534 HIGH
Uncontrolled Recursion (CWE-674)
2026-10-07 GitHub_M GHSA-wp2g-vpjj-g53r
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 XLSX with mutual ANCHORARRAY formulas
  2. Exploit
    Submit file to formula-evaluating service
  3. Execution
    Trigger infinite recursive CalcCellValue cycle
  4. Impact
    Exhaust Go stack and crash process

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Recursion depth limits
Exploitation Conditions

Exploitation requires the host application to evaluate spreadsheet formulas from attacker-controlled input using Excelize's CalcCellValue or other formula-evaluating APIs, AND the input must contain mutually referencing dynamic-array formulas using the ANCHORARRAY function (e.g., cell A1 referencing B1 and B1 referencing A1 via _xlfn.ANCHORARRAY). Affected versions are 2.8.1 through 2.11.0. Limiting factors: applications that only read raw cell values without invoking formula calculation are not exposed; the vulnerability yields only a process crash (no code execution or data disclosure); and the crash requires the specific ANCHORARRAY recursion pattern rather than any arbitrary formula. No special authentication or user interaction is required at the library level, but reachability depends entirely on whether the application exposes the formula-evaluation code path to untrusted files.

Impact

This is a denial-of-service vulnerability (CWE-674, uncontrolled recursion) with a confirmed availability-only impact. The provided CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H = 7.5) indicates a network-reachable, low-complexity, unauthenticated condition causing high availability loss with no confidentiality or integrity impact - consistent with a fatal Go stack overflow that aborts the process. No EPSS score, KEV listing, or POC was provided in the input; per precision rules this is classified as 'no public exploit identified at time of analysis.' The real-world risk is moderate and contingent on deployment context: the 'network' vector only applies if an application exposes Excelize's formula-evaluation path (CalcCellValue or other formula-evaluating APIs) to attacker-supplied spreadsheets; applications that merely read cell values without evaluating formulas are not exposed. A key data conflict must be flagged: the description states 'No fixed version is available as of this review,' yet the input includes an upstream fix commit (ea12859e) replacing the recursive CalcCellValue call with cellResolver - so a patch exists in source even if no tagged release was cut at review time; verify the fixed release with the vendor advisory GHSA-wp2g-vpjj-g53r. Overall this is a legitimate but non-critical DoS, not a high-CVSS-but-illusory issue; it warrants patching for services processing untrusted spreadsheets but carries no code-execution or data-exposure risk.

Exploit ScenarioDerived

An attacker uploads a crafted XLSX file containing two dynamic-array formulas that mutually reference each other via ANCHORARRAY (e.g., A1=ANCHORARRAY($B$1), B1=ANCHORARRAY($A$1)) to a service that evaluates spreadsheet formulas using Excelize's CalcCellValue API. Because each ANCHORARRAY hop calls CalcCellValue and spawns a fresh calculation context, the cycle-detection budget resets every recursion and never terminates, exhausting the Go goroutine stack and crashing the process. No public exploit code was provided, but the upstream fix commit includes a reproducing test case (TestCalcANCHORARRAY/with_circular_references) that demonstrates the trigger.

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

Uncontrolled recursion in the Excelize Go library (versions 2.8.1 through 2.11.0) allows a fatal Go stack overflow that aborts the host process when mutually referencing dynamic-array formulas using _xlfn.ANCHORARRAY are evaluated, resulting in a pure availability impact (CVSS:3.1 7.5, AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H). Reachability depends entirely on the host application: it is exploitable only when an application feeds attacker-controlled spreadsheet content into CalcCellValue or another formula-evaluating API, while applications that merely read raw cell values are unaffected. No public exploit code has been identified at time of analysis, and although an upstream fix commit exists, no released patched version has been confirmed (the advisory states no fixed version is available as of its review).

RemediationAI

No vendor-released patched version is confirmed - the GHSA advisory (https://github.com/qax-os/excelize/security/advisories/GHSA-wp2g-vpjj-g53r) states no fixed version is available as of its review, so the primary actionable fix is to apply the upstream commit ea12859e43c64d498ecf839263c5f917391f3316 (https://github.com/qax-os/excelize/commit/ea12859e43c64d498ecf839263c5f917391f3316), which routes ANCHORARRAY through cellResolver(fn.ctx, ...) so the shared calcContext, cycle state, and iteration budget are preserved, or to vendor-patch calc.go equivalently and rebuild; track the repository for an eventual tagged release and upgrade to it once published. Until a patched build is deployed, compensating controls should target the exposed formula-evaluation path: avoid calling CalcCellValue and other formula-evaluating APIs on untrusted or externally supplied workbooks (trade-off: legitimate formula results will not be computed, and only RawCellValue reads will be available), or pre-screen uploaded XLSX files and reject or quarantine any workbook containing _xlfn.ANCHORARRAY formulas that participate in circular references such as A1→B1 and B1→A1 (trade-off: screening must be kept in sync with Excel formula syntax to avoid bypasses and false rejections of benign dynamic-array files); otherwise isolate the calculation step in a short-lived worker process with a strict memory/stack ceiling and restart-on-crash supervision (trade-off: attacker-supplied crash still terminates the worker and can be used for repeated resource churn, so it reduces rather than eliminates the availability impact). Note that wrapping the call in a Go recover() does not mitigate this issue, since a fatal stack overflow is not recoverable at the library level.

Affected VersionsENISA

excelize 2.8.1, ≤ 2.11.0

Affected Packages

go github.com/xuri/excelize/v2 fix: 2.11.1-0.20260911060113-ea12859e43c6
euvd excelize_2_8_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

Excelize is a pure-Go library for reading and writing Microsoft Excel (XLSX) spreadsheets, and the flaw sits in its formula calculation engine (calc.go). ANCHORARRAY is the dynamic-array spill operator (_xlfn.ANCHORARRAY) that returns the array anchored at a referenced cell; to resolve that reference the implementation historically called the exported, top-level CalcCellValue function. That call constructs a brand-new calcContext and evaluator state, so each recursive hop through a circular reference discards the in-flight evaluation state, cycle-detection bookkeeping, and iteration budget instead of resolving through the internal cellResolver using the existing context. The result is an unbounded recursion chain (CWE-674, uncontrolled recursion) that exhausts the goroutine stack and triggers a fatal Go runtime stack-overflow abort that cannot be recovered by the caller - the tags label this a buffer overflow, but the root cause is stack exhaustion rather than memory corruption. The upstream commit ea12859e43c64d498ecf839263c5f917391f3316 replaces the CalcCellValue call in ANCHORARRAY with cellResolver(fn.ctx, ...) and normalizes empty results to an empty string, which preserves the shared context and lets cycle handling and completion-based caches terminate the evaluation. The affected component is tracked as cpe:2.3:a:qax-os:excelize with an unbounded version range, matching the 2.8.1-2.11.0 range described in the advisory.

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 7.5 HIGH

Untrusted spreadsheet processed over a network service with low-complexity trigger and no auth, causing process crash; availability-only impact, no confidentiality or integrity loss.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/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.8.1 to 2.11.0, ANCHORARRAY recursively calls the exported CalcCellValue function, creating a fresh calculation context at each cycle and bypassing in-flight and iteration controls. ANCHORARRAY calls CalcCellValue instead of cellResolver, so each recursive hop receives a new calcContext and loses cycle state. When mutually referencing dynamic-array formulas are evaluated directly or through formula-evaluating APIs, each recursion hop resets the cycle budget and prevents completion-based caches from breaking the cycle, allowing an attacker to cause a fatal Go stack overflow and abort the process. No fixed version is available as of this review.

Technical POC Analysis

CWE-674 (Uncontrolled Recursion).

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

A high-severity defect in the Excelize Go library affects applications that parse and evaluate spreadsheet formulas, letting attacker-supplied workbook content abort the hosting process. Only services that actively evaluate formulas on untrusted files are exposed; systems that merely read stored cell values are unaffected. Because no released fix is available and the flaw is remotely reachable without credentials, any internet-facing service that opens customer-supplied spreadsheets should be treated as an availability risk until the affected code path is contained or isolated.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations: avoid calling CalcCellValue or other formula-evaluation APIs on untrusted or attacker-supplied workbooks (parse raw cell values only where business logic permits); strip or block dynamic-array formulas referencing _xlfn.ANCHORARRAY before processing; isolate formula evaluation in sandboxed, resource-capped workers or separate processes that can restart automatically after an abort; enforce upload size limits and throttling; and monitor for unexpected process terminations to detect repeated crash attempts.

Threat Intelligence Overview

EPSS Score
0.3%
Top 78% exploitable
Prevalence
Medium
popular open-source Go Excel library, common but not universally deployed
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
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-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