jsPDF 本地文件包含/路径遍历(CVE-2025-68428)漏洞分析
字数 1329
更新时间 2026-01-09 12:08:42
jsPDF 本地文件包含/路径遍历漏洞(CVE-2025-68428)教学文档
漏洞概述
CVE-2025-68428是jsPDF库(Node.js构建版)中存在的一个本地文件包含/路径遍历漏洞。该漏洞源于jsPDF的部分方法未对用户传入的文件路径进行严格过滤与校验,导致攻击者可以读取服务器上的敏感文件。
漏洞详情
受影响版本
- 受影响版本:<= 3.0.4
- 已修复版本:>= 4.0.0
漏洞原理
jsPDF的以下方法存在路径遍历漏洞:
loadFileaddImagehtmladdFont
这些方法未对用户输入的文件路径进行充分验证,攻击者可以通过构造包含路径遍历序列(如../)的恶意路径,绕过预期的资源目录限制,读取系统上的任意文件。
漏洞复现(PoC)
import { jsPDF } from "jspdf";
const doc = new jsPDF();
// 通过路径遍历读取系统敏感文件
doc.addImage("../secret.txt", "JPEG", 0, 0, 10, 10);
doc.save("test.pdf");
在此示例中,攻击者通过../secret.txt路径遍历序列,成功读取了位于jsPDF工作目录上级的secret.txt文件,并将其内容嵌入到生成的PDF文档中。
漏洞分析
攻击流程
- 路径解析:jsPDF未对用户输入的文件路径进行验证,直接将其解析为绝对路径
- 文件读取:通过
readFileSync函数读取目标文件内容 - 内容嵌入:将读取到的文件内容嵌入到生成的PDF文档中
- 文件保存:通过
writeFileSync将包含敏感信息的PDF保存到本地
修复方案
官方提供了两种解决方案:
方案一:Node.js权限控制
运行Node.js时添加权限控制标志:
node --permission --allow-fs-read=<allowed_directory>
方案二:代码层面配置
在jsPDF中设置allowFsRead属性,限制可读取的文件和目录:
// 新版本修复后的安全用法
import { jsPDF } from "jspdf";
const doc = new jsPDF();
// 必须显式启用文件系统读取权限
doc.allowFsRead = true; // 或设置特定允许的目录
// 或者通过构造函数配置
const doc = new jsPDF({ allowFsRead: true });
补丁分析
修复commit:a688c8f479929b24a6543b1fa2d6364abb03066d
关键修复点:
- 添加了对
process.permission的检查 - 引入了
this.allowFsRead属性进行权限控制 - 在文件读取操作前进行权限验证
安全影响评估
风险等级
高危 - 可导致敏感信息泄露
受影响资源
攻击者可读取的敏感文件包括:
- 配置文件(如
.env、config.json) - 密钥文件(如SSH密钥、API密钥)
- 系统文件(如
/etc/passwd) - 应用程序源代码
- 数据库凭证文件
防护建议
对于开发者
- 立即升级jsPDF到4.0.0及以上版本
- 如无法立即升级,实施严格的输入验证和路径规范化
- 遵循最小权限原则,限制应用程序的文件系统访问权限
对于系统管理员
- 使用容器化部署,限制应用程序的文件系统访问范围
- 实施文件系统权限控制,确保应用程序只能访问必要的目录
- 定期进行安全审计和漏洞扫描
测试验证
漏洞存在性测试
使用受影响版本(<=3.0.4)运行PoC代码,检查是否能够成功读取系统文件。
修复验证
升级到修复版本(>=4.0.0)后:
- 未配置权限时,相关操作应抛出安全异常
- 正确配置权限后,功能应正常运作但仅限于允许的目录
总结
CVE-2025-68428是一个典型的不安全直接对象引用(IDOR)漏洞,强调了在文件操作中对用户输入进行严格验证的重要性。开发人员应当始终遵循安全编码实践,对所有的用户输入实施严格的验证和过滤机制。
相似文章
相似文章