
CVE-2024-4367
本项目演示并分析了 CVE-2024-4367,这是 Mozilla 的 PDF.js 库中的一个高严重性漏洞,由于字体处理代码中类型检查不当,导致任意 JavaScript 执行。我们的研究展示了如何通过恶意构造的 PDF 在 Electron 应用等上下文中执行 JavaScript,可能升级为远程代码执行。
🔗 GitHub 仓库:Hacking-pdf.js-vulnerability
fontMatrix 实现任意 JavaScript 执行。ex1.pdf 和 ex-gist.pdf 展示警告或远程脚本执行。src/components/ReactPdfViewer.tsx – 基于 react-pdf 5.7.2 构建的 React 查看器(捆绑了易受攻击的 pdfjs-dist 2.16.105)ex1.pdf – 触发警告的恶意 PDFex-gist.pdf – 获取并执行远程 JS 的恶意 PDFCVE-2024-4367_Report_Hacking_Project.pdf – 完整的技术报告和利用分析PDF.js 的 fontMatrix 数组元素未经正确验证——接受直接注入到通过 new Function(...) 编译的 JavaScript 中的字符串。这使得攻击者能够构造恶意字体数据,在允许类似 eval 的操作时导致任意代码执行。
易受攻击的代码路径示例:
fontMatrix = ["alert('XSS')", 0, 0, 1, 0, 0]; // 注入的有效载荷
// 结果编译成类似:
function drawGlyph() {
transform("alert('XSS')", 0, 0, 1, 0, 0); // 不安全的执行
}
为了缓解该漏洞并保护嵌入 PDF.js(或捆绑它的库)的应用程序,请采取以下措施:
isEvalSupported = false 设置为关闭动态 Function 编译。fontMatrix 数组)添加显式的 typeof 检查。package.json/yarn.lock 为最新,并自动应用安全补丁。添加严格的 Content-Security-Policy:
Content-Security-Policy: script-src 'self'; object-src 'none';