CVE-2023-23924 通过 `phar` URL 包装器在 PHP < 8 上反序列化任意对象

admin 2023年2月12日01:57:45评论94 views字数 1443阅读4分48秒阅读模式

Dompdf 是一个 HTML 到 PDF 的转换器。<image>通过传递带有大写字母的标签,可以在 SVG 解析时绕过 dompdf 2.0.1 上的 URI 验证。这可能会导致通过pharURL 包装器在 PHP < 8 上反序列化任意对象。如果攻击者可以向 dompdf 提供 SVG 文件,则攻击者可以利用该漏洞使用任意协议调用任意 URL。在 8.0.0 之前的 PHP 版本中,它会导致任意反序列化,这至少会导致任意文件删除甚至远程代码执行,具体取决于可用的类。

CVE-2023-23924 通过 `phar` URL 包装器在 PHP < 8 上反序列化任意对象

SVG 解析时 URI 验证失败

概括

<image>通过传递带有大写字母的标签,可以在 SVG 解析时绕过 dompdf 2.0.1 上的 URI 验证。这可能会导致通过pharURL 包装器在 PHP < 8 上反序列化任意对象。

细节

该错误发生在 src/Image/Cache.php 中的 SVG 标签解析期间<image>

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”,因此不会通过触发检查的条件。

正确的解决方案是$name在检查之前降低 strtolower :

if (strtolower($name) === "image") {

概念验证

解析以下 SVG 文件足以重现漏洞:

<svg>    <Image xlink:href="phar:///foo"></Image></svg>

影响

如果攻击者可以向 dompdf 提供 SVG 文件,则他们可能能够利用该漏洞以任意协议调用任意 URL。在 8.0.0 之前的 PHP 版本中,它会导致任意反序列化,这至少会导致任意文件删除,并可能导致远程代码执行,具体取决于可用的类。

源码更改:

CVE-2023-23924 通过 `phar` URL 包装器在 PHP < 8 上反序列化任意对象

https://github.com/dompdf/dompdf/commit/7558f07f693b2ac3266089f21051e6b78c6a0c85

参考:

  • https://github.com/dompdf/dompdf/security/advisories/GHSA-3cw5-7cxw-v5qg

  • https://github.com/dompdf/dompdf/releases/tag/v2.0.2

  • https://github.com/dompdf/dompdf/commit/7558f07f693b2ac3266089f21051e6b78c6a0c85

原文始发于微信公众号(Ots安全):CVE-2023-23924 通过 `phar` URL 包装器在 PHP < 8 上反序列化任意对象

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年2月12日01:57:45
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CVE-2023-23924 通过 `phar` URL 包装器在 PHP < 8 上反序列化任意对象http://cn-sec.com/archives/1548811.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息