IPBUF安全漏洞报告
English
CVE-2026-25645 CVSS 4.4 中危

CVE-2026-25645 Python Requests库路径预测漏洞

披露日期: 2026-03-25

漏洞信息

漏洞编号
CVE-2026-25645
漏洞类型
路径预测/本地文件替换
CVSS评分
4.4 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
Python Requests库

相关标签

路径预测本地文件替换PythonRequests库中危

漏洞概述

Python Requests库在2.33.0版本之前存在一个本地安全漏洞。问题出在`requests.utils.extract_zipped_paths()`工具函数中,该函数在处理zip归档文件解压至系统临时目录时,使用了可预测的文件名。若目标文件已存在,函数会直接重用该文件且不进行完整性校验。拥有临时目录写入权限的本地攻击者可预先植入恶意文件,使其被应用程序加载。该漏洞仅影响直接调用该特定函数的应用程序,Requests库的标准使用场景不受波及。

技术细节

该漏洞的根本原因在于Python Requests库中`requests.utils.extract_zipped_paths()`函数实现了不安全的临时文件处理逻辑。在受影响版本(2.33.0之前)中,当该函数用于从ZIP归档中提取文件到系统临时目录时,它生成的文件名缺乏足够的随机性,导致路径可被预测。更为关键的是,代码逻辑中存在缺陷:如果目标路径下已经存在同名文件,函数会跳过正常的解压和校验步骤,直接复用该文件。攻击者利用此漏洞需要满足特定的前提条件:首先,攻击者必须具备对系统临时目录(通常是`/tmp`或`TMPDIR`环境变量指定的路径)的写入权限;其次,目标应用程序必须直接调用了这个特定的工具函数。攻击过程通常包括:攻击者预先在临时目录中创建一个与预期解压文件同名的恶意文件;随后,当合法用户或系统进程触发应用程序调用`extract_zipped_paths()`处理相关ZIP文件时,漏洞函数会错误地认为文件已就绪,从而加载并执行攻击者预设的恶意内容。这可能导致本地权限提升或应用程序行为被篡改。

攻击链分析

STEP 1
步骤1:环境侦察
攻击者确认目标系统使用了Python Requests库,且版本低于2.33.0,并确认应用程序直接调用了extract_zipped_paths函数。
STEP 2
步骤2:预置恶意文件
攻击者利用对系统临时目录(如/tmp)的写入权限,根据可预测的命名规则,预先创建一个包含恶意载荷的同名文件。
STEP 3
步骤3:诱导触发
等待或诱导合法用户、系统管理员运行受影响的应用程序,使其执行解压ZIP文件的操作,从而触发extract_zipped_paths函数。
STEP 4
步骤4:载荷执行
受影响函数检测到文件已存在,直接加载攻击者预置的恶意文件,导致应用程序执行非预期代码或加载恶意配置。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import os import tempfile # This PoC demonstrates the vulnerability scenario. # It simulates an attacker creating a predictable file in the temp directory # before the vulnerable application extracts the zip. def attacker_simulation(): # 1. Determine the temp directory temp_dir = tempfile.gettempdir() # 2. Predict the filename that the vulnerable function will generate # (Based on the hash of the zip content or predictable logic in older versions) predictable_filename = "vulnerable_extract_target_file.bin" full_path = os.path.join(temp_dir, predictable_filename) print(f"[+] Attacker targeting path: {full_path}") # 3. Create the malicious file with open(full_path, 'wb') as f: f.write(b"MALICIOUS_PAYLOAD_CONTROLLED_BY_ATTACKER") print(f"[+] Malicious file created successfully.") return full_path def vulnerable_app_simulation(target_path): # This simulates the logic in requests.utils.extract_zipped_paths() # Check if file exists (The vulnerability: reusing without validation) if os.path.exists(target_path): print("[*] File found in temp dir. Reusing without extraction/validation.") with open(target_path, 'rb') as f: return f.read() else: print("[-] File not found. Extracting...") return b"LEGITIMATE_CONTENT" # Execute simulation malicious_path = attacker_simulation() loaded_content = vulnerable_app_simulation(malicious_path) print(f"[+] Content loaded by application: {loaded_content}")

影响范围

Python Requests < 2.33.0

防御指南

临时缓解措施
如果无法立即升级版本,开发者可以通过设置环境变量TMPDIR为一个具有受限写入权限的目录,以此来阻止攻击者在默认临时目录中预置文件。

参考链接

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