IPBUF安全漏洞报告
English
CVE-2026-3087 CVSS 7.5 高危

CVE-2026-3087 Python shutil.unpack_archive路径遍历漏洞

披露日期: 2026-04-27

漏洞信息

漏洞编号
CVE-2026-3087
漏洞类型
路径遍历
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Python

相关标签

路径遍历PythonWindowsCVE-2026-3087Zip Slipshutil

漏洞概述

Python标准库中的shutil.unpack_archive()函数存在安全漏洞。在Windows系统上,当使用该函数解压包含带盘符绝对路径(例如C:\path\to\file)的ZIP归档文件时,文件会被错误地提取到目标目录之外,而非预期的解压文件夹。攻击者可利用此缺陷将文件写入任意位置,从而覆盖系统关键文件或植入恶意代码,破坏系统完整性。该漏洞无需用户交互即可被利用,仅影响Windows操作系统。

技术细节

该漏洞源于Python标准库shutil模块在Windows平台处理ZIP归档时的路径校验逻辑缺陷。在Windows操作系统中,绝对路径通常以盘符开头(例如C:\)。当unpack_archive()函数解压ZIP文件时,未能正确识别并过滤文件名中包含的绝对路径信息。攻击者可以构造恶意的ZIP归档文件,将内部文件名设置为指向系统关键目录的绝对路径(如C:\Users\Public\malicious.exe)。当受害者使用受影响版本的Python解压此文件时,程序会忽略目标目录限制,直接将文件解压到绝对路径指定的位置。这种漏洞允许攻击者覆盖系统任意文件或植入恶意程序,从而破坏系统完整性。由于该漏洞利用无需用户交互且无需特殊权限,攻击者可轻易通过诱导用户解压文件来实施攻击,仅Windows平台受此影响。

攻击链分析

STEP 1
1. 构造攻击载荷
攻击者创建一个特制的ZIP压缩包,其中包含具有绝对路径(如C:\Windows\System32\evil.dll)的文件。
STEP 2
2. 传递载荷
攻击者通过网络将恶意ZIP文件发送给目标,或诱导目标下载。
STEP 3
3. 触发漏洞
目标用户或服务在Windows系统上使用Python的shutil.unpack_archive()函数解压该文件。
STEP 4
4. 执行写入
由于漏洞存在,函数未正确处理绝对路径,将文件直接写入C盘根目录或指定系统目录,而非预期的解压目录。
STEP 5
5. 达成影响
系统关键文件被覆盖或恶意代码被写入,导致系统完整性受损(I:H)。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import zipfile import shutil import os # Create a malicious ZIP file containing a file with an absolute path malicious_zip = "exploit.zip" evil_file_content = b"This file was written outside the extraction directory." # The ZipInfo filename uses an absolute Windows path (C:\evil.txt) # This bypasses the relative path check in vulnerable versions zip_info = zipfile.ZipInfo(filename="C:\\evil.txt") with zipfile.ZipFile(malicious_zip, mode="w") as zf: zf.writestr(zip_info, evil_file_content) print(f"Created malicious zip: {malicious_zip}") # Simulate the victim extracting the file extract_to = "./safe_folder" os.makedirs(extract_to, exist_ok=True) print(f"Extracting to: {extract_to}") # In vulnerable versions, this will write to C:\evil.txt instead of ./safe_folder/C:\evil.txt shutil.unpack_archive(malicious_zip, extract_to) print("Extraction complete. Check C:\\evil.txt.")

影响范围

Python (Windows平台受影响版本)

防御指南

临时缓解措施
在解压ZIP文件之前,应遍历压缩包内的所有文件名,检查是否包含Windows绝对路径特征(如盘符C:、D:等)或路径遍历字符(../)。如果检测到此类路径,应立即中止解压操作。建议开发者不要直接解压不受信任的来源文件,或者在隔离环境中进行解压操作。

参考链接

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