История началась 27 мая, когда мастер-ключ попал в публичный репозиторий LiteLLM-Labs/lite-harness и так и не был отозван. 10 октября атакующий использовал его, чтобы получить OAuth-токен владельца организации на GitHub, а 21 октября обошёл защиту веток и перенаправил релизы на похожий репозиторий «Berri-AI/litellm».
Что было опубликовано
- PyPI: litellm 1.107.0 — опубликован около 11:39 UTC 21 октября, помещён в карантин в 13:23 UTC.
- Docker Hub и GHCR: теги
v1.107.0,latest,main-latest,main-stableс 11:46 UTC. Позже их удалили или перенаправили.
Нагрузка крадёт учётные данные облаков, SSH- и Git-ключи, данные браузеров и токены реестров пакетов, а на Unix-системах ставит бэкдор, который раз в час подтягивает новый код. Данные уходят на litellm[.]dev. Инцидент раскрыт 24 октября; CVE не присвоен.
Что делать
- Проверить lock-файлы, образы и кэши на наличие 1.107.0 и указанных тегов, скачанных 21 октября.
- Если версия ставилась — считать хост скомпрометированным: удалить не только пакет, но и компоненты автозапуска.
- Ротировать все секреты, доступные с этого хоста: облачные ключи, SSH, токены GitHub и реестров.
- На будущее — закреплять версии и digest образов, а не тянуть
latest.
It began on May 27, when a master key was committed to the public LiteLLM-Labs/lite-harness repo and never revoked. On Oct 10 the attacker used it to obtain an org-owner GitHub OAuth token, and on Oct 21 bypassed branch protection and pointed releases at a lookalike repo, “Berri-AI/litellm”.
What was published
- PyPI: litellm 1.107.0 — published around 11:39 UTC on Oct 21, quarantined at 13:23 UTC.
- Docker Hub and GHCR: tags
v1.107.0,latest,main-latest,main-stablefrom 11:46 UTC. These were later removed or repointed.
The payload steals cloud credentials, SSH and Git keys, browser data and package-registry tokens, and installs a Unix backdoor that fetches new code hourly. Data is sent to litellm[.]dev. The incident was disclosed on Oct 24; no CVE was assigned.
What to do
- Check lock files, images and caches for 1.107.0 and the listed tags pulled on Oct 21.
- If it was installed, treat the host as compromised: remove not just the package but also the startup components.
- Rotate every secret reachable from that host: cloud keys, SSH, GitHub and registry tokens.
- Going forward, pin versions and image digests instead of pulling
latest.