Security
Headlines
HeadlinesLatestCVEs

Headline

CVE-2023-24813: URI validation failure on SVG parsing (Bypass of CVE-2023-23924)

Dompdf is an HTML to PDF converter written in php. Due to the difference in the attribute parser of Dompdf and php-svg-lib, an attacker can still call arbitrary URLs with arbitrary protocols. Dompdf parses the href attribute of image tags and respects xlink:href even if href is specified. However, php-svg-lib, which is later used to parse the svg file, parses the href attribute. 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. 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. This vulnerability has been addressed in commit 95009ea98 which has been included in release version 2.0.3. Users are advised to upgrade. There are no known workarounds for this vulnerability.

CVE
#vulnerability#php#rce#pdf

Due to the difference in the attribute parser of Dompdf and php-svg-lib, an attacker can still call arbitrary URLs with arbitrary protocols.

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.

$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:

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.

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 news

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

### 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](https://github.com/dompdf/dompdf/blob/2a8a6b80fcaa5148ace50f35a10979fe00c6a35d/src/Image/Cache.php#L135-L150) ``` 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]...

CVE: Latest News

CVE-2023-50976: Transactions API Authorization by oleiman · Pull Request #14969 · redpanda-data/redpanda
CVE-2023-6905
CVE-2023-6903
CVE-2023-6904
CVE-2023-3907