Уязвимость в CPython позволяет обойти фильтр tarfile и изменить владельца файлов

Python

Разработчики CPython выпустили бюллетень безопасности, в котором сообщили об уязвимости CVE-2026-4360, затрагивающей все версии интерпретатора до 3.15.0. Проблема получила низкий уровень опасности по шкале CVSS (2.0 балла), однако в определённых сценариях её эксплуатация может привести к нарушению политики безопасности и нежелательному изменению идентификаторов пользователя и группы (uid/gid) у распакованных файлов.

Уязвимость CVE-2026-4360

Суть уязвимости заключается в том, что при извлечении жёстких ссылок (hardlinks) из tar-архива функция "Tarfile.extract()" некорректно передаёт параметр "filter". Пользователь может явно указать "filter='data'", чтобы ограничить права доступа и владельцев распакованных объектов, но из-за ошибки этот параметр частично игнорируется при работе с жёсткими ссылками. В результате злоумышленник, создавший специально сформированный tar-архив, может добиться записи файлов с неожиданными uid и gid - например, с правами суперпользователя или владельца, отличного от того, который предполагает безопасная политика.

Поясним на практике: если администратор или автоматизированная система распаковывает поступивший из внешнего источника архив с надеждой, что фильтр "'data'" обнулит uid/gid и установит безопасные права, - в случае с hardlinks эта защита не сработает. Атакующий может включить в архив жёсткие ссылки на системные файлы или точки монтирования, и при распаковке они получат uid/gid, указанные внутри архива, а не те, что заданы фильтром. Потенциально это может привести к повышению привилегий для локального пользователя, если распаковка происходит в контексте другого пользователя или скрипта с ограниченными правами, а итоговые файлы оказываются с более высокими привилегиями.

В бюллетене Python от 30 июня уточняется, что уязвимость затрагивает все версии CPython, начиная с самых ранних и до 3.14.x включительно. Исправление добавлено в версии 3.15.0. Разработчики опубликовали соответствующий pull request на GitHub, а также обновили официальную документацию модуля tarfile, рекомендовав использовать "extractall()" с корректной передачей фильтра при массовом извлечении.

Несмотря на низкий балл CVSS, проблему не стоит недооценивать. Она особенно актуальна для систем, которые обрабатывают входящие tar-архивы от ненадёжных источников: веб-приложения, принимающие пользовательские файлы, сервисы обмена данными, конвейеры обработки артефактов в CI/CD. В таких сценариях даже единичное изменение владельца файла может нарушить работу сервиса или открыть путь для дальнейшей атаки. Например, если скрипт в контейнере распаковывает архив с надеждой на безопасные uid/gid, а получает файл с uid 0 (root), это может позволить злоумышленнику закрепиться внутри контейнера или повлиять на хост-систему через монтирование томов.

Специалисты по безопасности рекомендуют действовать незамедлительно. Основная мера защиты - обновить CPython до версии 3.15.0 или установить соответствующий патч из официального репозитория. Если обновление невозможно, следует временно отказаться от использования "Tarfile.extract()" с недостаточно проверенными архивами в пользу ручной обработки через потоковые методы, такие как "TarFile.extractfile()", или предварительно проверять содержимое архива на наличие жёстких ссылок. Дополнительно стоит ограничить контекст выполнения скриптов, распаковывающих архивы - например, запускать их в изолированном окружении без прав на запись в критичные директории и с автоматической проверкой прав доступа после распаковки.

Разработчики CPython уже закрыли уязвимость в основной ветке, работа над дополнительной документацией и уточнением поведения фильтра для hardlinks продолжается. Пользователям CPython из корпоративного сектора, особенно тем, кто использует библиотеку в инструментах резервного копирования или обновлениях через tar-архивы, следует обратить внимание на бюллетень безопасности и включить установку патча в плановые обновления. В долгосрочной перспективе инцидент напоминает о важности полной верификации всех параметров фильтрации в функциях стандартной библиотеки, особенно при работе с жёсткими ссылками - механизмом, который в tar может вести себя неочевидно для разработчика.

Ссылки

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