В CPython обнаружены уязвимости, позволяющие вызвать отказ в обслуживании и обойти защиту tar-архивов

Python

В начале июня 2026 года разработчики эталонной реализации языка Python - CPython (основная версия интерпретатора, написанная на языке C) - опубликовали информацию о двух уязвимостях средней степени опасности. Обе проблемы затрагивают пользователей, не установивших последние исправления. Первая уязвимость способна существенно замедлить работу системы при обработке специально подготовленного текста, а вторая позволяет злоумышленнику записать файлы за пределы целевой директории при распаковке tar-архива. Эти события важны для всех, кто использует Python в производственных средах, веб-приложениях, конвейерах обработки данных или системах автоматизации.

Детали уязвимостей

Начнём с первой проблемы, которой присвоен идентификатор CVE-2026-3276 (здесь и далее CVE - это уникальный номер записи об уязвимости из общедоступной базы). Она связана с функцией "unicodedata.normalize()". Этот инструмент используется для приведения строк Unicode к одной из стандартных нормализованных форм - например, для корректного сравнения символов. Исследователи обнаружили, что при передаче в функцию длинной последовательности комбинирующихся символов с чередующимися классами канонической комбинации (Canonical Combining Class) алгоритм начинает тратить чрезмерное процессорное время. Сложность обработки растёт квадратично относительно длины входных данных. Иными словами, если атакующий отправит HTTP-запрос с тщательно сфабрикованной строкой Unicode, сервер, использующий "unicodedata.normalize()", может зависнуть на десятки секунд или даже минут, исчерпав ресурсы ЦПУ. В результате легитимные запросы перестанут обрабатываться - наступит отказ в обслуживании (распространённый тип атаки, при котором злоумышленник делает сервис недоступным для обычных пользователей). Согласно шкале CVSS (стандартная система оценки критичности уязвимостей) версии 4.0, эта проблема получила 6,3 балла - средний уровень опасности. Важно отметить, что уязвимость затрагивает все формы нормализации, а не какую-то одну. К счастью, для эксплуатации требуются определённые условия: атакующему нужно уметь передавать на обработку произвольные строки Unicode, и при этом функция не должна быть ограничена по времени. Тем не менее для высоконагруженных веб-приложений это серьёзный риск.

Вторая уязвимость, CVE-2026-7774, получила 6,9 балла по той же шкале. Она связана с модулем "tarfile", который предназначен для работы с архивами формата tar. В Python существует механизм фильтрации данных при распаковке - "tarfile.data_filter", призванный предотвращать запись файлов за пределы указанного каталога назначения. Выяснилось, что этот фильтр можно обойти с помощью специально созданных элементов архива: символических ссылок (symlinks) с пустыми именами или именами, напоминающими пути к директориям. Хитрость в том, что атакующий может сначала создать символическую ссылку, которая указывает на произвольную папку в файловой системе, а затем разместить в архиве обычные файлы, которые через эту ссылку будут записаны за пределы целевого каталога. Метод обхода похож на классическую атаку "path traversal" (перемещение по каталогам), когда злоумышленник выходит за границы разрешённой директории и перезаписывает системные файлы или конфигурации. В результате при вызове "tarfile.extractall()" вредоносный архив может поместить исполняемый скрипт в автозагрузку, изменить критичные настройки суперпользователя или повредить данные соседних проектов. Единственное ограничение - права процесса, выполняющего распаковку. Если скрипт работает от имени ограниченного пользователя, ущерб будет меньше, но всё равно остаётся риск.

Обе уязвимости имеют сходство: они эксплуатируются удалённо (вектор "сеть"), для их использования не требуется аутентификация, а профили атак - различны. В первом случае злоумышленник стремится нарушить доступность сервиса, во втором - нарушить целостность данных и обойти политику безопасности. Важно подчеркнуть, что для CVE-2026-7774 требуется участие пользователя: он должен вручную распаковать вредоносный архив (например, открыть его в непроверенном проекте). Поэтому оценка UI (User Interaction) в этой уязвимости присутствует.

С практической точки зрения обе проблемы затронули версии CPython начиная с самых ранних и до 3.15.0b2 (для первой) и до 3.15.0 (для второй). Разработчики уже выпустили исправления в виде обновлённых сборок, поэтому всем администраторам и разработчикам настоятельно рекомендуется обновить интерпретатор до актуальной версии. Если немедленное обновление невозможно, можно применить временные меры: для защиты от CVE-2026-3276 - ограничить размер входных строк Unicode в функциях нормализации, установить таймаут на выполнение "unicodedata.normalize()" или вовсе отказаться от её использования, если это позволяет архитектура. Для CVE-2026-7774 стоит избегать распаковки tar-архивов из непроверенных источников, а если автоматическая обработка необходима - использовать сторонние библиотеки с более строгими фильтрами или проверять содержимое архива до вызова "extractall()".

Подводя итог, отметим, что эти инциденты напоминают: даже в зрелых и широко используемых проектах могут скрываться неочевидные уязвимости. Команда CPython оперативно отреагировала и выпустила патчи. Специалистам по информационной безопасности стоит включить обновление Python в список первоочередных задач, особенно если системы обрабатывают пользовательский ввод или загружают архивы из внешних каналов. Регулярное обновление зависимостей остаётся одним из самых эффективных способов снизить поверхность атаки.

Ссылки

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