CPython позволяет обойти фильтр tarfile и принимает сертификаты скомпрометированного удостоверяющего центра

Python

Обход фильтра в модуле tarfile и приём сертификатов скомпрометированного удостоверяющего центра в модуле ssl входят в число уязвимостей CPython, для которых вышли внеочередные выпуски. Проблемы затрагивают стандартную библиотеку, которая ставится вместе с интерпретатором Python. Модуль tarfile распаковывает tar-архивы, а его фильтр должен удерживать файлы внутри каталога назначения; обход позволяет записать их за пределами каталога с правами распаковывающего процесса. Затронуты ветки 3.11-3.15 и альфа-сборки 3.16.0a1.

Обход tarfile, отзыв сертификатов и обновление Expat

Python Software Foundation подтвердила уязвимости в записях CVE: для каждой указан диапазон затронутых версий и ссылка на исправление. Оценки приведены по шкале CVSS, общей системе оценки уязвимостей, и различаются от низкой до критической. Условия атаки тоже разные, поэтому дальше проблемы разобраны по компонентам.

Обход фильтра tarfile с записью вне каталога

Фильтр tar в модуле tarfile обходится специально собранными элементами архива. Ссылки с пустыми или похожими на каталог именами перенаправляют следующие файлы архива за пределы каталога распаковки. Запись идёт с правами процесса, который распаковывает архив, поэтому дополнительные права не нужны. Оценка 6.9 из 10, уровень Medium: атака локальная, учётные данные и участие пользователя не требуются, страдает целостность файлов. Похожая проблема раньше затрагивала другой фильтр того же модуля, data.

Скомпрометированные ключи eMudhra в модуле ssl

Вторая проблема связана с промежуточными ключами удостоверяющего центра eMudhra, которые признали скомпрометированными. Промежуточный центр выпускает сертификаты от имени корневого, поэтому украденный ключ позволяет выпускать сертификаты, выглядящие доверенными. Затронутые версии CPython отзыв не проверяли и принимали такие цепочки.

Оценка 9.4 из 10, уровень Critical. Атака идёт по сети, учётные данные не нужны, а от пользователя требуется только установить соединение. Исправление добавляет в модуль ssl список запрещённых сертификатов, который действует независимо от настроек проверки. Список сверяет открытые ключи, поэтому закрывает и кросс-подписанные сертификаты с тем же ключом.

Разработчики называют меру крайней. Снимать доверие должны корневые хранилища платформ, а встроенный список прикрывает промежуток, пока обновление не дошло до операционной системы, контейнерного образа или хранилища внутри Python-пакетов.

Expat, mimetypes и остальные исправления

Библиотека Expat для разбора XML входит в состав CPython, и в выпусках 3.13.18, 3.12.16 и 3.11.18 её обновили до версии 2.9.0. Первая из закрытых проблем библиотеки связана с чтением за границей выделенного буфера: указатель конца буфера сдвигается на переданную длину без проверки размера. Оценка относится к самой библиотеке и составляет 8.3 из 10, уровень High. Атака идёт по сети, но требует, чтобы приложение уже подготовило буфер разбора. Утечка раскрывает соседнюю память процесса, включая указатели, которые помогают обойти рандомизацию адресного пространства.

Вторая проблема Expat связана с переполнением целого при расчёте размера выделения на 32-битных платформах. Затронуты версии библиотеки с 2.7.2 по 2.8.5. Оценка 8.2 из 10, уровень High. Вредоносный XML приводит к переполнению буфера в куче (области динамической памяти), повреждению памяти или отказу в обслуживании. Учётные данные и участие пользователя не требуются.

Ещё одна проблема касается модуля mimetypes на Windows. Список путей по умолчанию, принятый в Linux и macOS, применялся и на Windows, где эти каталоги доступны на запись другим пользователям. Подложенный файл вызывал ошибку памяти при запуске интерпретатора или подменял определение типа файла по расширению. Оценка 2.3 из 10, уровень Low. В выпусках 3.13.18, 3.12.16 и 3.11.18 такие пути на Windows по умолчанию не читаются.

Кроме того, модуль http.cookiejar теперь игнорирует cookie с отрицательным значением версии, которые раньше принимались без сверки домена с хостом запроса. Разработчики исправили редкий случай переупаковки заголовков в почтовых сообщениях. В ветках 3.13 и 3.12 устранили состояние гонки при очистке временного каталога, созданного средствами tempfile.

Исправления вышли 26 октября 2026 года в выпусках 3.15.2, 3.14.10, 3.13.18, 3.12.16 и 3.11.18. Часть правок, включая Expat и mimetypes, уже вошла в 3.15.1 и 3.14.9, поэтому в этих ветках она появилась раньше. Для 3.15.2 и 3.14.10 вендор подготовил бинарные установщики, остальные три выпуска содержат только исходный код. Отдельного выпуска для ветки 3.16 в объявлении нет, хотя записи CVE относят альфа-сборки 3.16.0a1 к затронутым.

Сведений об эксплуатации этих уязвимостей в реальных атаках нет ни в объявлении о выпуске, ни в записях CVE. Детали при этом публичны: записи CVE опубликованы 22 и 24 октября, а в бюллетенях безопасности Python есть ссылки на запросы с исправлениями. Публикация описания означает доступность техники, но не подтверждает, что уязвимость уже используют.

Для закрытия проблем достаточно обновиться до выпуска своей ветки. Записи CVE перечисляют затронутыми все версии ниже 3.11.18, 3.12.16, 3.13.18, 3.14.10 и 3.15.2. История с ключами eMudhra требует отдельного действия. Встроенный список служит временной мерой, поэтому корневые хранилища сертификатов на хостах, в контейнерных образах и в поставляемых с Python-пакетами хранилищах нужно обновлять штатным способом.

Наибольшее значение имеет проблема с сертификатами: она срабатывает по сети, не требует учётных данных и получает самую высокую оценку. Обход tarfile важен для тех, кто распаковывает архивы из внешних источников. Проблемы Expat затрагивают сервисы, разбирающие XML от сторонних отправителей.

Ссылки

Комментарии: 0