{"items":[{"id":"NVI-00011868","kind":"vulnerability","title":"Docling: Unbounded table rowspan/colspan in HTML, JATS, ODS and BoxNote backends causes CPU/memory exhaustion","revision":3,"unknowns":["Customer inventory, deployment, reachability and exploitation have not been inspected."],"lifecycle":"active","identifiers":["GHSA-cgc7-9qp3-86m3","CVE-2026-105749"],"plain_summary":"GitHub lists this reviewed advisory for docling, docling-slim. 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-1b0d28ae80fa9ec60fab1cf44c326911"],"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:41:03.000Z","value":"6.5 medium","meaning":"GitHub source severity; exploitability and local consequence require separate evidence.","source_id":"sr-498a31469712572b168777a0211e8d7c"},{"kind":"EPSS","as_of":"2026-11-04T12:03:12.000Z","value":"0.291%","meaning":"FIRST EPSS model v2026.06.15; exploitation probability over 30 days, percentile 0.21765. Missing scores are unknown.","source_id":"sr-1b0d28ae80fa9ec60fab1cf44c326911"}],"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-498a31469712572b168777a0211e8d7c","url":"https://github.com/advisories/GHSA-cgc7-9qp3-86m3","basis":"vendor_advisory","notes":"GitHub Advisory Database; CC-BY-4.0. Each advisory links its original attribution. Null normalizes fields.","title":"GHSA-cgc7-9qp3-86m3","publisher":"GitHub Advisory Database","observed_at":"2026-11-01T00:58:38.867Z"},{"id":"sr-1b0d28ae80fa9ec60fab1cf44c326911","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-105749","publisher":"FIRST EPSS","observed_at":"2026-11-04T17:58:50.309Z"}],"affected_context":[{"certainty":"source_listed","source_ids":["sr-498a31469712572b168777a0211e8d7c"],"technology":"docling","known_exclusions":[],"conditions_summary":"### Summary\n\nThe HTML, JATS, ODS (OpenDocument spreadsheet) and BoxNote backends accept table `rowspan` / `colspan` values without an upper bound. A few bytes of input, such as ``, make docling run loops proportional to the declared span and allocate a table grid of the declared size. The result is CPU and memory exhaustion.\n\n### Details\n\n- `docling/backend/html_backend.py` (`_get_cell_spans`) parses span attributes with no upper limit. The cell-filling loop then iterates `row_span × col_span` times.\n- `docling/backend/jats_backend.py` and `docling/backend/boxnote_backend.py` fill their tables the same way.\n- The OpenDocument spreadsheet path scans the declared span range.\n- Export (for example `export_to_markdown()`) materialises the full grid through `TableData.grid` in docling-core.\n\n`document_timeout` does not bound this. It is checked between pipeline stages, and these backends convert the whole document in a single call. `max_file_size` and `max_num_pages` do not help because the payload is tiny.\n\nMeasured on 2.130.0: a 54-byte HTML file with `rowspan=\"1e8\"` takes about 4.4 s of CPU, and the time grows linearly with the value. A 52-byte file with `cols","public_affected_ranges":[">= 2.0.0, < 2.131.0"]},{"certainty":"source_listed","source_ids":["sr-498a31469712572b168777a0211e8d7c"],"technology":"docling-slim","known_exclusions":[],"conditions_summary":"### Summary\n\nThe HTML, JATS, ODS (OpenDocument spreadsheet) and BoxNote backends accept table `rowspan` / `colspan` values without an upper bound. A few bytes of input, such as ``, make docling run loops proportional to the declared span and allocate a table grid of the declared size. The result is CPU and memory exhaustion.\n\n### Details\n\n- `docling/backend/html_backend.py` (`_get_cell_spans`) parses span attributes with no upper limit. The cell-filling loop then iterates `row_span × col_span` times.\n- `docling/backend/jats_backend.py` and `docling/backend/boxnote_backend.py` fill their tables the same way.\n- The OpenDocument spreadsheet path scans the declared span range.\n- Export (for example `export_to_markdown()`) materialises the full grid through `TableData.grid` in docling-core.\n\n`document_timeout` does not bound this. It is checked between pipeline stages, and these backends convert the whole document in a single call. `max_file_size` and `max_num_pages` do not help because the payload is tiny.\n\nMeasured on 2.130.0: a 54-byte HTML file with `rowspan=\"1e8\"` takes about 4.4 s of CPU, and the time grows linearly with the value. A 52-byte file with `cols","public_affected_ranges":[">= 2.92.0, < 2.131.0"]}],"null_published_at":"2026-11-08T19:53:44.008Z","source_updated_at":"2026-10-07T20:41:03.000Z","source_disclosed_at":"2026-10-07T20:41:02.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:38.867Z"},{"id":"NVI-00011868","kind":"vulnerability","title":"Docling: Unbounded table rowspan/colspan in HTML, JATS, ODS and BoxNote backends causes CPU/memory exhaustion","revision":2,"unknowns":["Customer inventory, deployment, reachability and exploitation have not been inspected."],"lifecycle":"active","identifiers":["GHSA-cgc7-9qp3-86m3","CVE-2026-105749"],"plain_summary":"GitHub lists this reviewed advisory for docling, docling-slim. 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-59ea59913b33f35898a06e6eabbf3950"],"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:41:03.000Z","value":"6.5 medium","meaning":"GitHub source severity; exploitability and local consequence require separate evidence.","source_id":"sr-498a31469712572b168777a0211e8d7c"},{"kind":"EPSS","as_of":"2026-10-31T12:00:27.000Z","value":"0.291%","meaning":"FIRST EPSS model v2026.06.15; exploitation probability over 30 days, percentile 0.21671. Missing scores are unknown.","source_id":"sr-59ea59913b33f35898a06e6eabbf3950"}],"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-498a31469712572b168777a0211e8d7c","url":"https://github.com/advisories/GHSA-cgc7-9qp3-86m3","basis":"vendor_advisory","notes":"GitHub Advisory Database; CC-BY-4.0. Each advisory links its original attribution. Null normalizes fields.","title":"GHSA-cgc7-9qp3-86m3","publisher":"GitHub Advisory Database","observed_at":"2026-11-01T00:58:38.867Z"},{"id":"sr-59ea59913b33f35898a06e6eabbf3950","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-105749","publisher":"FIRST EPSS","observed_at":"2026-11-01T01:39:43.064Z"}],"affected_context":[{"certainty":"source_listed","source_ids":["sr-498a31469712572b168777a0211e8d7c"],"technology":"docling","known_exclusions":[],"conditions_summary":"### Summary\n\nThe HTML, JATS, ODS (OpenDocument spreadsheet) and BoxNote backends accept table `rowspan` / `colspan` values without an upper bound. A few bytes of input, such as ``, make docling run loops proportional to the declared span and allocate a table grid of the declared size. The result is CPU and memory exhaustion.\n\n### Details\n\n- `docling/backend/html_backend.py` (`_get_cell_spans`) parses span attributes with no upper limit. The cell-filling loop then iterates `row_span × col_span` times.\n- `docling/backend/jats_backend.py` and `docling/backend/boxnote_backend.py` fill their tables the same way.\n- The OpenDocument spreadsheet path scans the declared span range.\n- Export (for example `export_to_markdown()`) materialises the full grid through `TableData.grid` in docling-core.\n\n`document_timeout` does not bound this. It is checked between pipeline stages, and these backends convert the whole document in a single call. `max_file_size` and `max_num_pages` do not help because the payload is tiny.\n\nMeasured on 2.130.0: a 54-byte HTML file with `rowspan=\"1e8\"` takes about 4.4 s of CPU, and the time grows linearly with the value. A 52-byte file with `cols","public_affected_ranges":[">= 2.0.0, < 2.131.0"]},{"certainty":"source_listed","source_ids":["sr-498a31469712572b168777a0211e8d7c"],"technology":"docling-slim","known_exclusions":[],"conditions_summary":"### Summary\n\nThe HTML, JATS, ODS (OpenDocument spreadsheet) and BoxNote backends accept table `rowspan` / `colspan` values without an upper bound. A few bytes of input, such as ``, make docling run loops proportional to the declared span and allocate a table grid of the declared size. The result is CPU and memory exhaustion.\n\n### Details\n\n- `docling/backend/html_backend.py` (`_get_cell_spans`) parses span attributes with no upper limit. The cell-filling loop then iterates `row_span × col_span` times.\n- `docling/backend/jats_backend.py` and `docling/backend/boxnote_backend.py` fill their tables the same way.\n- The OpenDocument spreadsheet path scans the declared span range.\n- Export (for example `export_to_markdown()`) materialises the full grid through `TableData.grid` in docling-core.\n\n`document_timeout` does not bound this. It is checked between pipeline stages, and these backends convert the whole document in a single call. `max_file_size` and `max_num_pages` do not help because the payload is tiny.\n\nMeasured on 2.130.0: a 54-byte HTML file with `rowspan=\"1e8\"` takes about 4.4 s of CPU, and the time grows linearly with the value. A 52-byte file with `cols","public_affected_ranges":[">= 2.92.0, < 2.131.0"]}],"null_published_at":"2026-11-01T22:58:19.130Z","source_updated_at":"2026-10-07T20:41:03.000Z","source_disclosed_at":"2026-10-07T20:41:02.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:38.867Z"},{"id":"NVI-00011868","kind":"vulnerability","title":"Docling: Unbounded table rowspan/colspan in HTML, JATS, ODS and BoxNote backends causes CPU/memory exhaustion","revision":1,"unknowns":["Customer inventory, deployment, reachability and exploitation have not been inspected."],"lifecycle":"active","identifiers":["GHSA-cgc7-9qp3-86m3","CVE-2026-105749"],"plain_summary":"GitHub lists this reviewed advisory for docling, docling-slim. 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-498a31469712572b168777a0211e8d7c"],"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:41:03.000Z","value":"6.5 medium","meaning":"GitHub source severity; exploitability and local consequence require separate evidence.","source_id":"sr-498a31469712572b168777a0211e8d7c"}],"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-498a31469712572b168777a0211e8d7c","url":"https://github.com/advisories/GHSA-cgc7-9qp3-86m3","basis":"vendor_advisory","notes":"GitHub Advisory Database; CC-BY-4.0. Each advisory links its original attribution. Null normalizes fields.","title":"GHSA-cgc7-9qp3-86m3","publisher":"GitHub Advisory Database","observed_at":"2026-11-01T00:58:38.867Z"}],"affected_context":[{"certainty":"source_listed","source_ids":["sr-498a31469712572b168777a0211e8d7c"],"technology":"docling","known_exclusions":[],"conditions_summary":"### Summary\n\nThe HTML, JATS, ODS (OpenDocument spreadsheet) and BoxNote backends accept table `rowspan` / `colspan` values without an upper bound. A few bytes of input, such as ``, make docling run loops proportional to the declared span and allocate a table grid of the declared size. The result is CPU and memory exhaustion.\n\n### Details\n\n- `docling/backend/html_backend.py` (`_get_cell_spans`) parses span attributes with no upper limit. The cell-filling loop then iterates `row_span × col_span` times.\n- `docling/backend/jats_backend.py` and `docling/backend/boxnote_backend.py` fill their tables the same way.\n- The OpenDocument spreadsheet path scans the declared span range.\n- Export (for example `export_to_markdown()`) materialises the full grid through `TableData.grid` in docling-core.\n\n`document_timeout` does not bound this. It is checked between pipeline stages, and these backends convert the whole document in a single call. `max_file_size` and `max_num_pages` do not help because the payload is tiny.\n\nMeasured on 2.130.0: a 54-byte HTML file with `rowspan=\"1e8\"` takes about 4.4 s of CPU, and the time grows linearly with the value. A 52-byte file with `cols","public_affected_ranges":[">= 2.0.0, < 2.131.0"]},{"certainty":"source_listed","source_ids":["sr-498a31469712572b168777a0211e8d7c"],"technology":"docling-slim","known_exclusions":[],"conditions_summary":"### Summary\n\nThe HTML, JATS, ODS (OpenDocument spreadsheet) and BoxNote backends accept table `rowspan` / `colspan` values without an upper bound. A few bytes of input, such as ``, make docling run loops proportional to the declared span and allocate a table grid of the declared size. The result is CPU and memory exhaustion.\n\n### Details\n\n- `docling/backend/html_backend.py` (`_get_cell_spans`) parses span attributes with no upper limit. The cell-filling loop then iterates `row_span × col_span` times.\n- `docling/backend/jats_backend.py` and `docling/backend/boxnote_backend.py` fill their tables the same way.\n- The OpenDocument spreadsheet path scans the declared span range.\n- Export (for example `export_to_markdown()`) materialises the full grid through `TableData.grid` in docling-core.\n\n`document_timeout` does not bound this. It is checked between pipeline stages, and these backends convert the whole document in a single call. `max_file_size` and `max_num_pages` do not help because the payload is tiny.\n\nMeasured on 2.130.0: a 54-byte HTML file with `rowspan=\"1e8\"` takes about 4.4 s of CPU, and the time grows linearly with the value. A 52-byte file with `cols","public_affected_ranges":[">= 2.92.0, < 2.131.0"]}],"null_published_at":"2026-11-01T01:03:56.611Z","source_updated_at":"2026-10-07T20:41:03.000Z","source_disclosed_at":"2026-10-07T20:41:02.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:38.867Z"}],"next_cursor":null,"snapshot_revision":"42594"}