Утечка ключа LiteLLM привела к компрометации конвейера релизов
Злоумышленник получил доступ к токену GitHub с правами владельца организации, изменил источник сборки и выпустил вредоносную версию пакета LiteLLM в PyPI. Ключ оказался в публичном репозитории ещё в мае, но его не отозвали.

LiteLLM сообщила о компрометации своей цепочки поставки: злоумышленник воспользовался мастер-ключом платформы LiteLLM Agent Platform, случайно опубликованным в GitHub, чтобы получить доступ к внутренним системам и выпустить вредоносную версию Python-пакета. В PyPI 21 октября появилась версия LiteLLM 1.107.0; позднее её поместили в карантин.
По данным компании, конфигурационный файл с мастер-ключом попал в публичный репозиторий LiteLLM-Labs/lite-harness 27 мая 2026 года. Коммит быстро переписали, а раскрытые ключи определили как подлежащие отзыву, однако мастер-ключ так и не был аннулирован.
10 октября атакующий применил этот ключ для доступа к Agent Platform и извлёк OAuth-токен GitHub CLI. Он использовался облачными агентами для создания pull request в репозиториях GitHub и не имел ограниченной области действия. Токен был связан с аккаунтом владельца организации, поэтому, как утверждает LiteLLM, давал доступ уровня владельца ко всем её репозиториям на GitHub.
После этого злоумышленник создавал и удалял временные ветки во внутренних репозиториях, запуская workflow для сбора OAuth-токенов GitHub двух инженеров с правами мейнтейнеров. Исследователи Socket, изучившие активность репозиториев, обнаружили два вредоносных коммита с workflow .github/workflows/cache.yml. Ветки существовали лишь несколько минут, из-за чего следы этой активности почти не видны в обычной истории репозитория.
По оценке Socket, второй workflow собирал ключи и токены ряда сервисов, включая Anthropic, OpenAI, AWS Bedrock, Tavily и GitGuardian, а также сведения для доступа к PostgreSQL и Redis. Собранные данные отправлялись на два адреса webhook.site.
21 октября атакующий обошёл защиту веток и изменил конвейер релизов: источником сборки стал похожий на официальный репозиторий Berri-AI/litellm вместо BerriAI/litellm. Затем были опубликованы пакет версии 1.107.0 в PyPI, а также образы в Docker Hub и GitHub Container Registry. О произошедшем сообщил исследователь Upwind Лидор Махлуф; после этого PyPI изолировал версию, а теги Docker Hub, включая latest, были удалены либо переназначены на проверенные образы.
LiteLLM объяснила, что обычно публикация релиза требует запуска уполномоченным инженером и одобрения специальной учётной записью, привязанной к физическому устройству в офисе. Ранее на неделе это ограничение временно смягчили для ускорения выпуска исправлений: запуск и одобрение релиза могли выполнить любые два инженера. Компания начала отзывать токены, связанные со всеми внутренними системами и внешними платформами.