{"items":[{"id":"NVI-00011763","kind":"vulnerability","title":"Excelize: a row whose earlier cell has a higher column reference than its last cell panics index out of range on almost every worksheet read API","revision":2,"unknowns":["Customer inventory, deployment, reachability and exploitation have not been inspected."],"lifecycle":"active","identifiers":["GHSA-8mcq-6wmr-jrjv","CVE-2026-107221"],"plain_summary":"GitHub lists this reviewed advisory for github.com/xuri/excelize/v2. Published version ranges and source prerequisites are shown below; this is not an inspection of a visitor’s application.","review_status":"source_listed","control_topics":[],"public_actions":[{"summary":"Identify the exact component and deployed version, examine the linked publisher’s conditions, and retain evidence of any mitigation.","source_ids":["sr-1c6e400bb25bd337bea1baaad29c2314"],"action_type":"investigate","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null}],"schema_version":"1.1.0","source_metrics":[{"kind":"CVSS","as_of":"2026-10-07T20:23:09.000Z","value":"6.5 medium","meaning":"GitHub source severity; exploitability and local consequence require separate evidence.","source_id":"sr-1e196c258ddcc84781dee8a72ca1c0a4"},{"kind":"EPSS","as_of":"2026-11-01T12:00:16.000Z","value":"0.270%","meaning":"FIRST EPSS model v2026.06.15; exploitation probability over 30 days, percentile 0.19209. Missing scores are unknown.","source_id":"sr-1c6e400bb25bd337bea1baaad29c2314"}],"why_it_matters":"Published affected context helps an owner decide what evidence to gather. This report has not examined your application.","related_sources":[{"id":"sr-1e196c258ddcc84781dee8a72ca1c0a4","url":"https://github.com/advisories/GHSA-8mcq-6wmr-jrjv","basis":"vendor_advisory","notes":"GitHub Advisory Database; CC-BY-4.0. Each advisory links its original attribution. Null normalizes fields.","title":"GHSA-8mcq-6wmr-jrjv","publisher":"GitHub Advisory Database","observed_at":"2026-11-01T00:58:46.232Z"},{"id":"sr-1c6e400bb25bd337bea1baaad29c2314","url":"https://www.first.org/epss/data.html","basis":"official_catalog","notes":"FIRST EPSS; probability of exploitation in the next 30 days, not local compromise. Dataset date/model retained; FIRST services terms apply.","title":"CVE-2026-107221","publisher":"FIRST EPSS","observed_at":"2026-11-01T14:28:32.264Z"}],"affected_context":[{"certainty":"source_listed","source_ids":["sr-1e196c258ddcc84781dee8a72ca1c0a4"],"technology":"github.com/xuri/excelize/v2","known_exclusions":[],"conditions_summary":"## Affected versions and vulnerable location\n\n- Confirmed at `ae2113b` (current HEAD).\n- Sink: `rows.go:967` `ws.SheetData.Row[rowIdx].C[colNum-1] = *colData` inside `checkRow`.\n- `checkRow` computes `lastCol` from the column of the last cell in document order (`rows.go:940`), allocates `targetList` of that length, then re-scatters every source cell into `C[colNum-1]`.\n\n## Root cause\n\nThe slice is sized from the last cell's column, but cells are not required to be column-sorted in the XML. A cell that appears earlier in the row but references a higher column than the last cell has `colNum-1 >= len(targetList)`, so the assignment writes out of range. `MaxColumns`/`TotalRows` do not help, every individual column is valid; the bug is the ordering assumption, not magnitude.\n\n## Attacker model and reachability\n\nAny service that opens an untrusted spreadsheet and calls a worksheet API that goes through `workSheetReader -> checkRow` (`excelize.go:332`): `GetCellValue`, `GetCellFormula`, `CalcCellValue`, `GetMergeCells`, `SetCellValue`, and essentially every non-streaming worksheet call. (The streaming `GetRows`/`Rows()` SAX path does not trigger it.) Unauthenticated, deterministic, unreco","public_affected_ranges":[">= 2.0.0, < 2.11.1-0.20260816084418-46a5eb289448"]}],"null_published_at":"2026-11-04T18:04:03.116Z","source_updated_at":"2026-10-07T20:23:09.000Z","source_disclosed_at":"2026-10-07T20:23:08.000Z","is_synthetic_fixture":false,"null_last_reviewed_at":null,"public_change_summary":"Dated EPSS estimate updated; this is not a new disclosure or proof of exploitation.","null_first_observed_at":"2026-11-01T00:58:46.232Z"},{"id":"NVI-00011763","kind":"vulnerability","title":"Excelize: a row whose earlier cell has a higher column reference than its last cell panics index out of range on almost every worksheet read API","revision":1,"unknowns":["Customer inventory, deployment, reachability and exploitation have not been inspected."],"lifecycle":"active","identifiers":["GHSA-8mcq-6wmr-jrjv","CVE-2026-107221"],"plain_summary":"GitHub lists this reviewed advisory for github.com/xuri/excelize/v2. Published version ranges and source prerequisites are shown below; this is not an inspection of a visitor’s application.","review_status":"source_listed","control_topics":[],"public_actions":[{"summary":"Identify the exact component and deployed version, examine the linked publisher’s conditions, and retain evidence of any mitigation.","source_ids":["sr-1e196c258ddcc84781dee8a72ca1c0a4"],"action_type":"investigate","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null}],"schema_version":"1.1.0","source_metrics":[{"kind":"CVSS","as_of":"2026-10-07T20:23:09.000Z","value":"6.5 medium","meaning":"GitHub source severity; exploitability and local consequence require separate evidence.","source_id":"sr-1e196c258ddcc84781dee8a72ca1c0a4"}],"why_it_matters":"Published affected context helps an owner decide what evidence to gather. This report has not examined your application.","related_sources":[{"id":"sr-1e196c258ddcc84781dee8a72ca1c0a4","url":"https://github.com/advisories/GHSA-8mcq-6wmr-jrjv","basis":"vendor_advisory","notes":"GitHub Advisory Database; CC-BY-4.0. Each advisory links its original attribution. Null normalizes fields.","title":"GHSA-8mcq-6wmr-jrjv","publisher":"GitHub Advisory Database","observed_at":"2026-11-01T00:58:46.232Z"}],"affected_context":[{"certainty":"source_listed","source_ids":["sr-1e196c258ddcc84781dee8a72ca1c0a4"],"technology":"github.com/xuri/excelize/v2","known_exclusions":[],"conditions_summary":"## Affected versions and vulnerable location\n\n- Confirmed at `ae2113b` (current HEAD).\n- Sink: `rows.go:967` `ws.SheetData.Row[rowIdx].C[colNum-1] = *colData` inside `checkRow`.\n- `checkRow` computes `lastCol` from the column of the last cell in document order (`rows.go:940`), allocates `targetList` of that length, then re-scatters every source cell into `C[colNum-1]`.\n\n## Root cause\n\nThe slice is sized from the last cell's column, but cells are not required to be column-sorted in the XML. A cell that appears earlier in the row but references a higher column than the last cell has `colNum-1 >= len(targetList)`, so the assignment writes out of range. `MaxColumns`/`TotalRows` do not help, every individual column is valid; the bug is the ordering assumption, not magnitude.\n\n## Attacker model and reachability\n\nAny service that opens an untrusted spreadsheet and calls a worksheet API that goes through `workSheetReader -> checkRow` (`excelize.go:332`): `GetCellValue`, `GetCellFormula`, `CalcCellValue`, `GetMergeCells`, `SetCellValue`, and essentially every non-streaming worksheet call. (The streaming `GetRows`/`Rows()` SAX path does not trigger it.) Unauthenticated, deterministic, unreco","public_affected_ranges":[">= 2.0.0, < 2.11.1-0.20260816084418-46a5eb289448"]}],"null_published_at":"2026-11-01T01:03:56.601Z","source_updated_at":"2026-10-07T20:23:09.000Z","source_disclosed_at":"2026-10-07T20:23:08.000Z","is_synthetic_fixture":false,"null_last_reviewed_at":null,"public_change_summary":"First indexed by Null; source disclosure date is shown separately.","null_first_observed_at":"2026-11-01T00:58:46.232Z"}],"next_cursor":null,"snapshot_revision":"42594"}