漏洞详情
包管理器: pip 包名称: pdfminer.six 受影响版本: <= 20251107 已修补版本: 暂无
🚀 概述
本报告演示了pdfminer.six中一个真实的权限提升漏洞,该漏洞源于Python的pickle模块在加载CMap文件时的不安全使用。它展示了在多用户或服务器环境中,低权限用户如何通过利用不安全的反序列化获得root访问权限(或提升到任何服务账户)。
🚨 特别说明
本公告处理的是与GHSA-wf5f-4jwr-ppcp(CVE-2025-64512)不同的漏洞。虽然先前的CVE声称缓解了与不安全反序列化相关的问题,但在提交b808ee05dd7f0c8ea8ec34bdf394d40e63501086中引入的补丁并未解决此处报告的漏洞。根据对库的最新版本(对比视图)进行的测试,由于仍然不安全地使用pickle文件,该问题在本地权限提升方面仍然可被利用。Dockerfile因此被修改以针对此声明运行测试。这表明CVE-2025-64512的补丁是不完整的:漏洞仍然可利用。因此,本公告记录了一个独立的、可修复的缺陷。正确的修复方案必须移除对pickle文件的依赖(或以其他方式消除不安全的反序列化),并用安全的、可审计的数据处理方法取而代之,以使库能够在不依赖pickle的情况下正常运行。
🔍 背景
pdfminer.six是一个流行的Python库,用于从PDF文件中提取文本和信息。它通过外部CMap文件支持CJK(中文、日文、韩文)字体,这些文件使用Python的pickle模块从磁盘加载。
🐍 安全问题
如果CMap搜索路径(CMAP_PATH 或默认目录)包含一个全局可写或用户可写的目录,攻击者可以放置一个恶意的 .pickle.gz 文件,该文件将被pdfminer.six加载和反序列化,从而导致任意代码执行。
🐍 漏洞描述
组件: pdfminer.six CMap加载(pdfminer/cmapdb.py)
问题: 使用Python的pickle模块加载和反序列化.pickle.gz文件,这对于不可信数据是不安全的。
可利用性: 如果低权限用户可以写入CMAP_PATH中的任何目录,他们就可以以运行pdfminer的用户身份执行代码——可能是root或特权服务账户。
影响: 以服务用户身份完全执行代码、从用户提升到root权限、持久化以及潜在的横向移动。
🎭 演示场景
环境:
- 🐧 Alpine Linux(Docker容器)
- 👨💻 两个用户:
user1(攻击者:低权限)root(受害者:运行特权PDF处理脚本)
- 🗂️ 共享可写目录:
/tmp/uploads - 🛣️ 为特权脚本设置
CMAP_PATH为/tmp/uploads - 📦 pdfminer.six系统级安装
攻击流程:
- 🕵️♂️
user1在/tmp/uploads中创建恶意的CMap文件(Evil.pickle.gz)。 - 👑 特权服务(
root)处理PDF或调用get_cmap("Evil")。 - 💣 恶意的pickle被反序列化,以root身份运行任意代码。
- 🎯 漏洞利用在
/root/pwnedByPdfminer中创建一个标志文件作为证据。
🧨 技术细节
漏洞类型: 使用Python的pickle对不可信数据进行不安全的反序列化
攻击前提: 攻击者可以写入包含在CMAP_PATH中的目录
易受攻击的代码行:
|
|
位于pdfminer/cmapdb.py的_load_data方法中(链接)
概念验证: 参见createEvilPickle.py、evilmod.py和processPdf.py
利用链:
- 攻击者将恶意的
.pickle.gz文件放置在CMap搜索路径中。 - 特权进程(例如
root)加载CMap,触发pickle反序列化。 - 任意代码以进程(root/服务账户)的权限执行。
🔧 设置与使用
📁 文件
Dockerfile
|
|
evilmod.py
|
|
createEvilPickle.py
|
|
processPDF.py
|
|
步骤指南
1️⃣ 构建并启动演示容器
|
|
2️⃣ 在容器中,并行打开两个shell(或在一个shell中切换用户):
- 🕵️♂️ Shell 1(攻击者: user1)
1 2 3 4su user1 cd /app python createEvilPickle.py # ✅ 确认:/tmp/uploads/Evil.pickle.gz 已创建并归 user1 所有 - 👑 Shell 2(受害者: root)
1 2 3cd /app python processPdf.py # 🎯 输出:如果易受攻击,/root/pwnedByPdfminer 将被创建
3️⃣ 权限提升证明
|
|
📝 逐步演练
user1使用createEvilPickle.py在共享的上传目录中制作并放置一个恶意的CMap pickle文件。root用户运行一个典型的PDF处理脚本,该脚本从该目录加载CMap文件。- 漏洞利用被触发,以root身份运行任意代码。
- 攻击者现在拥有以root身份执行代码的证明(在真实攻击中,可以进一步升级)。
🛡️ 安全标准与参考
CVSS(通用漏洞评分系统)
- 基础分数: 7.8(高)
- 向量:
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
OWASP Top 10
- A08:2021 - 软件和数据完整性故障
- A03:2021 - 注入(通过类比,因为这是通过反序列化进行的代码注入)
MITRE CWE 参考
- CWE-502: 不可信数据的反序列化
- CWE-915: 对动态确定的对象属性的控制不当的修改
MITRE ATT&CK 技术
- T1055: 进程注入
- T1548: 滥用权限提升控制机制
参考链接
- GHSA-f83h-ghpp-7wcc
- pdfminer/pdfminer.six@b808ee0