# pdfminer.six 任意代码执行漏洞
## 概述
pdfminer.six 是一个用于从 PDF 文档中提取信息的工具,是原始 PDFMiner 的社区维护分支。该工具在处理特定构造的 PDF 文件时存在代码执行漏洞。
## 影响版本
版本 20251107 之前。
## 漏洞细节
`CMapDB._load_data()` 函数中使用了 `pickle.loads()` 来反序列化 pickle 文件。
正常情况下,这些 pickle 文件应来自 pdfminer.six 自身的 `cmap/` 目录。
攻击者可通过构造恶意 PDF 文件,指定一个外部的、含有恶意代码的 `.pickle.gz` 文件。
当该 PDF 被解析时,恶意代码将被自动执行。
## 影响
处理恶意构造的 PDF 文件可能导致任意代码执行。
是否为 Web 类漏洞: 未知
判断理由:
| # | POC 描述 | 源链接 | 神龙链接 |
|---|---|---|---|
| 1 | A Proof-of-Concept for CVE-2025-64512 using a polyglot file. | https://github.com/luigigubello/CVE-2025-64512-Polyglot-PoC | POC详情 |
标题: Release 20251107 · pdfminer/pdfminer.six · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
### 关键漏洞信息
#### Fixed
- **TypeError** when passing wrong number of arguments to `safe_rgb` (#1118)
- **OverflowError** in `safe_float` when input is too large (#1121)
#### Additional Notes
- 4 commits have been made to the master branch after this release.
- No explicitly mentioned vulnerabilities or security patches.
#### Relevant Links
- [GitHub Repository](https://github.com/pdfminer/pdfminer.six)
标题: Arbitrary Code Execution in pdfminer.six via Crafted PDF Input · Advisory · pdfminer/pdfminer.six · GitHub -- 🔗来源链接
标签:x_refsource_CONFIRM
神龙速读:
### 关键信息
- **漏洞名称**:Arbitrary Code Execution in pdfminer.six via Crafted PDF Input
- **严重性**:High (8.6 / 10)
- **CVE ID**:CVE-2025-64512
#### **主要问题**
- **受影响的版本**:
- `< 20251107`
- **修复版本**:
- `>= 20251107`
- **CVSS v3 基准指标**
- **攻击向量**:Local
- **攻击复杂度**:Low
- **所需权限**:None
- **用户交互**:Required
- **影响范围**:Changed
- **保密性**:High
- **完整性**:High
- **可用性**:High
#### **漏洞描述**
- **总结**:
- pdfminer.six 在处理恶意 PDF 文件时,会执行来自恶意 pickle 文件的任意代码。
- `CMapDB._load_data()` 方法中存在漏洞,可能被带有 `/malicious` CMap 参照的恶意 PDF 攻击并控制。
#### **漏洞细节**
- **攻击步骤**:
1. 创建带有 CMap 参照指向恶意路径的恶意 PDF 文件。
2. 在路径中放置恶意的 pickle 文件。
3. 处理 PDF 文件时,pdfminer 会加载、反序列化恶意 pickle 文件。
4. 导致恶意的 Python 代码被执行。
- **攻击方式**:
```python
def _load_data(cls, name: str) -> Any:
name = name.replace("\0", "")
filename = "%s.pickle.gz" % name
return type(str(name), (), pickle.loads(gzfile.read()))
```
- **恶意样本**
- Malicious PDF 示例提供了受影响组件的关键描述和脚本。
#### **影响**
- **Linux、MacOS 难于利用**
- 因为路径特指约束且不支持网络存储协议。
- **Windows 容易利用**
- 支持 WebDAV 、SMB等协议,允许远程 payload 编码。
#### **验证**
- POC 脚本及 Test 说明可用于后续验证漏洞是否完全修复。
#### **修复建议**
- 充分验证 pickle 反序列化过程中的数据源。
- 尽量使用指定支持的安全库进行反序列化等操作。
标题: Fix: arbitary code execution when loading pickle font files · pdfminer/pdfminer.six@b808ee0 · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
从这个网页截图中可以获取到以下关于漏洞的关键信息:
- **修复内容**:
- 修复了加载pickle字体文件时的任意代码执行漏洞。
- 修复了与GHSA相关的两个安全问题:`GHSA-wf5f-4jwr-ppcp`和`GHSA-f83h-ghpp-7wcc`。
- **代码变更**:
- 在文件`pdfminer/cmapdb.py`中,修改了方法`_load_data`,更新了文件路径处理逻辑以防止目录遍历攻击。
- 添加了路径解析和检查逻辑,确保解析后路径在预期目录内。
- **关键代码变化**:
```python
@@ -240,8 +240,14 @@ def _load_data(cls, name: str) -> Any:
)
for directory in cmap_paths:
path = os.path.join(directory, filename)
- if os.path.exists(path):
- .gzfile = gzip.open(path)
+ # Resolve paths to prevent directory traversal
+ resolved_path = os.path.realpath(path)
+ resolved_directory = os.path.realpath(directory)
+ # Check if resolved path is within the intended directory
+ if not resolved_path.startswith(resolved_directory + os.sep):
+ continue
+ if os.path.exists(resolved_path):
+ gzfile = gzip.open(resolved_path)
try:
return type(str(name), (), pickle.loads(gzfile.read()))
finally:
```
- **安全措施**:
- 通过使用`os.path.realpath`解析路径,防止攻击者通过构造特殊路径(如`../`)进行目录遍历攻击,确保安全加载和处理文件。
暂无评论