Excelize: Nil-pointer dereference in GetSlicers when a worksheet has extLst present but no drawing element
### Summary GetSlicers guards only `if ws.ExtLst == nil { return }` (slicer.go:816-818) and then immediately dereferences `ws.Drawing.RID` with no nil check on ws.Drawing itself. `Drawing` and `ExtLst` are two independently optional child elements of in xl/worksheets/sheetN.xml, populated separately by encoding/xml depending on whether each tag is present. I executed a PoC: took a plain NewFile() workbook (no drawing, no slicer), saved it, then injected a bare `` immediately before `` in xl/worksheets/sheet1.xml (no other change, no drawing element present) and called GetSlicers. Result: `runtime error: invalid memory address or nil pointer dereference`, confirmed at the ws.Drawing.RID line via stack trace. ### Reachability / who can trigger this Unauthenticated: any application that opens an untrusted .xlsx and calls the public `File.GetSlicers(sheet)` API. The trigger is a single empty XML tag with no valid slicer or drawing content required at all, making it an even smaller/simpler payload than candidate 1. ### Proof of Concept / Reproduction **Method:** 1) Reused the existing clone at C:\Users\vatsa\AppData\Local\Temp\claude\D--\59901fa2-b549-40e1-a433-30c8a3d01718\scratchpad\CVE-Hunt-10k\repos\qax-os__excelize (origin=https://github.com/qax-os/excelize.git, branch master up to date, commit e81f05008b33232151a58f06474fad5f70c4d060 dated 2026-09-27, `git describe`=v2.11.0-42-ge81f050, i.e. 42 commits past the v2.11.0 tag). 2) Manually re-read the cited source myself (not t
- Products
- github.com/xuri/excelize/v2
- Affected versions
- Not specified
- Fixed versions
- 2.11.1-0.20260929015830-8ffeb07ec9a3
- CVEs
- CVE-2026-107213
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 31 Oct 2026, 08:44 UTC · Revision 1
Source evidence
Excelize: Nil-pointer dereference in GetSlicers when a worksheet has extLst present but no drawing element
core-osv · Original sourcePublished 8 Oct 2026, 16:50 UTC
### Summary GetSlicers guards only `if ws.ExtLst == nil { return }` (slicer.go:816-818) and then immediately dereferences `ws.Drawing.RID` with no nil check on ws.Drawing itself. `Drawing` and `ExtLst` are two independently optional child elements of in xl/worksheets/sheetN.xml, populated separately by encoding/xml depending on whether each tag is present. I executed a PoC: took a plain NewFile() workbook (no drawing, no slicer), saved it, then injected a bare `` immediately before `` in xl/worksheets/sheet1.xml (no other change, no drawing element present) and called GetSlicers. Result: `runtime error: invalid memory address or nil pointer dereference`, confirmed at the ws.Drawing.RID line via stack trace. ### Reachability / who can trigger this Unauthenticated: any application that opens an untrusted .xlsx and calls the public `File.GetSlicers(sheet)` API. The trigger is a single empty XML tag with no valid slicer or drawing content required at all, making it an even smaller/simpler payload than candidate 1. ### Proof of Concept / Reproduction **Method:** 1) Reused the existing clone at C:\Users\vatsa\AppData\Local\Temp\claude\D--\59901fa2-b549-40e1-a433-30c8a3d01718\scratchpad\CVE-Hunt-10k\repos\qax-os__excelize (origin=https://github.com/qax-os/excelize.git, branch master up to date, commit e81f05008b33232151a58f06474fad5f70c4d060 dated 2026-09-27, `git describe`=v2.11.0-42-ge81f050, i.e. 42 commits past the v2.11.0 tag). 2) Manually re-read the cited source myself (not t
osv:GHSA-r7x5-4969-99p7
github.com/xuri/excelize/v2
Fixed versions: 2.11.1-0.20260929015830-8ffeb07ec9a3
Complete source record
{
"id": "eada02cf0a10fedebc9c360247a49886d1da573e06d01f140c8da6faa766da65",
"url": "https://osv.dev/vulnerability/GHSA-r7x5-4969-99p7",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "Excelize: Nil-pointer dereference in GetSlicers when a worksheet has extLst present but no drawing element",
"summary": "### Summary GetSlicers guards only `if ws.ExtLst == nil { return }` (slicer.go:816-818) and then immediately dereferences `ws.Drawing.RID` with no nil check on ws.Drawing itself. `Drawing` and `ExtLst` are two independently optional child elements of in xl/worksheets/sheetN.xml, populated separately by encoding/xml depending on whether each tag is present. I executed a PoC: took a plain NewFile() workbook (no drawing, no slicer), saved it, then injected a bare `` immediately before `` in xl/worksheets/sheet1.xml (no other change, no drawing element present) and called GetSlicers. Result: `runtime error: invalid memory address or nil pointer dereference`, confirmed at the ws.Drawing.RID line via stack trace. ### Reachability / who can trigger this Unauthenticated: any application that opens an untrusted .xlsx and calls the public `File.GetSlicers(sheet)` API. The trigger is a single empty XML tag with no valid slicer or drawing content required at all, making it an even smaller/simpler payload than candidate 1. ### Proof of Concept / Reproduction **Method:** 1) Reused the existing clone at C:\\Users\\vatsa\\AppData\\Local\\Temp\\claude\\D--\\59901fa2-b549-40e1-a433-30c8a3d01718\\scratchpad\\CVE-Hunt-10k\\repos\\qax-os__excelize (origin=https://github.com/qax-os/excelize.git, branch master up to date, commit e81f05008b33232151a58f06474fad5f70c4d060 dated 2026-09-27, `git describe`=v2.11.0-42-ge81f050, i.e. 42 commits past the v2.11.0 tag). 2) Manually re-read the cited source myself (not t",
"evidence": "osv:GHSA-r7x5-4969-99p7",
"products": [
{
"name": {
"value": "github.com/xuri/excelize/v2",
"evidence": "/affected/0/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "2.11.1-0.20260929015830-8ffeb07ec9a3",
"evidence": "/affected/0/ranges"
}
],
"affected_versions": []
}
],
"severity": "high",
"structured": {
"id": "GHSA-r7x5-4969-99p7",
"aliases": [
"CVE-2026-107213",
"GHSA-r7x5-4969-99p7",
"GO-2026-6687"
],
"metrics": [
{
"type": "CVSS_V4",
"score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N"
}
],
"affected": [
{
"ranges": [
{
"type": "SEMVER",
"events": [
{
"introduced": "2.9.0"
},
{
"fixed": "2.11.1-0.20260929015830-8ffeb07ec9a3"
}
]
}
],
"package": {
"name": "github.com/xuri/excelize/v2",
"purl": "pkg:golang/github.com/xuri/excelize/v2",
"ecosystem": "Go"
},
"database_specific": {
"source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/10/GHSA-r7x5-4969-99p7/GHSA-r7x5-4969-99p7.json"
}
}
],
"modified": "2026-10-19T21:41:00.604164450Z",
"provider": "osv",
"references": [
"https://github.com/qax-os/excelize/security/advisories/GHSA-r7x5-4969-99p7",
"https://nvd.nist.gov/vuln/detail/CVE-2026-107213",
"https://github.com/qax-os/excelize/pull/2434",
"https://github.com/qax-os/excelize/commit/8ffeb07ec9a350410f6922313f6b7e4f5cc79241",
"https://github.com/qax-os/excelize"
],
"provider_metadata": {
"cwe_ids": [
"CWE-476"
],
"severity": "HIGH",
"github_reviewed": true,
"nvd_published_at": "2026-10-07T18:17:18Z",
"github_reviewed_at": "2026-10-08T16:50:08Z"
}
},
"related_cves": [
{
"value": "CVE-2026-107213",
"evidence": "/aliases"
}
],
"security_relevant": true,
"severity_evidence": "/database_specific/severity"
},
"source_id": "core-osv",
"document_id": 376767,
"published_at": "2026-10-08T16:50:08+00:00"
}Nil-pointer dereference in GetSlicers when a worksheet has extLst present but no drawing element in github.com/xuri/excelize
core-osv · Original sourcePublished 19 Oct 2026, 21:08 UTC
Nil-pointer dereference in GetSlicers when a worksheet has extLst present but no drawing element in github.com/xuri/excelize
osv:GO-2026-6687
github.com/xuri/excelize/v2
Fixed versions: 2.11.1-0.20260929015830-8ffeb07ec9a3
Complete source record
{
"id": "b9a7bbe131cffcfa0b79183ef4cf5f4becb2efd7bec65cd6db7658aae344785d",
"url": "https://osv.dev/vulnerability/GO-2026-6687",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "Nil-pointer dereference in GetSlicers when a worksheet has extLst present but no drawing element in github.com/xuri/excelize",
"summary": "Nil-pointer dereference in GetSlicers when a worksheet has extLst present but no drawing element in github.com/xuri/excelize",
"evidence": "osv:GO-2026-6687",
"products": [
{
"name": {
"value": "github.com/xuri/excelize/v2",
"evidence": "/affected/0/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "2.11.1-0.20260929015830-8ffeb07ec9a3",
"evidence": "/affected/0/ranges"
}
],
"affected_versions": []
}
],
"severity": "unknown",
"structured": {
"id": "GO-2026-6687",
"aliases": [
"CVE-2026-107213",
"GHSA-r7x5-4969-99p7",
"GO-2026-6687"
],
"affected": [
{
"ranges": [
{
"type": "SEMVER",
"events": [
{
"introduced": "2.9.0"
},
{
"fixed": "2.11.1-0.20260929015830-8ffeb07ec9a3"
}
]
}
],
"package": {
"name": "github.com/xuri/excelize/v2",
"purl": "pkg:golang/github.com/xuri/excelize/v2",
"ecosystem": "Go"
},
"database_specific": {
"source": "https://vuln.go.dev/ID/GO-2026-6687.json"
},
"ecosystem_specific": {
"imports": [
{
"path": "github.com/xuri/excelize/v2",
"symbols": [
"File.DeleteSlicer",
"File.GetSlicers"
]
}
]
}
}
],
"modified": "2026-10-19T21:31:49.923387703Z",
"provider": "osv",
"references": [
"https://github.com/qax-os/excelize/security/advisories/GHSA-r7x5-4969-99p7",
"https://github.com/qax-os/excelize/commit/8ffeb07ec9a350410f6922313f6b7e4f5cc79241",
"https://github.com/qax-os/excelize/pull/2434"
],
"provider_metadata": {
"url": "https://pkg.go.dev/vuln/GO-2026-6687",
"review_status": "REVIEWED"
}
},
"related_cves": [
{
"value": "CVE-2026-107213",
"evidence": "/aliases"
}
],
"security_relevant": true,
"severity_evidence": null
},
"source_id": "core-osv",
"document_id": 376690,
"published_at": "2026-10-19T21:08:21+00:00"
}