
Что произошло
25 декабря 2022 года на PyPI появился пакет torchtriton, совпадающий по имени с зависимостью ночных сборок PyTorch. С 25 по 30 декабря пользователи, устанавливавшие PyTorch-nightly для Linux через pip, получали его вместо легитимной версии. Вредоносный бинарный файл собирал имя хоста и пользователя, переменные окружения, содержимое /etc/passwd, конфигурацию git, файлы из каталога .ssh и до тысячи файлов из домашнего каталога. Данные отправлялись через зашифрованные DNS-запросы. PyTorch узнал о проблеме 30 декабря и раскрыл её публично. По данным BleepingComputer, за неделю пакет скачали более 2300 раз; автор пакета заявил, что действовал в исследовательских целях.
Где нарушилась защита
PyTorch распространял зависимость через собственный индекс, но не зарезервировал то же имя на PyPI. Граница доверия нарушилась из-за поведения pip: при одновременном использовании нескольких индексов он выбирает пакет с наибольшей версией, и публичный реестр оказался приоритетнее доверенного. Это классическая подмена зависимости (dependency confusion), направленная на ML-исследователей и инженеров.
Последствия
- Вредоносный пакет устанавливался вместе с ночными сборками PyTorch в течение пяти дней
- По данным BleepingComputer, более 2300 загрузок за неделю
- С затронутых машин могли быть похищены SSH-ключи, переменные окружения и файлы из домашнего каталога
Реакция
PyTorch заменил зависимость на pytorch-triton, зарегистрировал заглушку на PyPI, удалил затронутые ночные сборки и через PyPI получил контроль над именем torchtriton.
Уроки для бизнеса
- Внутренние и частные имена пакетов нужно резервировать в публичных реестрах
- Экспериментальные сборки ML-фреймворков часто ставят на машины с доступом к ценным данным и ключам
- Смешивание публичных и частных индексов без явного приоритета создаёт риск подмены
Меры, которые предотвратили бы инцидент
- Единый внутренний прокси-репозиторий с явным приоритетом источников для каждого пакета
- Фиксация версий и хэшей зависимостей ML-окружений
- Запрет ночных и экспериментальных сборок в средах с доступом к производственным данным
- Мониторинг аномальных DNS-запросов с машин разработчиков и серверов обучения