Hugging Face Transformers копирует Python-код из репозитория модели до проверки доверия

Hugging Face

В библиотеке Hugging Face Transformers, предназначенной для обучения и запуска моделей машинного обучения, обнаружена уязвимость CVE-2026-80047. Она позволяет внешнему источнику модели записать на компьютер жертвы Python-файл до того, как пользователь одобрит выполнение удалённого кода. Проблема затрагивает версии библиотеки с 4.49.0 по 5.8.1.

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

Библиотека Transformers служит основой для обучения и запуска многих нейросетевых моделей. Специалисты применяют её для обработки текста, изображений, звука и видео. Модели обычно хранятся в открытых репозиториях. Вместе с параметрами модели такие репозитории содержат код, который позволяет настраивать поведение нейросети. Разработчики могут добавлять собственные логические блоки, например для генерации текста, но такой подход создаёт дополнительные риски для пользователей.

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

В функции, отвечающей за пользовательскую логику генерации, порядок нарушен. Библиотека сначала скачивает файл из репозитория модели и помещает его в локальный кэш. Только после этого она запрашивает согласие. Если пользователь отказывается запускать удалённый код, выполнение действительно не происходит. Однако скачанный файл остаётся в кэше и не удаляется после завершения попытки загрузки.

Причина ошибки кроется в безусловной операции копирования. Она выполняется до оценки доверия, поэтому откатить её нельзя. Файл попадает на диск независимо от решения пользователя. Такое поведение противоречит защитному контракту, который соблюдают другие динамические загрузчики Transformers. Они не записывают содержимое удалённого модуля до получения явного разрешения.

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

Запись файла без его исполнения на первый взгляд не опасна. Угроза возникает позже, при повторном использовании кэша. В общих средах разработки, на исследовательских серверах и в автоматизированных конвейерах каталог кэша обычно остаётся единым для многих задач. Ранее записанный вредоносный модуль может позднее быть прочитан доверенным процессом. Если процесс рассчитывает найти в этом месте легитимный модуль, он может выполнить подменённый файл. Такой сценарий приводит к выполнению непроверенного кода с правами этого процесса.

На момент выхода уведомления CERT/CC официальное исправление отсутствует. Производитель библиотеки не выпустил патч и не опубликовал развёрнутых рекомендаций. Пока пользователям лучше избегать использования функции пользовательской генерации с непроверенными моделями. Если модель загружается из незнакомого источника, запрос на доверие не следует подтверждать, а саму попытку загрузки лучше прекратить.

Помимо этого, необходимо регулярно проверять содержимое кэша модулей Hugging Face. Неожиданные Python-файлы, появившиеся после отклонённых загрузок, нужно удалять. Системным администраторам стоит настроить наблюдение за кэш-каталогом и отслеживать новые файлы. Особенно это важно в инфраструктурах, где кэш используется множеством проектов и пользователей.

Разработчикам, встраивающим Transformers в свои продукты, нужно изменить порядок проверок. Запрос на доверие к удалённому коду должен выводиться до скачивания и записи любых модулей. После положительного ответа можно сохранять файл, но не раньше. Такое изменение закрыло бы главную причину уязвимости - безусловную запись файлов до согласия пользователя.

Эта находка примечательна тем, что показывает важность чёткой последовательности действий в механизмах загрузки кода. Наличие запроса о доверии ещё не гарантирует безопасность. Если файл попадает на диск до получения разрешения, защита фактически не работает. Для экосистемы Hugging Face это повод пересмотреть внутренние соглашения о порядке операций, чтобы подобные расхождения не возникали в других компонентах. Когда разработчики выпустят обновление, пользователям нужно будет установить его незамедлительно, особенно в средах с общим кэшем.

Ссылки

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