php-svg-lib is an SVG file parsing / rendering library. Prior to version 0.5.1, when handling <use> tag that references an <image> tag, it merges the attributes from the <use> tag to the <image> tag. The problem pops up especially when the href attribute from the <use> tag has not been sanitized. This can lead to an unsafe file read that can cause PHAR Deserialization vulnerability in PHP prior to version 8. Version 0.5.1 contains a patch for this issue.
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, $parsedurl, $fullurl) { if (strtolower($name) === "image") { $attributes = arraychangekeycase($attributes, CASELOWER); $url = $attributes["xlink:href"] ?? $attributes["href"]; if (!empty($url)) { $innerfullurl = Helpers::buildurl($parsedurl["protocol"], $parsedurl["host"], $parsedurl["path"], $url); if ($innerfullurl === $fullurl) { throw new ImageException("SVG self-reference is not allowed", EWARNING); } [$resolvedurl, $type, $message] = self::resolveurl($url, $parsedurl["protocol"], $parsedurl["host"], $parsedurl["path"], $options); if (!empty($message)) { throw new ImageException("This SVG document references a restricted resource. $message", EWARNING); } } } },
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.
Unspecified vulnerability in the ke DomPDF extension before 0.0.5 for TYPO3 allows remote attackers to execute arbitrary code via unknown vectors.