{"id":"CVE-2026-107215","kind":"vulnerability","aliases":["CVE-2026-107215","GHSA-x2q3-8cjh-766f","GO-2026-6689"],"related":[],"title":"Panic and memory exhaustion via unbounded CFB stream allocation in github.com/xuri/excelize","description":"Excelize is a Go language library for reading and writing Microsoft Excel spreadsheets. From 2.3.1 to 2.11.0, extractPart allocates a byte slice directly from an attacker-controlled CFB directory-entry size before validating the sector chain or size domain. extractPart trusts the CFB directory entry streamSize for EncryptionInfo and EncryptedPackage allocations before validating the stream. When a crafted OLE compound file declares a negative or extremely large EncryptionInfo or EncryptedPackage stream size, the declared size reaches make with a negative length or forces a multi-gigabyte allocation, allowing an attacker to panic or exhaust process memory. No fixed version is available as of this review.","summary":"Excelize, a Go library for reading and writing Excel files, allocates memory based on a size field in a crafted OLE compound file without validating it first. An attacker who supplies such a file can crash the process with a panic or exhaust its memory.","severity":"high","cvss":7.5,"epss":0.00228,"exploited":false,"exploited_at":null,"products":[{"name":"github.com/360EntSecGroup-Skylar/excelize/v2","fixed":[],"affected":">= 2.3.1","ecosystem":"go"},{"name":"github.com/xuri/excelize/v2","fixed":["2.11.1-0.20260912113515-5f636f9dcde5"],"affected":"< 2.11.1-0.20260912113515-5f636f9dcde5","ecosystem":"go"}],"ecosystems":["go"],"tags":["backend","excelize","file-upload","go","package"],"not_affected_if":["no-untrusted-xlsx-input","version-outside-2.3.1-to-2.11.0"],"how_to_check":"Run `go list -m github.com/xuri/excelize/v2` in each service and check the version against the affected range.\nSearch go.sum for `excelize` to find transitive copies, including the older github.com/360EntSecGroup-Skylar/excelize/v2 path.\nIf services parse user-uploaded .xlsx files, flag them as exposed.","fix":"Move github.com/xuri/excelize/v2 to 2.11.1-0.20260912113515-5f636f9dcde5 or later, per the product data.\nThe description says no fixed version is available, which conflicts with that data; confirm before relying on the upgrade. Until then, reject or sandbox untrusted spreadsheet input.","status":"open","published_at":"2026-10-07T18:17:19+00:00","first_seen_at":"2026-10-23T19:13:08+00:00","triaged_at":"2026-10-23T19:56:13+00:00","updated_at":"2026-10-23T19:56:13+00:00","category":"package","confidence":0.6,"triage":{"at":"2026-10-23T19:56:13Z","model":"claude-haiku-5-5","output":{"fix":"Move github.com/xuri/excelize/v2 to 2.11.1-0.20260912113515-5f636f9dcde5 or later, per the product data.\nThe description says no fixed version is available, which conflicts with that data; confirm before relying on the upgrade. Until then, reject or sandbox untrusted spreadsheet input.","summary":"Excelize, a Go library for reading and writing Excel files, allocates memory based on a size field in a crafted OLE compound file without validating it first. An attacker who supplies such a file can crash the process with a panic or exhaust its memory.","category":"package","who_cares":["go","excelize","file-upload","backend"],"confidence":0.6,"analyst_note":"Sources conflict: govuln lists a fixed pseudo-version (2.11.1-0.20260912113515-5f636f9dcde5) but the description says no fixed version exists. Check https://pkg.go.dev/vuln/GO-2026-6689 and the upstream excelize repo for a release tag, and whether the older 360EntSecGroup-Skylar path has a fix.","how_to_check":"Run `go list -m github.com/xuri/excelize/v2` in each service and check the version against the affected range.\nSearch go.sum for `excelize` to find transitive copies, including the older github.com/360EntSecGroup-Skylar/excelize/v2 path.\nIf services parse user-uploaded .xlsx files, flag them as exposed.","needs_analyst":true,"not_affected_if":["no-untrusted-xlsx-input","version-outside-2.3.1-to-2.11.0"],"severity_if_unknown":"high"},"cost_usd":0.000869,"input_tokens":2367,"output_tokens":1264,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-107215':16A,27A '-2026':15A,23A,26A '-6689':24A '/360entsecgroup-skylar/excelize/v2':30A '/xuri/excelize':13A '/xuri/excelize/v2':33A '2.11.0':102C '2.3.1':100C '766f':21A '8cjh':20A 'alloc':9A,51B,104C,138C,175C 'allow':176C 'attack':69B,112C,178C 'attacker-control':111C 'avail':189C 'backend':34B 'base':53B 'byte':106C 'cfb':7A,114C,130C 'chain':123C 'compound':62B,147C 'control':113C 'craft':60B,145C 'crash':76B 'cve':14A,25A 'declar':149C,161C 'direct':108C 'directori':116C,131C 'directory-entri':115C 'domain':126C 'encryptedpackag':137C,157C 'encryptioninfo':135C,155C 'entri':117C,132C 'excel':35B,41B,49B,86C,97C 'exhaust':4A,83B,182C 'extractpart':103C,127C 'extrem':153C 'field':57B 'file':37B,50B,63B,74B,148C 'file-upload':36B 'first':67B 'fix':186C 'forc':170C 'ghsa':18A 'ghsa-x2q3-8cjh-766f':17A 'gigabyt':174C 'github.com':12A,29A,32A 'github.com/360entsecgroup-skylar/excelize/v2':28A 'github.com/xuri/excelize':11A 'github.com/xuri/excelize/v2':31A 'go':22A,39B,43B,89C 'languag':90C 'larg':154C 'length':168C 'librari':44B,91C 'make':164C 'memori':3A,52B,85B,184C 'microsoft':96C 'multi':173C 'multi-gigabyt':172C 'negat':151C,167C 'ole':61B,146C 'packag':40B 'panic':1A,81B,180C 'process':78B,183C 'reach':163C 'read':46B,93C 'review':193C 'sector':122C 'size':56B,118C,125C,159C,162C 'slice':107C 'spreadsheet':98C 'stream':8A,142C,158C 'streamsiz':133C 'suppli':71B 'trust':128C 'unbound':6A 'upload':38B 'valid':65B,120C,140C 'version':187C 'via':5A 'without':64B 'write':48B,95C 'x2q3':19A","nicknames":[],"mitigations":[],"who_affected":null,"tier":null,"verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-07T18:17:19+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"govuln","external_id":"GO-2026-6689","url":"https://pkg.go.dev/vuln/GO-2026-6689","severity":null,"published_at":"2026-10-19T21:08:21+00:00","modified_at":"2026-10-19T21:08:21+00:00","first_seen_at":"2026-10-23T19:13:08+00:00","fetched_at":"2026-10-23T19:13:08+00:00","note":null},{"source":"epss","external_id":"CVE-2026-107215","url":"https://api.first.org/data/v1/epss?cve=CVE-2026-107215","severity":null,"published_at":null,"modified_at":null,"first_seen_at":"2026-10-23T19:13:43+00:00","fetched_at":"2026-10-23T19:13:43+00:00","note":null},{"source":"nvd","external_id":"CVE-2026-107215","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-107215","severity":null,"published_at":"2026-10-07T18:17:19+00:00","modified_at":"2026-10-13T14:23:50+00:00","first_seen_at":"2026-10-23T19:35:23+00:00","fetched_at":"2026-10-23T19:35:23+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}