logo

CVE-2021-21236 cairosvg

Package

Manager: pip
Name: cairosvg
Vulnerable Version: >=0 <2.5.1

Severity

Level: High

CVSS v3.1: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

CVSS v4.0: 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/E:P

EPSS: 0.00094 pctl0.27301

Details

Regular Expression Denial of Service in CairoSVG # Doyensec Vulnerability Advisory * Regular Expression Denial of Service (REDoS) in cairosvg * Affected Product: CairoSVG v2.0.0+ * Vendor: https://github.com/Kozea * Severity: Medium * Vulnerability Class: Denial of Service * Author(s): Ben Caller ([Doyensec](https://doyensec.com)) ## Summary When processing SVG files, the python package CairoSVG uses two regular expressions which are vulnerable to Regular Expression Denial of Service (REDoS). If an attacker provides a malicious SVG, it can make cairosvg get stuck processing the file for a very long time. ## Technical description The vulnerable regular expressions are https://github.com/Kozea/CairoSVG/blob/9c4a982b9a021280ad90e89707eacc1d114e4ac4/cairosvg/colors.py#L190-L191 The section between 'rgb(' and the final ')' contains multiple overlapping groups. Since all three infinitely repeating groups accept spaces, a long string of spaces causes catastrophic backtracking when it is not followed by a closing parenthesis. The complexity is cubic, so doubling the length of the malicious string of spaces makes processing take 8 times as long. ## Reproduction steps Create a malicious SVG of the form: <svg width="1" height="1"><rect fill="rgb( ;"/></svg> with the following code: '<svg width="1" height="1"><rect fill="rgb(' + (' ' * 3456) + ';"/></svg>' Note that there is no closing parenthesis before the semi-colon. Run cairosvg e.g.: cairosvg cairo-redos.svg -o x.png and notice that it hangs at 100% CPU. Increasing the number of spaces increases the processing time with cubic complexity. ## Remediation Fix the regexes to avoid overlapping parts. Perhaps remove the [ \n\r\t]* groups from the regex, and use .strip() on the returned capture group. ## Disclosure timeline - 2020-12-30: Vulnerability disclosed via email to CourtBouillon

Metadata

Created: 2021-01-06T16:57:50Z
Modified: 2024-09-13T17:42:15Z
Source: https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2021/01/GHSA-hq37-853p-g5cf/GHSA-hq37-853p-g5cf.json
CWE IDs: ["CWE-400"]
Alternative ID: GHSA-hq37-853p-g5cf
Finding: F002
Auto approve: 1