# html2pdf.js 跨站脚本漏洞
## 概述
html2pdf.js 在将文本内容转换为 PDF 时存在跨站脚本(XSS)漏洞,该漏洞存在于 0.14.0 之前的版本中。
## 影响版本
0.14.0 之前的版本
## 细节
当 html2pdf.js 接收文本内容作为输入而非 DOM 元素时,未对文本进行充分的消毒处理,直接将其插入 DOM 中,导致恶意脚本可被执行。
## 影响
攻击者可利用该漏洞在客户端浏览器中注入并执行恶意脚本,威胁页面数据的机密性、完整性和可用性。
是否为 Web 类漏洞: 未知
判断理由:
| # | POC 描述 | 源链接 | 神龙链接 |
|---|
标题: feat: Sanitize text sources by eKoopmans · Pull Request #877 · eKoopmans/html2pdf.js · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
### 关键信息
**漏洞类型**:
- **高危XSS(Xross Site Scripting)**
**漏洞描述**:
- 当使用用户提交的文本作为来源时,`html2pdf.js` 存在一个严重的跨站脚本漏洞。这些文本来源现在已使用`dompurify`进行清理。
**修复措施**:
- 使用`dompurify`来净化文本输入。
**相关Commit与测试**:
- 添加文本源 `vdiff` 和demo
- 使用 `dompurify` 来净化文本输入
- 添加 `textSource vdiff` 测试到空白文件
**版本更新**:
- 此PR包含在`0.14.0`版本中
- 发布在:
- GitHub 发布页
- npm 包 (`@latest dist-tag`)
**其他信息**:
- 关闭了相关问题 `#865`
- 更新了与PR `877` 和 `878` 相关的 `vdiff goldens`
标题: Cross-Site Scripting · Issue #865 · eKoopmans/html2pdf.js -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
## 漏洞关键信息
### 漏洞概述
- **类型**: Cross-Site Scripting (XSS)
- **受影响库**: html2pdf.js
- **根源**: 未对用户输入进行清洗,直接赋值给 `innerHTML` 属性
### 受影响组件
- **文件**: `src/worker.js`
- **行号**: 71
- **链接**: [html2pdf.js/src/worker.js#L71](https://github.com/eKoopmans/html2pdf.js/blob/main/src/worker.js#L71)
### 漏洞代码
```javascript
case 'string': return this.set({ src: createElement('div', {innerHTML: src}) });
```
### 攻击向量
1. 攻击者提供包含JavaScript有效载荷的恶意HTML字符串
2. html2pdf.js将此字符串分配给`innerHTML`属性
3. 元素被添加到DOM中
4. 浏览器执行JavaScript代码
5. XSS有效载荷在受害者的浏览器上下文中运行
### 部分缓解措施
- `src/utils.js`文件中的部分缓解措施会移除`<script>`标签,但无法保护以下攻击向量:
- 事件处理程序(如 `onerror`, `onclick`, `onload` 等)
- 带嵌入脚本的SVG
- 包含JavaScript URL的`<iframe>`
- 其他HTML注入向量
### 概念验证
- **PoC 1**: 基本XSS(Alert)
- **Payload**: `<img src=x onerror="alert(document.cookie)">`
- **结果**: 在PDF生成过程开始时出现警报对话框,确认XSS执行
### 技术分析
- **代码流程**:
1. 输入接收
2. 字符串处理
3. DOM注入
4. XSS执行
### 当前缓解措施失败原因
- `<script>`标签移除操作发生在`innerHTML`赋值之后,此时事件处理器已经注册。
### 浏览器行为
- 现代浏览器会在包含事件处理程序的HTML设置`innerHTML`时执行JavaScript
### 修复建议
- 采用`DOMPurify`库进行用户输入清洗示例:
```javascript
const DOMPurify = require('dompurify');
const sanitizedHTML = DOMPurify.sanitize(userInput);
html2pdf().from(sanitizedHTML).save();
```
### 修复版本
- 此问题已在版本0.14.0中解决
```
以上信息是关于html2pdf.js库的XSS漏洞的关键内容,包括问题根源、受影响组件、概念验证、技术分析、失败的缓解措施和修复建议。
标题: Release v0.14.0 · eKoopmans/html2pdf.js · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
从这个 GitHub 项目 `html2pdf.js` 的截图中,可以获取到以下关于漏洞的关键信息:
- **版本信息**:
- 最新版本: `v0.14.0`
- 发布日期: 2026年1月12日
- **漏洞修复**:
- 特性: 说明该版本新增了 Sanitize text sources 的功能,这个特性可能修复了对文本源的清理问题,关联的变更请求编号为 `#877` 和提交哈希为 `988826e`。这可能意味着在之前的版本中存在文本注入或跨站脚本(XSS)等安全问题,新版本对此进行了处理以增强安全性。
- **项目维护状态**:
- 项目期间发布以来,主分支上有6次提交,这表明项目还在积极维护中,开发者在修复问题及更新特性。
- **资产**:
- 本次发布包含源代码的 zip 和 tar.gz 压缩包,这可以用于用户下载源码,校验是否存在问题代码或进一步审计代码确保没有未修复的漏洞。
这些关键信息对于评估此版本安全性非常重要,但需要注意的是,截图显示的发布日期是 fictional 的(2026年1月12日),当前还需要确认实际发布状态和安全公告。
标题: Cross-site scripting vulnerability · Advisory · eKoopmans/html2pdf.js · GitHub -- 🔗来源链接
标签:x_refsource_CONFIRM
神龙速读:
### 关键漏洞信息
- **漏洞类型**: 跨站脚本(XSS)漏洞
- **严重程度**: 高(CVSS v4 Base Score: 8.7/10)
- **影响版本**: < 0.14.0
- **修复版本**: 0.14.0
- **CVE ID**: CVE-2026-22787
- **相关弱点**: CWE-79
#### 描述与影响
**描述**: 当给定一个文本源而不是元素时,html2pdf.js 包含一个跨站脚本(XSS)漏洞。在附加到 DOM 之前,此文本没有进行充分的净化,允许恶意脚本在客户端浏览器上运行,风险页面数据的机密性、完整性和可用性。
**示例攻击向量**:
```javascript
import html2pdf from 'html2pdf.js/src/index.js';
const maliciousHTML = '<img src=x onerror="alert(document.cookie)">';
html2pdf(maliciousHTML);
// or html2pdf().from(maliciousHTML);
```
#### 修复与补丁
**修复措施**: 此漏洞在 html2pdf.js@0.14.0 中得到了修复,通过使用 DOMPurify 来净化文本源。此版本中没有其他破坏性更改。
**临时解决方法**: 使用早期版本的 html2pdf.js 的用户必须在将其用作 html2pdf.js 中的源之前,安全地净化任何文本。
#### 引用
- **初始报告**: #865
- **修复**: #877, v0.14.0
- **CVE-2026-22787**: [https://nvd.nist.gov/vuln/detail/CVE-2026-22787](https://nvd.nist.gov/vuln/detail/CVE-2026-22787)
#### 额外信息
- **发布者**: eKoopmans
- **发布日期**: 上周
- **漏洞编号**: GHSA-w8x4-x68c-m6fc
标题: feat: Sanitize text sources (#877) · eKoopmans/html2pdf.js@988826e · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
### 关键漏洞信息总结
**1. 漏洞修复描述**
- **修复主题**: Sanitize text sources (#877)
- 已通过安全性检查,且由eKoopmans与github-actions[bot]共同提交验证。
**2. 修复细节**
- **新增依赖项:** dompurify(`^3.3.1`),一个常用的用于清理和验证HTML内容的安全库,防止XSS等攻击。
- **代码调整点:**
- `src/utils.js`: 将原本可能不安全的`innerHTML`调用替换为DOMPurify.sanitize()方法进行清理后使用。
- `test/util/test-harness.js`:
- 增加了对来自`this.textSource`的文本源的处理逻辑,确保其安全性。
- 修改了`testHarness`类,以处理新的`text-source`参数。
**3. 安全实践**
- **DOMPurify引入:** 调用了dompurify对所有可能涉及渲染的HTML内容进行清洗,防止注入类的安全问题。
- **测试用例扩展:** 测试脚本中增加了对`text-source`特性的支持,以确保先前未测试到的代码路径也能够被覆盖。
Zaproxy alias impedit expedita quisquam pariatur exercitationem. Nemo rerum eveniet dolores rem quia dignissimos.