Новости
Python 3.14.7: новые патчи для tarfile, binascii и libexpat
Предыдущий поддерживающий релиз закрыл обходы фильтра извлечения через цели символических ссылок.
30 сентября 2026 года Python Software Foundation выпустила сразу пять поддерживающих релизов — 3.14.8, 3.13.16, 3.12.15, 3.11.17 и финальный 3.10.22. Три из патчей напрямую касаются обработки архивов: два закрывают обходы в tarfile, один — защищает zipfile от распаковочной бомбы.

Коротко: 30 сентября 2026 вышли Python 3.14.8, 3.13.16, 3.12.15, 3.11.17 и 3.10.22 (финальный). Закрыты две уязвимости tarfile — CVE-2026-82049 (хардлинк на симлинк пробивает папку назначения) и CVE-2026-19672 (обход фильтра через составной путь создаёт каталоги вне извлечения), а также CVE-2026-15310 в zipfile — распаковочная бомба через bzip2/LZMA/Zstandard. Одновременно ветка Python 3.10 официально завершила пятилетний цикл поддержки.
30 сентября 2026 года Python Software Foundation (PSF) выпустила сразу пять версий интерпретатора: Python 3.14.8, 3.13.16, 3.12.15, 3.11.17 и 3.10.22. Такая синхронная выкатка — стандартная практика PSF, когда исправление безопасности нужно одновременно внести во все поддерживаемые ветки.
Релиз 3.13.16 стал шестнадцатым и последним полноценным поддерживающим выпуском ветки 3.13 — дальше она переходит на режим «только патчи безопасности». В общей сложности в пяти версиях закрыто десять уязвимостей, но три из них напрямую касаются того, с чем ежедневно работает каждый, кто распаковывает TAR-архивы или ZIP-файлы: модули tarfile и zipfile из стандартной библиотеки.
Модуль tarfile уже получал патчи безопасности в более ранних релизах 2026 года (в частности, в Python 3.14.7 и 3.12.14). На этот раз обнаружены два новых способа обойти фильтр безопасного извлечения data_filter(), введённый ещё в Python 3.12.
Специально собранный TAR-архив может содержать жёсткую ссылку (hard link), целью которой выступает символическая ссылка (symlink). По данным объявления на oss-security, при извлечении такого архива фильтры data_filter() и tar_filter() не отслеживали эту комбинацию до конца: итоговая запись могла изменить права доступа или время модификации файла за пределами целевой папки, либо раскрыть содержимое этого файла внутри извлечённого дерева.
Вторая уязвимость — path-traversal в фильтре извлечения: имя элемента архива вида ../evil/../dest/sub/file могло обмануть проверку на выход за пределы каталога назначения и позволить создавать директории вне него. Формально каждый отдельный компонент пути выглядел безобидно, но итоговая нормализация пути выводила результат за границы extraction root.
Обновитесь до 3.14.8 / 3.13.16 / 3.12.15 / 3.11.17 / 3.10.22 и убедитесь, что вызовы tarfile.extractall() явно передают filter='data'. Без обновлённого интерпретатора сам по себе аргумент filter='data' не закрывает эти два конкретных обхода — патч меняет логику самого фильтра.
Третья уязвимость, CVE-2026-15310, находится в модуле zipfile и относится к классу «распаковочных бомб» (decompression bomb) — той же категории, что ранее разбирала редакция Loadfile на примере node-tar. При чтении элемента ZIP-архива, сжатого методом bzip2, LZMA или Zstandard, Python использовал значение размера из самого файла для предварительного выделения памяти под буфер распаковки — без проверки, насколько это значение разумно.
Для обычного метода deflate подобное ограничение в zipfile уже существовало. Патч выравнивает защиту: теперь объём данных, распаковываемых за одно чтение, ограничен для всех трёх методов сжатия так же, как и для deflate. Это не позволяет крошечному сжатому элементу архива развернуться в неограниченный объём памяти при обработке небольшими порциями.
Официально уязвимости присвоен низкий уровень серьёзности (LOW) — для эксплуатации нужен специально подготовленный ZIP-файл, который жертва должна открыть программой на базе zipfile. Но для серверных сервисов, принимающих ZIP-архивы от пользователей, и для скриптов, которые без лимитов разбирают пользовательские выгрузки, обновление стоит считать приоритетным.
В первую очередь обновление важно для разработчиков и администраторов, чьи приложения или скрипты автоматически распаковывают TAR- или ZIP-архивы, полученные из внешних источников — загрузки пользователей, пакеты из интернета, вложения писем. Если ваш код вызывает tarfile.extractall() или читает ZIP через zipfile.ZipFile без собственных лимитов на размер — это ваш случай.
Помимо трёх патчей для архивов, релизы закрывают утечку HTTPS-учётных данных в HTTPPasswordMgr (CVE-2026-15806), проблему проверки имени хоста в ssl.SSLContext.wrap_bio() (CVE-2026-19553), а также обновляют встроенный libexpat до 2.8.5 и OpenSSL до 3.5.9 в ветках 3.13 и 3.14.
Если не уверены, какой формат архива у вас на руках, прежде чем его распаковывать — определить его можно инструментом определения формата файла по сигнатуре прямо в браузере, без установки программ. Общий список форматов, которые стоит открывать с осторожностью, — в карте опасных расширений Loadfile.
Релиз 3.10.22 — последний в истории ветки Python 3.10: 1 октября 2026 года, через пять лет после запуска 4 октября 2021 года, PSF официально прекратила выпуск каких-либо обновлений для неё, включая патчи безопасности. Это означает, что любые новые уязвимости в Python 3.10, обнаруженные после этой даты, патчиться не будут.
Для проектов, которые до сих пор используют 3.10, в том числе для скриптов, обрабатывающих файлы на серверах, это сигнал к плановому переходу минимум на 3.11 — единственную ветку, которая всё ещё получает полноценные обновления, помимо активных 3.12–3.14.