Python закрывает уязвимости сразу в трёх ветках — вышли 3.12.14, 3.11.16 и 3.10.21

Три ветки Python, уже переведённые в режим security fixes only, получили синхронный пакет обновлений безопасности 12 августа 2026 года. Python 3.12.14, 3.11.16 и 3.10.21 исправляют проблемы в tarfile, XML, HTTP, cookies, webbrowser, распаковке ZIP, обработке CSV и других частях стандартной библиотеки — то есть в механизмах, через которые серверные приложения часто получают данные извне.

Python закрывает уязвимости сразу в трёх ветках
Python закрывает уязвимости сразу в трёх ветках

Три старые ветки Python редко обновляются одновременно: фиксированного графика у security-релизов уже нет. Поэтому официальное сообщение Python Insider от 12 августа получилось заметно шире обычного точечного патча. Разработчики собрали исправления, которые затрагивают архивы, сетевые протоколы, XML, Unicode, CSV, HTML и загрузку байткода.

Для пользователя настольного Python часть списка может выглядеть далёкой от повседневной работы. Для веб-сервиса картина другая. Если приложение распаковывает загруженный архив, разбирает XML от партнёра, принимает CSV, открывает URL или общается с внешним HTTP-сервером, многие исправленные участки уже находятся на пути входящих данных.

Три ветки Python получили общий пакет security-исправлений

Python 3.12, 3.11 и 3.10 находятся в фазе security fixes only. В таком режиме ветка перестаёт получать обычные исправления ошибок и выпускается нерегулярно, когда накапливаются изменения, связанные с безопасностью. Для этих релизов Python.org предоставляет исходные архивы без готовых установщиков для Windows и macOS.

У трёх версий много общих исправлений. Среди них есть защита от обходов ограничений при распаковке архивов, HTTP-инъекций, зависаний на специально сформированных данных и ошибок работы с памятью. Одновременно ветки расходятся в отдельных деталях: Python 3.11.16 получил дополнительное исправление обработки DER-сертификатов, Python 3.12.14 — защиту BTI/PAC для AArch64-кода, используемого с -X perf_jit.

Текущая функциональная ветка Python — 3.14, поэтому выпуски 3.10.21, 3.11.16 и 3.12.14 адресованы прежде всего системам, которые пока остаются на предыдущих поколениях интерпретатора.

tarfile и shutil закрывают пути за пределы каталога распаковки

Одна из самых понятных групп исправлений связана с архивами. Проблема здесь возникает, когда имя файла, символическая ссылка или путь внутри архива заставляет распаковщик записать данные за пределами выбранной директории.

В tarfile.data_filter() изменена проверка целей ссылок: теперь используется то же нормализованное значение, которое фактически попадёт на диск. Фильтр удаляет завершающие разделители из имени элемента при вычислении каталога символической ссылки и отклоняет ссылки, способные заменить сам каталог назначения. Отдельное исправление закрывает обход CVE-2025-4330, при котором специально подготовленный TAR мог создать symlink, указывающий наружу из дерева распаковки.

На Windows похожий класс проблемы затронул shutil.unpack_archive(). ZIP с путём, содержащим префикс диска Windows, мог привести к записи файлов за пределами целевой директории. В новых security-релизах такие пути отбрасываются.

В этом практическом сценарии сервер принимает архив от пользователя, извлекает его содержимое в временную директорию и затем выполняет обработку данных. Несколько исправлений касались определения границ этой временной директории.

XML, CSV, HTML и Unicode получили защиту от ресурсоёмкого входа

Вторая крупная группа изменений связана с отказом в обслуживании. Специально подготовленная строка или документ могут заставить парсер выполнять непропорционально много работы и занять процессор на заметное время.

В unicodedata.normalize() прежний этап упорядочивания комбинируемых символов использовал алгоритм с квадратичной сложностью. Для длинных последовательностей его заменили линейной сортировкой подсчётом. В csv.Sniffer.sniff() закрыты два случая с экспоненциальным и квадратичным временем обработки образцов с большим количеством кавычек.

html.parser.HTMLParser больше не должен тратить квадратичное время на длинные незавершённые конструкции вроде тегов или комментариев. В configparser.RawConfigParser исправлен квадратичный backtracking регулярных выражений при обработке строк с большим количеством пробелов. Методы find(), findall() и iterfind() в xml.etree.ElementTree получили защиту от квадратичного поведения XPath-предикатов на XML с большим количеством соседних элементов одного типа.

У XML есть ещё один отдельный сюжет. xml.parsers.expat исправляет падение из-за неограниченной C-рекурсии при разборе глубоко вложенных моделей содержимого через ElementDeclHandler() — этот пункт связан с CVE-2026-4224. Python 3.12.14 и 3.11.16 включают bundled libexpat 2.8.3, а Python 3.10.21 — libexpat 2.8.2.

