Description
Excelize is a Go language library for reading and writing Microsoft Excel spreadsheets. Prior to 2.11.0, the checkSheet() function in github.com/xuri/excelize/v2 uses an attacker-controlled <row r="N"> XML attribute value directly as the length argument to make([]xlsxRow, row) without validating it against the Excel row limit (TotalRows = 1,048,576). A specially crafted XLSX file can trigger two denial-of-service variants: (A) an out-of-memory process kill when r=2147483647 forces a ~16 GB allocation attempt, and (B) a runtime panic via out-of-bounds slice indexing when r=-1. Any service that opens attacker-supplied XLSX files and calls GetCellValue is affected. No authentication is required. This issue is fixed in version 2.11.0.
Published: 2026-07-10
Score: 7.5 High
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

The Excelize library’s checkSheet() function parses <row r=\"N\"> attributes from an XLSX file and uses them directly as the length parameter for a slice allocation without validating the value against Excel’s maximum row limit of 1,048,576. Because no upper bound is enforced, an attacker can supply a value such as 2,147,483,647, causing the library to attempt a ~16 GB allocation and trigger an out‑of‑memory kill, or a value of –1, which results in a runtime panic from out‑of‑bounds indexing. The flaw is a classic instance of CWE‑770 and requires no authentication to exploit, allowing an adversary simply to deliver a crafted spreadsheet file. The issue was fixed in version 2.11.0.

Affected Systems

Any Go application that embeds the qax-os:excelize library and processes user‑supplied XLSX files through functions such as GetCellValue is vulnerable if it is using a version earlier than 2.11.0. This includes services, reporting tools, and any software that parses spreadsheets without performing its own validation.

Risk and Exploitability

The CVSS score of 7.5 marks the vulnerability as high severity. However, the EPSS score of less than 1 % and the absence from the CISA KEV catalog suggest a low likelihood of widespread exploitation. The attack vector is a simple supply‑chain can be sent to any exposed endpoint that uses the library, with no credentials required, potentially exhausting memory or causing a crash and disrupting availability.

Generated by OpenCVE AI on July 29, 2026 at 10:40 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade the Excelize library to version 2.11.0 or later, which validates row indices against the Excel maximum of 1,048,576 before allocation.
  • If an immediate processing of spreadsheet files with constrained memory limits and reject files that appear to request excessive row indices.
  • As a preventive measure, enforce a maximum row count check for the <row r=\"N\"> attribute in any code paths that invoke Excelize’s parsing functions.

Generated by OpenCVE AI on July 29, 2026 at 10:40 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-h69g-9hx6-f3v4 Excelize: Unbounded Row Index Allocation in Worksheet Parser (checkSheet OOM/Panic DoS)
History

Mon, 13 Jul 2026 15:15:00 +0000

Type Values Removed Values Added
First Time appeared Qax-os
Qax-os excelize
Vendors & Products Qax-os
Qax-os excelize

Fri, 10 Jul 2026 19:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'yes', 'Exploitation': 'poc', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Fri, 10 Jul 2026 16:30:00 +0000

Type Values Removed Values Added
Description Excelize is a Go language library for reading and writing Microsoft Excel spreadsheets. Prior to 2.11.0, the checkSheet() function in github.com/xuri/excelize/v2 uses an attacker-controlled <row r="N"> XML attribute value directly as the length argument to make([]xlsxRow, row) without validating it against the Excel row limit (TotalRows = 1,048,576). A specially crafted XLSX file can trigger two denial-of-service variants: (A) an out-of-memory process kill when r=2147483647 forces a ~16 GB allocation attempt, and (B) a runtime panic via out-of-bounds slice indexing when r=-1. Any service that opens attacker-supplied XLSX files and calls GetCellValue is affected. No authentication is required. This issue is fixed in version 2.11.0.
Title Excelize: Unbounded Row Index Allocation in Worksheet Parser (checkSheet OOM/Panic DoS)
Weaknesses CWE-770
References
Metrics cvssV3_1

{'score': 7.5, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H'}


cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-07-10T18:39:48.791Z

Reserved: 2026-06-11T18:24:35.097Z

Link: CVE-2026-54063

cve-icon Vulnrichment

Updated: 2026-07-10T18:39:36.956Z

cve-icon NVD

No data.

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-07-29T10:45:03Z

Weaknesses
  • CWE-770

    Allocation of Resources Without Limits or Throttling