LiteLLM 1.107.0 заразили стилером и бэкдором в атаке на цепочку поставки

Популярный Python-пакет LiteLLM был скомпрометирован в атаке на цепочку поставки: вредоносная версия 1.107.0 распространялась в wheels на PyPI и Docker-образах. В релиз встроили похититель учётных данных и бэкдор; PyPI изолировал пакет, а вредоносные образы были удалены.
Команда LiteLLM продолжает расследование и устанавливает первоначальный вектор атаки. Директор по безопасности LiteLLM Оливер Йенсен сообщил, что вредоносные действия были выполнены через три GitHub-аккаунта инженеров. Предварительно компания связывает это с похищенными OAuth-токенами GitHub CLI.
Один аккаунт использовали для запуска процесса project-releaser, другой — для его одобрения. Все задействованные токены уже отозваны. При этом LiteLLM пока не установила, как именно злоумышленники получили токены, поэтому временно оставила в GitHub-организации только одного незатронутого пользователя.
Что делает вредоносная версия
Затронуты сборки для macOS, Linux и Windows, а также архив litellm-1.107.0.tar.gz. В архиве не нашли полезной нагрузки, но его файл pyproject.toml был изменён. Исследователи SafeDep, Socket, StepSecurity и Upwind обнаружили в релизе два компонента.
Первый компонент, называющий себя privcollect, собирает облачные учётные данные, приватные ключи, данные браузеров и файлы аутентификации для инструментов ИИ-разработки. Он также собирает переменные окружения, токены и данные аккаунтов разработчиков. Отдельно вредоносный код нацелен на развёртывания LiteLLM: он пытается извлечь сохранённые учётные данные прокси и конфигурацию моделей.
Собранная информация упаковывается в сжатый TAR-архив и отправляется HTTP POST-запросом на адрес litellm[.]dev/healthcheck. Второй компонент запускает фоновый демон. Он раз в час читает файл domain.txt из репозитория GitHub и при наличии домена запрашивает путь /codepy, после чего исполняет полученный Python-код. На момент описания репозиторий возвращал ошибку 404.
Почему код выполнялся до импорта
Вредоносная логика запускается ещё до явного импорта LiteLLM. Для этого в пакет добавлен файл пути Python cook.pth с единственной строкой import cook. Такие файлы автоматически исполняются при старте интерпретатора Python, поэтому загрузка пакета может активировать стилер раньше, чем приложение обратится к библиотеке.
Похожее применение cook.pth уже фиксировалось при компрометации LiteLLM в рамках атак TeamPCP в марте. В текущем инциденте LiteLLM также обновила публичные реестры, убрав доверенные связи со своей GitHub-организацией, чтобы помешать дальнейшим вредоносным публикациям.
Что проверить пользователям
Организациям, скачавшим LiteLLM 1.107.0, рекомендуется работать из чистой среды: отозвать и заменить потенциально раскрытые секреты, включая облачные токены, ключи и данные аутентификации. Следует проверить рабочие станции и окружения, где устанавливался пакет, а также конфигурации прокси LiteLLM.
Для дальнейшего использования LiteLLM рекомендуется закрепить версию 1.106.2 по digest. Этот случай показывает, что контроль зависимостей должен включать проверку конкретных версий и образов, а после компрометации релиза приоритетом становится не только его удаление, но и ротация всех секретов, к которым он мог получить доступ.

