# Компрометация библиотеки компьютерного зрения Ultralytics на PyPI

> Злоумышленник через уязвимость в рабочем процессе GitHub Actions встроил криптомайнер в релизы популярной AI-библиотеки Ultralytics, опубликованные на PyPI. Вредоносный код отсутствовал в исходном репозитории и попал только в собранный пакет. После первого исправления последовала вторая волна через неотозванный токен PyPI.

- Канонический HTML: [/incidents/ultralytics-pypi-cryptominer](https://ai-first.tech/incidents/ultralytics-pypi-cryptominer)
- Язык: русский
- Редакционный принцип: защитный контекст без вредоносных полезных нагрузок и инструкций обхода.

- Дата: 2024-12
- Категория: Цепочка поставки
- Затронуто: Пользователи Python-пакета ultralytics (модели YOLO) версий 8.3.41, 8.3.42, 8.3.45 и 8.3.46, включая зависимые проекты ComfyUI и SwarmUI
- Критичность: Высокий

## Что произошло

В начале декабря 2024 года на PyPI появились версии 8.3.41 и 8.3.42 библиотеки ultralytics, содержащие майнер XMRig. По данным BleepingComputer, пакет скачивали более 260 тыс. раз в сутки, а зависимые проекты ComfyUI и SwarmUI подтвердили, что свежие установки могли получить майнер. Атакующий открыл pull request с ветками, в названия которых была встроена команда, и рабочий процесс GitHub Actions выполнил её при обработке. Затем был отравлен кэш GitHub Actions, используемый при сборке. 7 декабря вышли ещё две вредоносные версии, 8.3.45 и 8.3.46, опубликованные с помощью неотозванного API-токена PyPI.

## Где нарушилась защита

Граница доверия нарушилась в конвейере сборки: данные из pull request внешнего участника, в частности имя ветки, без проверки подставлялись в команды рабочего процесса. Это позволило изменить собираемый пакет, при этом код в репозитории оставался чистым, и ревью исходников не выявило бы проблему. Неполная ротация секретов после первого инцидента дала атакующему повторный доступ к публикации.

## Последствия

- Четыре вредоносные версии популярной AI-библиотеки были опубликованы на PyPI
- На машинах пользователей запускался криптомайнер, расходующий вычислительные ресурсы
- Под угрозой оказались зависимые проекты, в том числе ComfyUI и SwarmUI

## Реакция

Вредоносные версии удалены с PyPI, Ultralytics выпустила чистые релизы. PyPI провёл расследование с использованием журналов прозрачности Sigstore и аттестаций происхождения и опубликовал разбор с рекомендациями по доверенной публикации.

## Уроки для бизнеса

- Ревью исходного кода не гарантирует чистоту собранного пакета
- После инцидента нужно отзывать все токены публикации, а не только очевидно затронутые
- Популярные AI-библиотеки — привлекательная цель из-за доступа к GPU и большой базы установок
- Аттестации происхождения пакетов помогают быстро установить, что и как было опубликовано

## Меры защиты

- Аудит рабочих процессов GitHub Actions на подстановку непроверенных данных из pull request
- Доверенная публикация через OIDC вместо долгоживущих API-токенов
- Проверка аттестаций происхождения и фиксация версий AI-библиотек
- Мониторинг аномальной загрузки CPU и GPU и исходящих соединений на серверах обучения и инференса

Связанные карточки угроз: A47, A57

## Первоисточники

- [Supply-chain attack analysis: Ultralytics](https://blog.pypi.org/posts/2024-12-11-ultralytics-attack-analysis/) — The Python Package Index Blog
- [Ultralytics AI model hijacked to infect thousands with cryptominer](https://www.bleepingcomputer.com/news/security/ultralytics-ai-model-hijacked-to-infect-thousands-with-cryptominer/) — BleepingComputer
- [Ultralytics AI Library Hacked via GitHub for Cryptomining](https://www.wiz.io/blog/ultralytics-ai-library-hacked-via-github-for-cryptomining) — Wiz
