jsPDF漏洞使数百万开发者面临对象注入攻击风险

流行jsPDF库中最新披露的安全漏洞使数百万Web开发者面临PDF对象注入攻击风险,允许远程攻击者将任意对象和操作嵌入生成的PDF文档中。
该漏洞被追踪为CVE-2026-25755,影响用于在PDF文件中嵌入JavaScript代码的addJS方法。
问题源于jsPDF中javascript.js文件对用户输入的不当过滤。具体而言,问题行使用以下语法将未经过滤的输入直接连接到PDF流中:
this.internal.out("/JS (" + text + ")");
此逻辑未能转义作为PDF规范中字符串分隔符的右括号。通过注入诸如) >> /Action …的有效载荷,攻击者可以提前终止/JS字符串并注入任意PDF结构,从而完全控制嵌入对象。
| CVE ID | CVSS分数 | 描述 |
|---|---|---|
| CVE-2026-25755 | 8.8(高) | jsPDF的addJS方法中的PDF对象注入漏洞允许在生成的PDF中注入任意对象并执行操作。 |
与典型的基于JavaScript的XSS攻击不同,此漏洞直接操纵PDF对象层次结构,使恶意行为者能够在查看器禁用JavaScript时执行操作或修改文档结构。
关键影响包括:
- JS禁用执行:注入的PDF操作(例如/OpenAction)可以自动触发,绕过JavaScript限制。
- 文档操纵:攻击者可以注入、加密或修改/Annots或/Signatures部分,以修改元数据、进行网络钓鱼或改变PDF外观。
- 跨查看器风险:轻量级PDF查看器,尤其是移动或嵌入式查看器,可能由于严格遵守PDF对象解析规则而执行注入的操作。
发现此问题的安全研究员ZeroXJacks演示了一个概念验证,使用精心设计的addJS有效载荷在文档打开时触发自定义PDF操作。
这突显了从用户输入动态生成PDF的应用程序的严重风险。根本原因在于缺少根据PDF规范进行的输入验证和转义。
开发者强烈建议更新至jsPDF 4.1.0或更高版本,其中通过转义括号和反斜杠正确过滤了输入。
在修补之前,用户应避免使用addJS或相关方法嵌入不可信或用户生成的内容,并对任何客户端PDF创建工作流程实施严格的输入验证。

夜雨聆风
