## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-BHAVYAKCWESTERN-HACKING-PDF.JS-VULNERABILITY
# 🚨 CVE-2024-4367:PDF.js 中的任意 JavaScript 执行
本项目演示并分析了 **CVE-2024-4367** ,这是 Mozilla 的 PDF.js 库中的一个高严重性漏洞,由于字体处理代码中类型检查不当,导致任意 JavaScript 执行。我们的研究展示了如何通过恶意构造的 PDF 在 Electron 应用等上下文中执行 JavaScript,可能升级为远程代码执行。
🔗 **GitHub 仓库** :Hacking-pdf.js-vulnerability
* * *
## 📖 项目概述
* **CVE ID** :CVE-2024-4367
* **严重性** :高(CVSS v3.1 评分:8.8)
* **受影响软件**
* PDF.js < 4.2.67
* Mozilla Firefox < 126
* Firefox ESR < 115.11
* Thunderbird < 115.11
* **利用方式** :通过嵌入式字体中未经清理的 `fontMatrix` 实现任意 JavaScript 执行。
* **概念验证 (PoC)** :PDF 文件 `ex1.pdf` 和 `ex-gist.pdf` 展示警告或远程脚本执行。
* * *
## 📂 仓库内容
* `src/components/ReactPdfViewer.tsx` – 基于 react-pdf 5.7.2 构建的 React 查看器(捆绑了易受攻击的 pdfjs-dist 2.16.105)
* `ex1.pdf` – 触发警告的恶意 PDF
* `ex-gist.pdf` – 获取并执行远程 JS 的恶意 PDF
* `CVE-2024-4367_Report_Hacking_Project.pdf` – 完整的技术报告和利用分析
* * *
## ⚠️ 漏洞详情
PDF.js 的 `fontMatrix` 数组元素未经正确验证——接受直接注入到通过 `new Function(...)` 编译的 JavaScript 中的字符串。这使得攻击者能够构造恶意字体数据,在允许类似 `eval` 的操作时导致任意代码执行。
易受攻击的代码路径示例:
root@kitploit:~
fontMatrix = ["alert('XSS')", 0, 0, 1, 0, 0]; // 注入的有效载荷
// 结果编译成类似:
function drawGlyph() {
transform("alert('XSS')", 0, 0, 1, 0, 0); // 不安全的执行
}
* * *
## 🛡️ CVE-2024-4367 的缓解策略
为了缓解该漏洞并保护嵌入 PDF.js(或捆绑它的库)的应用程序,请采取以下措施:
### ✅ 升级依赖
* 将 **PDF.js** 升级到 **v 4.2.67** (或更高版本),该版本修复了类型检查缺陷。
* 如果使用封装库(如 **react-pdf** ),请确认它们提供的 **pdfjs-dist ≥ 4.2.67** 。
### ✅ 禁用动态编译
* 在 PDF.js 中将 **`isEvalSupported = false`** 设置为关闭动态 `Function` 编译。
### ✅ 强制类型检查
* 对所有用户提供的值(例如 `fontMatrix` 数组)添加显式的 `typeof` 检查。
### ✅ 清理输入
* 在期望数字的地方拒绝或清理任何非数字输入。
### ✅ 使用依赖监控工具
* 将 **Snyk** (或类似工具)集成到 CI/CD 中,自动扫描依赖项。
* 保持 `package.json`/`yarn.lock` 为最新,并自动应用安全补丁。
### ✅ 保持浏览器和运行时更新
* 运行已修补的版本:
* **Firefox ≥ 126**
* **Firefox ESR ≥ 115.11**
* **Thunderbird ≥ 115.11**
* 更新 Electron 运行时,使其捆绑安全的 PDF.js 构建版本。
### ✅ 应用安全头部
添加严格的 **Content-Security-Policy** :
root@kitploit:~
Content-Security-Policy: script-src 'self'; object-src 'none';