Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-59941 — Dompdf:利用超大图像位图导致资源耗尽的拒绝服务(DoS) | Kitploit
工具/GitHubGitHub/far00t01/cve-2026-59941
Payload生成漏洞分析漏洞利用Web应用程序漏洞利用渗透测试学习与教育
GitHubfar00t01/cve-2026-59941

CVE-2026-59941

Dompdf:利用超大图像位图导致资源耗尽的拒绝服务(DoS)

查看仓库
452个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-59942:Dompdf 资源耗尽 DoS - 概念验证

  • 漏洞类型: 通过资源耗尽导致的拒绝服务(DoS)
  • 受影响软件: Dompdf <= 3.1.5
  • 致谢: Fabian Rosales (far00t01)。

免责声明

本仓库及其内容仅供教育和研究目的使用。作者不对使用此处提供的信息进行的任何滥用、损害或非法活动负责。在测试目标环境之前,请务必获得授权。

摘要

Dompdf v3.1.5 存在通过资源耗尽进行拒绝服务(DoS)攻击的漏洞。攻击者可以通过提供一个特制的 HTML 文档(其中包含一张尺寸巨大的图像,例如 30,000x30,000 像素)来使 PHP 进程崩溃。

尽管 Dompdf 实现了内部检查来验证图像尺寸,但可以通过使用以 Base64 编码并包裹在特定 CSS 容器中的高熵图像(例如随机噪声)来绕过这些检查。

技术深入分析:

标准的纯色图像通常可以被压缩算法或渲染引擎优化。然而,高熵噪声图像会迫使 PHP 引擎逐个处理这 9 亿个像素。当调用 render() 时,引擎会尝试在内存中处理未压缩的位图,并为每个高方差像素数据点计算布局。这会导致:

  • 100% CPU 饱和: 渲染线程在尝试处理像素流时无限期挂起。
  • 进程终止: 巨大的内存分配(经证实,单张图像约需 1.2 GB)会触发致命错误或操作系统级别的 SIGKILL(OOM),从而导致立即的拒绝服务。

详情

该漏洞存在的原因是:尺寸验证发生在早期阶段,但在渲染阶段为计算对象的边界框和内部缓冲区而进行的资源分配,并未严格限制单个已通过初始检查的对象的累计 CPU 时间或内存使用量。

概念验证结果

https://github.com/user-attachments/assets/d1f5a07b-a7c5-4b5e-84b5-1e47e73522d9

  1. 通过 Composer 安装 Dompdf v3.1.5。
composer require dompdf/dompdf:3.1.5
  1. 使用以下 Python 脚本生成恶意载荷(exploit.py):
  2. 在另一个终端中使用以下 Python 脚本监控系统资源(monitor.py):
  3. 创建一个名为 render.php 的文件。该脚本作为易受攻击的入口点,模拟 Dompdf 库的标准实现:
  4. 执行 PHP 进程,通过 stdin 提供载荷。我们使用 2GB 内存限制,以证明崩溃是由不受控制的分配引起的,而非受限的服务器配置:
php -d memory_limit=2G render.php < payload.html
  1. 引擎会尝试处理高熵图像的每一个像素。monitor.py 脚本将记录到 99.8% 的 CPU 饱和,随后出现 PHP Fatal Error(Allowed memory size exhausted),因为 Dompdf 试图在单次操作中分配约 1.2 GB 内存。随后进程被终止,确认了拒绝服务。

以下日志展示了资源耗尽漏洞的成功利用。尽管为 PHP 进程提供了充裕的 2GB 内存限制,单张高熵图像仍会导致致命崩溃。

Payload 生成:

python3 exploit.py 
[*] Generating 30000x30000 High-Entropy Noise Bomb...
[+] High-entropy payload saved to: payload.html

目标执行与拒绝服务:

php -d memory_limit=2G render.php < payload.html
Output
[*] Starting Dompdf rendering process...
PHP Fatal error:  Allowed memory size of 2147483648 bytes exhausted (tried to allocate 1200355712 bytes) in /home/far00t/dompdf_exploit/vendor/dompdf/dompdf/src/Dompdf.php on line 490

在执行 render.php 进程期间,monitor.py 脚本捕获了以下遥测数据,展示了其对系统资源的影响:

python3 monitor.py 
[*] Searching for PHP processes... (Press Ctrl+C to stop)
[MONITOR] PID: 210767 | RAM: 953.17 MB | CPU: 99.7%

遥测数据的关键发现:

  • CPU 饥饿:该进程的 CPU 使用率持续达到 99.7%。在生产环境中,单线程 PHP 进程达到这种饱和程度,实际上会拒绝对该核心上任何其他任务的服务。
  • 内存快速膨胀:常驻内存(RSS)攀升至 953.17 MB,随后引擎尝试进行最后一次 1.2 GB 的分配,从而触发了致命错误。
  • 绕过确认:遥测数据证明 Dompdf 内部的“安全”限制被绕过,因为引擎继续尝试进行宿主环境无法承受的大规模位图解压缩。

影响

未经身份验证的远程攻击者可以通过提交精心构造的 HTML 字符串,对 Web 服务器造成完全的拒绝服务。这会影响任何允许用户提供 HTML 内容或 URL、并随后使用 Dompdf 将其转换为 PDF 的应用程序。

参考

  • https://github.com/dompdf/dompdf/security/advisories/GHSA-f5gf-2cj8-52g2
  • https://www.cve.org/CVERecord?id=CVE-2026-59942
下载工具