Skip to main content

Excelize EUVDEUVD-2026-94550

| CVE-2026-107220 MEDIUM
Out-of-bounds Read (CWE-125)
2026-10-07 GitHub_M GHSA-g27h-8qhm-6pff
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 empty mergeCell ref
  2. Delivery
    Deliver file to target application
  3. Exploit
    GetCellValue invokes mergeCellsParser
  4. Execution
    cellInRange indexes empty slice
  5. Impact
    Application panics (denial of service)

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Bounds checking, read limits
MITRE ATT&CK

1 technique across 1 tactic: Collection

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires an application built with Excelize 2.7.1 through 2.11.0 to parse an attacker-controlled worksheet whose XML contains a mergeCell element with an empty 'ref' attribute, AND to then invoke a non-streaming cell-reading API (such as GetCellValue) that reaches mergeCellsParser. Limiting factors: the workbook must be processed by the victim application (UI:R - no fully autonomous remote trigger), and streaming cell APIs that do not route through mergeCellsParser/cellInRange are not affected. There is no authentication requirement in the library itself (PR:N), but real-world exposure depends on whether the embedding application accepts untrusted spreadsheet input.

Impact

This is a moderate-severity denial-of-service issue, not a high-priority emergency. The provided CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H, score 6.5) correctly reflects an availability-only impact (a Go panic / crash) with no confidentiality or integrity loss, gated by required user interaction (UI:R) - a victim application must read an attacker-supplied worksheet. Despite AV:N, exploitation is not purely remote-automatic: the attacker must get a crafted .xlsx file processed by an application that embeds the vulnerable Excelize versions (2.7.1-2.11.0) and calls a non-streaming cell API. No EPSS score, SSVC decision, or CISA KEV status was provided in the input, and there is no public exploit identified at time of analysis - only a vendor fix (PR #2379 / commit 99903a3) and a regression test, which is a patch artifact rather than weaponized exploit code. Note a conflict to verify: the 'Information Disclosure' tag contradicts the CVSS vector (C:N), and the 'Buffer Overflow' tag is imprecise - CWE-125 out-of-bounds read here produces a crash, not memory disclosure or code execution. Overall this warrants routine patching prioritization for teams whose Go services parse untrusted spreadsheets, not crisis response.

Exploit ScenarioDerived

An attacker crafts a malicious Excel workbook containing a mergeCell element with an empty 'ref' attribute and gets it uploaded to or opened by a backend service that uses Excelize to read cell values (e.g., an invoice/report ingestion pipeline). When the service calls a non-streaming API such as GetCellValue, mergeCellsParser hands an empty rectangle slice to cellInRange, which indexes four out-of-bounds positions and panics, crashing the processing routine. No public exploit code is identified at time of analysis, though the trigger is trivial to construct from the public patch and test case.

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

An out-of-bounds slice access in the Excelize Go library (versions 2.7.1 through 2.11.0) lets a crafted .xlsx workbook crash the host application, causing denial of service. When mergeCellsParser encounters a mergeCell element with an empty 'ref' attribute it returns an empty rectangle and passes it to cellInRange, which indexes four positions without a length check; any non-streaming cell API such as GetCellValue then panics on the first affected cell operation. The bug is remotely triggerable but requires the victim application to process an attacker-supplied spreadsheet and invoke an affected cell-reading API (CVSS 3.1: AV:N/AC:L/PR:N/UI:R, A:H only), and no public exploit or confirmed active exploitation is known at time of analysis.

RemediationAI

No vendor-released patch version is available at time of analysis; upstream fix code exists in PR #2379 / commit 99903a3240e58a47ff28fb8e05a03bd9d496ec24, so consumers should either upgrade as soon as a tagged release incorporating that commit is published (tracking the advisory at https://github.com/qax-os/excelize/security/advisories/GHSA-g27h-8qhm-6pff) or temporarily vendor the commit/build a fork with the added zero-length rectangle check. Compensating controls if patching is not yet possible: pre-validate and sanitize uploaded workbooks, specifically rejecting or stripping mergeCell elements with empty or malformed 'ref' attributes before parsing; switch affected workloads to Excelize's streaming row reader, which does not route through mergeCellsParser/cellInRange, at the cost of a reduced feature set (no random-access cell queries or full worksheet mutation); and wrap parsing in a recover() boundary plus worker isolation with strict upload size and rate limits so a panic degrades a single request rather than the whole process. Note that panic recovery masks other latent parsing defects and is a stopgap, not a fix.

Affected VersionsENISA

excelize 2.7.1, ≤ 2.11.0

Affected Packages

go github.com/xuri/excelize/v2 fix: 2.11.1-0.20260820023833-99903a3240e5
euvd excelize_2_7_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 widely embedded pure-Go library for reading and writing Office Open XML (xlsx) spreadsheets, identified by CPE cpe:2.3:a:qax-os:excelize:*:*:*:*:*:*:*:*. The defect is classified as CWE-125 (Out-of-bounds Read) and arises in the worksheet merge-range parser: mergeCellsParser builds a rectangle from the 'ref' attribute of a mergeCell element, and when that attribute is empty the cached rectangle stays an empty slice. The code then forwards the empty slice to cellInRange, which indexes positions [0] through [3] of the rectangle without verifying its length. In Go, indexing past the bounds of an empty slice raises a runtime panic rather than returning memory, so the practical effect is a hard crash (availability loss) of the process handling the workbook. The affected path is reached only by non-streaming cell APIs that call mergeCellsParser/cellInRange; streaming readers bypass this code path. The referenced upstream patch (PR #2379, commit 99903a3240e58a47ff28fb8e05a03bd9d496ec24) adds a guard that skips merge cells whose rectangle length is zero, with a regression test covering an empty mergeCell Ref.

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 can be delivered remotely (AV:N) and trivially triggers a panic (AC:L), but a victim application must read the file (UI:R); impact is crash-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:P/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.7.1 to 2.11.0, mergeCellsParser leaves the cached rectangle empty for an empty mergeCell ref and then passes that empty slice to cellInRange without a length check. GetCellValue reaches mergeCellsParser, which passes an empty rectangle derived from the mergeCell ref attribute into cellInRange. When a crafted worksheet contains an empty mergeCell ref and a non-streaming cell API reads the worksheet, cellInRange indexes four positions in an empty slice, allowing an attacker to panic on the first affected cell operation. No fixed version is available as of this review.

Threat Intelligence Overview

EPSS Score
0.2%
Top 86% exploitable
Prevalence
Medium
very popular Go Excel library, but scoped to Go backend 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

Attack Technique

A buffer overflow occurs when a program writes more data to a memory buffer than it was allocated to hold, causing the excess data to spill into adjacent memory regions.

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