21 октября 2026 года на репозиторий PyPI была загружена версия библиотеки LiteLLM 1.107.0, содержащая стилер учетных данных, а соответствующие Docker-образы также оказались скомпрометированы. LiteLLM является одним из самых популярных open-source шлюзов для больших языковых моделей (LLM), который хранит ключи доступа ко всем используемым вендорам. Для разработчиков этой платформы это второй инцидент за год: в марте 2026 года были скомпрометированы версии 1.82.7 и 1.82.8. Расследование ситуации продолжается на основе отчетов от BerriAI, StepSecurity, Wiz и Socket, опубликованных в тот же день. Хотя компания не уточняет детали своего внутреннего инцидента, разбор ситуации с LiteLLM остается важным примером для всех пользователей шлюзов.
Атака стала возможной благодаря использованию пяти шагов злоумышленником. За день до инцидента двум инженерам временно выдали расширенные права на публикацию для выпуска исправлений. Атакующий обладал тремя наборами OAuth-токенов GitHub CLI: одним для запуска рабочих процессов (workflow), вторым для прохождения этапа ручного одобрения и третьим для стирания логов о запусках. Защита веток была успешно обойдена: первая попытка правки была отклонена, но через пять секунд токен владельца организации отключил защиту и принудительно применил изменения. Сборка артефактов проводилась не из официального репозитория BerriAI/litellm, а из двойника Berri-AI/litellm, отличающегося одним дефисом. Несмотря на это, конвейер подписал и опубликовал артефакты как легитимный релиз, так как подпись подтверждает происхождение, но не безопасность кода.
Вредоносный код внедрялся через три файла: cook.pth, cook.py и sitecustomize.py, которые попадают в site-packages при установке пакета. Эти файлы выполняются автоматически при старте Python-интерпретатора, что позволяло злоумышленнику запускать вредоносный код без необходимости импортировать саму библиотеку LiteLLM. Архив с украденными данными шифровался и отправлялся на домен litellm.dev, зарегистрированный за восемь дней до атаки. На Linux и macOS запускался демон, который читал тайник в GitHub и выполнял код с указанного хоста, тогда как на Windows стилер работал без запуска демон-загрузчика. Вредоносный код собирал пароли, ключи SSH и GPG, учетные данные облачных сервисов, секреты CI/CD и конфигурации более чем 20 AI-инструментов. В случае наличия DATABASE_URL злоумышленник мог получить доступ к базе прокси LiteLLM целиком, включая ключи вендоров и master key.
Ущерб от инцидента был значительным из-за использования плавающих тегов. Зараженный образ находился под тегом latest на Docker Hub около двух с половиной часов, что автоматически привело к его развертыванию на многих системах. Официальный тег v1.107.0 в исходном репозитории остался чистым, так как артефакты были собраны из чужого кода. Эксперты рекомендуют пользователям немедленно удалить зараженные версии, пересобрать окружения с нуля, а не просто удалять файлы, и сменить все учетные данные, до которых мог дотянуться скомпрометированный хост. Ключевые выводы расследования указывают на то, что подпись артефактов не гарантирует их безопасность, если захвачен сам релизный конвейер, а ручное одобрение неэффективно, если токены для одобрения украдены. Также подчеркивается опасность временного расширения прав доступа и хранения секретов в логах с телами ответов.