前言
开源 Dompdf PHP 库中披露了一个严重的安全漏洞,如果成功利用该漏洞,可能会导致在目标服务器上远程执行代码。
“如果攻击者可以向 dompdf 提供 SVG 文件,则他们可能能够利用该漏洞以任意协议调用任意 URL。在 8.0.0 之前的 PHP 版本中,它会导致任意反序列化,这至少会导致任意文件删除,并可能导致远程代码执行,具体取决于可用的类, ”开发人员 Bsweeney在公告中写道。
跟踪为 CVE-2023-23924(CVSS 分数:10),该错误会影响库的所有版本,包括 2.0.1 及以下版本,并已在昨天发布的2.0.2 版中得到解决。
Dompdf 是一个 HTML 到 PDF 的转换器。从本质上讲,dompdf(主要)是一个 用 PHP 编写的符合CSS 2.1的 HTML 布局和渲染引擎。它是一个样式驱动的渲染器:它将下载和读取外部样式表、内联样式标签和单个 HTML 元素的样式属性。它还支持大多数表示性 HTML 属性。它在 packagist PHP 包存储库中的下载量超过 6500 万次。
“通过传递 带有大写字母的标签,可以在 SVG 解析中绕过 dompdf 2.0.1 上的 URI 验证。这可能会通过URL 包装器<image>在 PHP < 8 上导致任意对象反序列化 phar, ”Bsweeney 补充道。
因此,删除服务器上任意文件的能力可能会破坏机密性和完整性保证,可能使糟糕的参与者能够覆盖主机上的任意文件并执行任何恶意操作。
分析
概括
<image>通过传递带有大写字母的标签,可以在 SVG 解析时绕过 dompdf 2.0.1 上的 URI 验证。phar这可能会导致通过URL 包装器在 PHP < 8 上反序列化任意对象。
细节
该错误发生<image>在 src/Image/Cache.php 中的 SVG 标签解析期间:
if ($type === "svg") {
$parser = xml_parser_create("utf-8");
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, false);
xml_set_element_handler(
$parser,
function ($parser, $name, $attributes) use ($options, $parsed_url, $full_url) {
if ($name === "image") {
$attributes = array_change_key_case($attributes, CASE_LOWER);
这部分将尝试检测<image>SVG 中的标签,并将使用 href 根据 protocolAllowed 白名单对其进行验证。然而,`$name 与 "image" 的比较是区分大小写的,这意味着 SVG 中的这样一个标签将通过:
<svg>
<Image xlink:href="phar:///foo"></Image>
</svg>
由于标签名为“Image”而不是“image”,因此不会通过触发检查的条件。
正确的解决方案是在检查之前降低 strtolower $name:
if (strtolower($name) === "image") {
概念验证
解析以下 SVG 文件足以重现漏洞:
<svg>
<Image xlink:href="phar:///foo"></Image>
</svg>
影响
如果攻击者可以向 dompdf 提供 SVG 文件,则他们可能能够利用该漏洞以任意协议调用任意 URL。在 8.0.0 之前的 PHP 版本中,它会导致任意反序列化,这至少会导致任意文件删除,并且可能导致远程代码执行,具体取决于可用的类。
referer:
https://github.com/advisories/GHSA-3cw5-7cxw-v5qg
https://securityonline.info/cve-2023-23924-critical-severity-rce-flaw-found-in-popular-dompdf-library/
扫描二维码获取
更多精彩
洛米唯熊
原文始发于微信公众号(洛米唯熊):CVE-2023-23924:在流行的 Dompdf 库中发现严重的严重 RCE 缺陷
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论