Sploitus

Exploit for Hacking-pdf.js-vulnerability

kitploit · 2026-09-05

Exploit Code

MARKDOWN108 lines
## 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';