HTTP и webbrowser закрывают инъекции, зависания и опасные URL

Сетевые исправления охватывают несколько разных механизмов. HTTPConnection.set_tunnel() теперь отклоняет символы CR и LF в заголовках запроса туннеля. Такие управляющие символы имеют особое значение в HTTP и могут использоваться для формирования дополнительных строк заголовков.

В wsgiref.handlers запрещены управляющие символы в HTTP-статусе, что закрывает сценарий инъекции заголовков. http.cookies.Morsel.update() и js_output() получили похожую проверку; эта проблема зарегистрирована как CVE-2026-3644.

http.client теперь ограничивает двумя порогами по 100 элементов обработку chunked-трейлеров и промежуточных ответов класса 1xx. Раньше повреждённый или намеренно созданный сервер мог бесконечно отправлять такие данные и удерживать клиент в чтении даже при настроенном тайм-ауте сокета.

В webbrowser.open() появились дополнительные проверки URL. Строки с ведущим дефисом отклоняются, а отдельный обход через префикс %action тоже закрыт. На macOS webbrowser и turtledemo теперь вызывают osascript по абсолютному пути.

Три CVE показывают, насколько разными бывают уязвимости стандартной библиотеки

В официальном описании прямо названы CVE-2026-2297, CVE-2026-4224 и CVE-2026-3644, а часть других исправлений связана с ранее зарегистрированными проблемами.

CVE-2026-2297 касается SourcelessFileLoader: при открытии .pyc теперь используется io.open_code(). CVE-2026-4224 относится к падению Expat на глубоко вложенных XML-моделях. CVE-2026-3644 закрывает управляющие символы в операциях http.cookies.Morsel.

Есть и исправления без нового CVE в заголовке релиза. Например, декомпрессоры lzma, bz2 и внутренний zlib больше не должны работать через устаревший указатель на уже освобождённый буфер после ошибки выделения памяти. Для bz2.BZ2Decompressor отдельно закрыта возможность переполнения стекового буфера при повторном использовании объекта после ошибки libbz2.

Ещё один старый хвост — ftplib.ftpcp. Функция перестала по умолчанию доверять IPv4-адресу, который исходный FTP-сервер возвращает на команду PASV; этим завершается исправление CVE-2021-4189.

Python 3.10 подошёл вплотную к окончанию security-поддержки

У трёх веток одинаковый тип релиза, но разный оставшийся срок жизни. Python 3.12 получает security-исправления до октября 2028 года, Python 3.11 — до октября 2027-го, Python 3.10 — до октября 2026-го.

ВеткаНовый security-релизСостояние веткиSecurity-поддержка
Python 3.123.12.14только исправления безопасности, source-onlyдо октября 2028
Python 3.113.11.16только исправления безопасности, source-onlyдо октября 2027
Python 3.103.10.21только исправления безопасности, source-onlyдо октября 2026

У Python 3.10 временной зазор особенно небольшой: по календарю PEP 619 ветка завершает security-фазу уже через несколько месяцев после 3.10.21. Последним полноценным bugfix-релизом с бинарными установщиками для этой ветки остаётся Python 3.10.11. Для Python 3.11 таким релизом был 3.11.9, для Python 3.12 — 3.12.10.

Source-only формат тоже меняет картину распространения. Python.org публикует исходные tarball-архивы, а готовые пакеты для конкретных операционных систем и дистрибутивов зависят от их собственных циклов сборки и поставки.

Security-релизы сосредоточились на границе между Python и внешними данными

Список от 12 августа хорошо показывает общий рисунок: большая часть исправлений находится там, где стандартная библиотека разбирает данные, пришедшие извне. Архивы проверяют пути и ссылки, HTTP-код фильтрует управляющие символы и ограничивает бесконечные последовательности ответов, парсеры получают защиту от входа с чрезмерной вычислительной стоимостью, а XML-библиотеки обновляют Expat и обработку глубокой вложенности.

Три ветки продолжают жить по разным календарям: 3.12 остаётся в security-фазе до октября 2028 года, 3.11 — до октября 2027-го, а окно 3.10 заканчивается в октябре 2026-го. Следующий security-релиз для каждой из них заранее не назначен, поскольку у этих веток нет фиксированного графика таких выпусков.

При использовании материалов сайта необходимо указывать ссылку на TGLand.ru. Если вы копируете фрагменты текста в интернете, прямая гиперссылка, доступная для индексации поисковыми системами, должна быть размещена в начале материала.

Вам также может понравиться