Новости
Python 3.12.14: патчи безопасности tarfile и ZIP
Предыдущий поддерживающий релиз ветки 3.12 закрыл схожие проблемы в модуле tarfile и ZIP-обработке.
5 августа 2026 года Python Software Foundation одновременно выпустила Python 3.14.7 и Python 3.13.15. Седьмой поддерживающий релиз ветки 3.14 содержит около 499 исправлений от 86 участников и закрывает несколько проблем безопасности, непосредственно связанных с обработкой архивов и файловых данных.

Коротко: 5 августа 2026 вышли Python 3.14.7 и 3.13.15. Главный патч безопасности — tarfile.data_filter() теперь отклоняет символические ссылки, перезаписывающие директорию назначения при извлечении архива, закрывая несколько обходов фильтра. Также обновлены libexpat до 2.8.3 (CVE 2026-72522) и встроенный pip до 26.1 (CVE 2026-3219).
5 августа 2026 года Python Software Foundation (PSF) выпустила два плановых поддерживающих релиза: Python 3.14.7 и Python 3.13.15. Оба вышли одновременно — это стандартная практика, когда исправления безопасности применяются сразу к нескольким активным веткам.
Python 3.14.7 — седьмой поддерживающий выпуск ветки 3.14, запущенной в октябре 2025 года. По данным PSF, релиз включает около 499 исправлений от 86 участников, накопленных со времени предыдущего релиза 3.14.6. Среди них несколько патчей безопасности, непосредственно затрагивающих работу с файлами и архивами.
Параллельно с 3.14.7 вышел Python 3.13.15 — поддерживающий релиз для ветки 3.13, которая по-прежнему получает обновления безопасности. Оба релиза доступны на официальном сайте python.org.
Наиболее значимое для работы с файлами изменение — улучшение модуля tarfile, отвечающего за чтение и запись TAR.GZ-архивов и других TAR-форматов. Конкретно: усилен механизм tarfile.data_filter().
data_filter() — это фильтр безопасного извлечения, введённый в Python 3.12 как ответ на серию уязвимостей обхода пути в TAR-архивах. Фильтр проверяет каждый элемент архива перед записью на диск и отклоняет потенциально опасные записи: абсолютные пути, элементы с .. и подозрительные символические ссылки.
В Python 3.14.7 фильтр получил дополнительную проверку: он теперь отклоняет символические ссылки, целью которых является перезапись директории назначения. Такая атака могла позволить архиву подменить папку, куда разархивируются файлы, указав на неё через симлинк, — после чего все последующие записи шли бы в произвольное место файловой системы.
При использовании tarfile.extractall() передавайте аргумент filter='data': это активирует data_filter() и все его проверки, включая исправления из Python 3.14.7. Без явного filter= поведение зависит от версии Python.
По описанию в официальном changelog, закрыто несколько обходов фильтра извлечения данных, связанных с целями символических ссылок. Это продолжение работы, начатой в Python 3.12 и усиленной в последующих релизах — в частности, ранее похожие патчи вошли в Python 3.12.14.
Помимо tarfile, Python 3.14.7 содержит несколько других патчей, связанных с обработкой данных и файлов.
Интерпретатор Python поставляется с встроенной копией библиотеки libexpat — XML-парсера, используемого модулями xml.etree.ElementTree, xml.parsers.expat и рядом других. В Python 3.14.7 libexpat обновлён до версии 2.8.3, которая закрывает уязвимость CVE 2026-72522. Характер уязвимости в changelog не детализирован, но обновление libexpat рекомендуется всем, кто обрабатывает XML-данные из внешних источников или пользовательских файлов.
Отдельно в этом же релизе libexpat был обновлён до 2.8.1 с патчем для CVE 2026-45186 — то есть закрыты две разных уязвимости в XML-парсере одновременно.
Исправлено чтение одного байта за пределами выделенного буфера в функции binascii.a2b_uu(). Эта функция декодирует данные в формате uuencoding — кодировке, исторически использовавшейся для передачи бинарных файлов через электронную почту. Хотя формат считается устаревшим, он по-прежнему встречается при обработке архивных вложений и legacy-данных. Чтение за границей буфера могло вызывать нестабильное поведение интерпретатора на специально подготовленных входных данных.
Встроенная в Python копия пакетного менеджера pip обновлена до версии 26.1, которая закрывает CVE 2026-3219. Детали уязвимости pip относятся к области управления пакетами, а не к работе с файловыми форматами напрямую, однако pip непосредственно загружает и распаковывает пакеты с дистрибутивными архивами — поэтому его безопасность критична для цепочки поставок пакетов.
Завершено исправление CVE-2021-4189 в модуле ftplib, отвечающем за работу с FTP-серверами. Уязвимость была связана с командой PASV (пассивный режим) и некорректной обработкой адресов в ответе сервера. Python 3.14.7 закрывает её полностью.
Исправлена утечка учётных данных между HTTPS и HTTP: ранее HTTPPasswordMgr мог передать пароль, сохранённый для HTTPS-URL, при запросе к совпадающему HTTP-адресу того же хоста. Это затрагивало код, использующий urllib для автоматической аутентификации, — например, при скачивании файлов через HTTP Basic Auth.
Обновление актуально прежде всего для разработчиков и системных администраторов, чьи скрипты обрабатывают TAR-архивы из внешних источников. Если приложение принимает TAR.GZ, TAR.BZ2 или TAR.XZ от пользователей или загружает их из интернета и извлекает содержимое на диск — обновление следует считать приоритетным.
Пользователи Python в корпоративных окружениях, которые работают с XML-документами от внешних поставщиков (EDI, финансовые выгрузки, конфигурационные файлы), также должны обновиться из-за патчей libexpat.
Для большинства пользователей Python, работающих только с локальными архивами, риск невысок, но обновление до 3.14.7 или 3.13.15 рекомендуется — это плановый поддерживающий релиз без ломающих изменений.
Идентифицировать, какой именно формат файла перед вами, можно инструментом определения формата по сигнатуре — прямо в браузере, без установки программ.