GitHub Advisoryadvisory · Packagist

GHSA-56gj-mvh6-rp75 URI validation failure on SVG parsing. Bypass of CVE-2023-23924

CRITICAL Published 2023-02-07 Modified 2023-02-08 Official page ↗
Aliases
CVE-2023-24813
Ecosystem
Packagist
Packages
dompdf/dompdf
Severity
Critical
CVSS vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
Weaknesses
CWE-436
Reviewed
2023-02-07

Affected packages

• Packagist dompdf/dompdf: >= 2.0.2, < 2.0.3 → fixed in 2.0.3

Description

Summary Due to the difference in the attribute parser of Dompdf and php-svg-lib, an attacker can still call arbitrary URLs with arbitrary protocols. Details Dompdf parses the href attribute of `image` tags with the following code: `src/Image/Cache.php` line 135-150 ``` php function ($parser, $name, $attributes) use ($options, $parsed_url, $full_url) { if (strtolower($name) === "image") { $attributes = array_change_key_case($attributes, CASE_LOWER); $url = $attributes["xlink:href"] ?? $attributes["href"]; if (!empty($url)) { $inner_full_url = Helpers::build_url($parsed_url["protocol"], $parsed_url["host"], $parsed_url["path"], $url); if ($inner_full_url === $full_url) { throw new ImageException("SVG self-reference is not allowed", E_WARNING); } [$resolved_url, $type, $message] = self::resolve_url($url, $parsed_url["protocol"], $parsed_url["host"], $parsed_url["path"], $options); if (!empty($message)) { throw new ImageException("This SVG document references a restricted resource. $message", E_WARNING); } } } }, ``` As you can see from the code snippet above, it respects `xlink:href` even if `href` is specified. ``` php $url = $attributes["xlink:href"] ?? $attributes["href"]; ``` However, php-svg-lib, which is later used to parse the svg file, parses the href attribute with the following code: `src/Svg/Tag/Image.php` line 51-57 ``` php if (isset($attributes['xlink:href'])) { $this->href = $attributes['xlink:href']; } if (isset($attributes['href'])) { $this->href = $attributes['href']; } ``` Since `href` is respected if both `xlink:href` and `href` is specified, it's possible to bypass the protection on the Dompdf side by providing an empty `xlink:href` attribute. Impact An attacker can exploit the vulnerability to call arbitrary URLs with arbitrary protocols if they provide an SVG file to the Dompdf. In PHP versions before 8.0.0, it leads to arbitrary unserialize, which will lead, at the very least, to arbitrary file deletion and might lead to remote code execution, depending on available classes.

Related

Alias · CVE (1)

  • CVE-2023-24813 Dompdf is an HTML to PDF converter written in php. vulnerability

Weakness · CWE (1)

  • CWE-436 Interpretation Conflict weakness

References