Skip to main content

Excelize EUVDEUVD-2026-94556

| CVE-2026-107225 MEDIUM
Improper Input Validation (CWE-20)
2026-10-07 GitHub_M GHSA-5h23-36rv-pm65
6.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 negative fillId/borderId/fontId
  2. Delivery
    Deliver file to vulnerable app
  3. Exploit
    Application calls GetStyle on cell
  4. Execution
    Negative value used as slice index
  5. Impact
    Runtime panic crashes application (DoS)

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V2 - Validation and Business Logic Input validation, allowlisting
Exploitation Conditions

The application must use Excelize version 2.8.0 through 2.11.0 and must call File.GetStyle on a cell whose style references a crafted styles.xml containing a negative fillId, borderId, or fontId; the negative value then passes the upper-bound-only extractStyleCondFuncs predicate and becomes a negative slice index. LIMITING FACTORS: the app must ingest and parse an attacker-controlled .xlsx and actively read cell styling (UI:R), so purely display-only or non-style-reading workflows are not affected; impact is limited to a panic/denial of service with no code execution, no confidentiality, and no integrity impact. No authentication is required (PR:N), but no fixed release exists yet, so mitigation requires recovering from panics or applying the PR #2367 patch manually.

Impact

This is a moderate, availability-only issue rather than a top-tier priority. The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H, base 6.5) indicates a network-reachable, low-complexity, unauthenticated flaw whose entire impact is denial of service (a Go runtime panic) - there is no confidentiality or integrity impact. Exploitation requires user/application interaction (UI:R): a vulnerable app must actually parse an attacker-supplied spreadsheet and call File.GetStyle. No EPSS score, no CISA KEV listing, and no SSVC decision data were provided, and no standalone public exploit is identified - only the vendor's own PR #2367 includes a regression test that demonstrates the crash. The signals are consistent (library bug, DoS only, well understood root cause) with no conflicts, but note the 'Information Disclosure' tag contradicts the CVSS vector, which shows C:N/I:N - this is a crash, not a disclosure. Net: a real bug worth patching in any service that ingests untrusted XLSX files, but it is a crash/DoS, not an RCE or data-exposure emergency.

Exploit ScenarioDerived

An attacker crafts a malicious .xlsx whose styles.xml specifies a negative fillId, borderId, or fontId, then submits or sends it to a service or user running a vulnerable Excelize version (2.8.0-2.11.0). When the application reads the cell styling via GetStyle, the negative identifier passes the upper-bound-only check and is used as a negative slice index, triggering a Go panic that crashes the handling goroutine or process. A proof-of-concept-style regression test demonstrating the panic is included in PR #2367, though no weaponized standalone exploit has been reported.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 07, 2026

A negative index panic in the Go Excelize library (versions 2.8.0 through 2.11.0) allows unauthenticated remote attackers to cause a denial of service when an application reads cell styling from a crafted .xlsx file. The flaw arises because GetStyle's extraction predicates for fill, border, and font IDs only validate upper bounds, permitting negative fillId, borderId, or fontId values from attacker-controlled styles.xml to reach slice indexing and trigger a panic. No fixed version is available, though an upstream patch (PR #2367) exists; no public exploit has been identified, and exploitation requires the application to parse an untrusted file and call File.GetStyle (UI:R).

RemediationAI

No vendor-released patch is available at time of analysis. The upstream fix is available as a pull request (#2367) and commit (ae2113b410e51f6a141c396a59eda8c42b91bc22), which adds lower-bound checks (0 <= FillID/BorderID/FontID) before slice indexing; organizations can manually apply this patch or cherry-pick the commit. As a temporary compensating control, applications can wrap GetStyle calls in panic recovery to prevent crashes from malformed styles.xml, though this does not eliminate the underlying flaw and may mask other issues. Additionally, treat all uploaded .xlsx files as untrusted and avoid calling GetStyle on attacker-supplied content when possible; if style reading is necessary, pre-validate the styles.xml for negative fillId, borderId, or fontId values before processing. Note that these mitigations have trade-offs: panic recovery may still cause availability issues if panics are frequent, and input validation may be bypassed if not comprehensive. Monitor the advisory for a fixed release.

Affected VersionsENISA

excelize 2.8.0, ≤ 2.11.0

Affected Packages

go github.com/xuri/excelize/v2 fix: 2.11.1-0.20260731010303-ae2113b410e5
euvd excelize_2_8_0 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 Go library for reading and writing Microsoft Excel spreadsheets. The vulnerability is in the GetStyle function and the extractStyleCondFuncs predicates used to extract style information. CWE-20 (Improper Input Validation) is the root cause: the predicates check only upper bounds (e.g., *xf.FillID < len(s.Fills.Fill)) without verifying that the index is non-negative. When a crafted styles.xml contains a negative fillId, borderId, or fontId, the value passes the upper-bound-only check and is used as a negative slice index, causing a Go runtime panic (index out of range). The CVSS vector AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H indicates a network attack vector, low complexity, no privileges required, but user interaction is needed because the victim must open or process a malicious .xlsx file and the application must actively read cell styling. Impact is limited to availability (panic/denial of service) with no confidentiality or integrity impact. The CPE qax-os:excelize confirms the affected product, and the vulnerability is specific to versions 2.8.0 through 2.11.0 as stated 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 6.5 MEDIUM
AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H
vuln.today AI 6.5 MEDIUM

A crafted file is delivered remotely (AV:N) and reliably triggers the negative-index panic (AC:L) without auth (PR:N) but requires the app to parse and read the file (UI:R); impact is DoS only, so C:N/I:N/A:H.

3.1 AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H
4.0 AV:N/AC:L/AT:N/PR:N/UI:A/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
Required
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.0 to 2.11.0, GetStyle's fill, border, and font extraction predicates check only upper bounds for attacker-controlled style-table indices. File.GetStyle relies on extractStyleCondFuncs predicates that allow negative FillID, BorderID, and FontID values to reach slice indexing. When a crafted styles.xml supplies a negative fillId, borderId, or fontId and the application reads the style, a negative identifier passes the upper-bound-only predicate and becomes a negative slice index, allowing an attacker to panic while reading cell styling. No fixed version is available as of this review.

Threat Intelligence Overview

EPSS Score
0.2%
Top 85% exploitable
Prevalence
Medium
very popular open-source Go Excel library, embedded in many applications
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.2%
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
Poc
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

32
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +32
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