文章总结: CVE-2025-68428漏洞涉及jsPDFNode.js构建版的目录穿越与本地文件包含。因核心函数未对路径进行安全校验,直接解析传入参数,攻击者可利用../序列读取服务器敏感文件。建议企业自查并升级版本,严格限制或过滤文件路径参数以防止信息泄露。 综合评分: 86 文章分类: 漏洞分析,代码审计,漏洞预警,WEB安全,漏洞POC
jsPDF 本地文件包含/目录遍历
HZ安全实验室
2026年1月8日 11:14 吉林
jsPDF 本地文件包含/目录遍历 (CVE-2025-68428)
声明
CVE-2025-68428 漏洞涉及 jsPDF(Node.js 构建版)的目录穿越与本地文件包含问题。本文所提供的 POC 仅用于企业合法自查与安全评估,严禁用于未授权的测试行为。任何未经授权利用该漏洞进行的测试操作,所造成的一切后果均由使用者自行承担,本公众号不承担任何责任。
介绍
该漏洞存在于 jsPDF 的 Node.js 构建版本中,其 loadFile、addImage、html、addFont 等核心方法未对用户传入的文件路径实施严格的过滤与合法性校验。远程攻击者可通过构造包含路径遍历序列(如 ../)的恶意请求,突破程序预期的资源访问目录限制,非法读取服务器上的敏感文件(如配置文件、密钥文件、系统核心文件等),并将读取到的文件内容嵌入至生成的 PDF 文档中,从而窃取敏感信息。
漏洞成因
在 jsPDF 源码的 dist/jspdf.node.js 文件第 15903 行,暴露了供用户调用的 jsPDFAPI.loadFile 接口,该接口最终调用 nodeReadFile 函数完成文件读取操作。nodeReadFile 函数的核心代码如下:
plaintext
function nodeReadFile(url, sync, callback) {
sync = sync === false ? false : true;
var result = undefined;
var fs = require("fs");
var path = require("path");
// 仅对路径做解析,未做任何安全校验
url = path.resolve(url);
if (sync) {
try {
// 直接读取解析后的路径文件
result = fs.readFileSync(url, { encoding: "latin1" });
} catch (e) {
return undefined;
}
} else {
fs.readFile(url, { encoding: "latin1" }, function(err, data) {
if (!callback) {
return;
}
if (err) {
callback(undefined);
}
callback(data);
});
}
return result;
}
})(jsPDF.API);
核心漏洞点:
函数接收用户传入的 url 参数后,仅通过 path.resolve(url) 对路径进行解析处理,未对路径中包含的 ../ 等目录遍历序列做任何过滤、白名单校验或路径范围限制。当攻击者传入 ../../../etc/passwd 这类恶意路径时,path.resolve 会主动解析遍历序列,生成服务器上敏感文件的绝对路径,并将该路径直接传递给 fs.readFileSync/fs.readFile 执行文件读取操作,最终导致服务器本地文件被非法读取,形成目录穿越与文件包含漏洞。
对应功能点
image-20260108110907049
poc如下
image-20260108110706825
image-20260108110819790
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:HZ安全实验室 《jsPDF 本地文件包含/目录遍历》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论