GitHub Advisoryadvisory · PyPI

GHSA-c3jg-qh8m-j3h2 CairoSVG: Quadratic-time DoS parsing a crafted SVG <path>

HIGH Published 2026-10-08 Modified 2026-10-08 Official page ↗
Aliases
CVE-2026-107378
Ecosystem
PyPI
Packages
cairosvg
Severity
High
CVSS vector
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
Weaknesses
CWE-407
Reviewed
2026-10-08

Affected packages

• PyPI cairosvg: < 2.9.1 → fixed in 2.9.1

Description

Summary Rendering an untrusted SVG whose `` contains many segments is O(n²) CPU. A single `` under 1 MiB burns tens of seconds. Two independent O(n²) sites in `cairosvg/path.py`: 1. Tokenizer — the path-data parser consumes the `d` string with a `while string:` loop that repeatedly slices/re-scans the *remaining* string (each step is O(len remaining)), giving O(n²) over the whole attribute. 2. draw_markers — marker handling drains `node.vertices` with `while node.vertices: ... node.vertices.pop(0)`; `list.pop(0)` is O(n), so draining n vertices is O(n²). Both are hit on a normal render path (`svg2png`/`svg2pdf`), attacker controls only the SVG document. PoC (installed cairosvg 2.9.0) ```python import cairosvg d = "M0 0 " + "L1 1 " * 100000 svg = f'' cairosvg.svg2png(bytestring=svg.encode()) # ~4.4 s for a 488 KB doc ``` | path segments | SVG size | time | |---|---|---| | 50,000 | 244 KB | 1.14 s | | 100,000 | 488 KB | 4.36 s | | 200,000 | ~960 KB | ~18 s | Doubling segments ≈ 4× time ⇒ quadratic. Sub-MiB input ⇒ ~18 s CPU; any service rendering user-supplied SVG (thumbnails, avatars, PDF export) is a DoS target. Reachability Public API `svg2png` / `svg2pdf` / `svg2ps` on an untrusted SVG string. Suggested fix Tokenize with a single forward scan / index (or `re.finditer`) instead of re-slicing the remainder; drain `vertices` with an index or `collections.deque.popleft` instead of `list.pop(0)`. Optionally cap path-segment count.

Related

Alias · CVE (1)

  • CVE-2026-107378 CairoSVG is an SVG converter based on Cairo, a 2D graphics library. vulnerability

Weakness · CWE (1)

  • CWE-407 Inefficient Algorithmic Complexity weakness

References