МАСТЕР-КЛЮЧ В ОТКРЫТОМ GITHUB. Как LiteLLM подставил 49К клиентов PayPal.

Ключ засветили в мае и не отозвали!!!. В октябре через него подменили пакет на PyPI, и за два часа его скачали около 49 000 раз.

МАСТЕР-КЛЮЧ В ОТКРЫТОМ GITHUB. Как LiteLLM подставил 49К клиентов PayPal.

Есть ошибки, которые стоят дорого не сразу. Один коммит с секретом в публичном репозитории, удалили, выдохнули, забыли. А через пять месяцев этот же ключ открывает дверь ко всей цепочке релизов популярного ИИ-шлюза. Разбираю, что случилось с LiteLLM, по зарубежным источникам.

Для тех, кто в танке

LiteLLM это популярная библиотека и прокси, через которые разработчики подключают свои приложения к разным ИИ-моделям: OpenAI, Anthropic и другим. Один интерфейс, много моделей. Именно поэтому рядом с LiteLLM почти всегда лежат самые ценные ключи компании: API-ключи к моделям и доступы к облакам.

PyPI это главный каталог пакетов для Python. Команда pip install litellm берёт код оттуда. Если в PyPI лежит отравленная версия, её поставит себе каждый, кто обновился в неудачный момент.

Хронология

ДатаЧто произошло27 маяМастер-ключ попал в публичный репозиторий LiteLLM-Labs/lite-harness. Коммит потом удалили, ключ не отозвали10 октябряАтакующий использовал ключ, зашёл в LiteLLM Agent Platform и украл OAuth-токен GitHub CLIДальшеЧерез CI собрал токены других мейнтейнеров21 октябряВредоносная версия litellm==1.107.0 висела на PyPI примерно 2 часа, с 11:39 до 13:23 UTC (14:39 до 16:23 по Москве). Заражены и Docker-образы v1.107.0 и latest

Токен GitHub CLI был выдан уже после прохождения 2FA и давал права владельца на все репозитории. То есть двухфакторка тут ничего не спасла: атакующему не надо было входить, он взял готовую сессию.

Релиз выглядел так, будто его выпустили настоящие инженеры проекта. Никакого подозрительного аккаунта, никакой опечатки в названии пакета. Обычное обновление.

Что делал вредонос

По данным Microsoft Security, пакет воровал всё, до чего мог дотянуться:

  • закреплялся через хуки запуска Python (файлы вроде cook.pth), то есть срабатывал при старте любого Python-процесса, а не только при импорте LiteLLM;
  • забирал сохранённые пароли из браузеров;
  • искал ключи и доступы AWS, GCP и Azure;
  • собирал API-ключи OpenAI и Anthropic;
  • оставлял удалённый доступ к машине (RAT, выполнение команд).

По оценке Wiz, на которую ссылается The Register, за время жизни пакета его скачали около 49 000 раз. Важно: это скачивания, а не «49 тысяч клиентов». Часть из них роботы и CI-сборки. Но именно CI-сборки обычно и держат в переменных окружения самые жирные секреты.

Приватные корпоративные (Enterprise) инсталляции LiteLLM, по заявлению проекта, не пострадали.

Источники рядом

ИсточникЧто подтверждаетMicrosoft Security Blog, 23.10.2026Механика заражения, что крал пакет, хуки запуска PythonThe Register, 26.10.2026Утечка ключа в мае, цепочка через GitHub-токен, ~49 000 скачиваний по данным WizПост об инциденте от LiteLLMВерсия 1.107.0, окно публикации, Enterprise не затронут

Последствия

Главная проблема не в двух часах. Главная проблема в том, что украденные ключи живут дольше, чем вредоносная версия. Пакет давно удалён, а ключи OpenAI, AWS и браузерные сессии, которые он унёс, могут всё ещё работать у тех, кто их не сменил.

Что обычно идёт следом за такими кражами:

  • счета за ИИ-модели, которые «внезапно» выросли, потому что кто-то крутит запросы на ваших ключах;
  • майнинг и спам-инфраструктура в облаке за ваш счёт;
  • вход в другие системы по паролям из браузера;
  • новые атаки на цепочку поставок: украденные токены разработчиков используют, чтобы отравить уже следующие пакеты.

Подтверждённых публичных жертв по именам на момент написания нет. Это не значит, что их нет. Это значит, что компании обычно молчат.

Урок, который все знают и все игнорируют

Удалить коммит не значит убрать секрет. Публичный репозиторий копируют боты, форки и архивы за минуты. Если ключ хоть раз был в открытом доступе, он скомпрометирован. Отзывать его нужно сразу, а не «когда-нибудь».

История LiteLLM показывает, сколько стоит эта лень: от одного забытого ключа в мае до заражённого релиза популярной библиотеки в октябре.

Что делать прямо сейчас

  1. Проверьте, ставилась ли у вас litellm==1.107.0 или Docker-образ v1.107.0 / latest 21 октября. Смотрите lock-файлы, логи CI, кэш образов.
  2. Если ставилась, считайте все секреты на этой машине украденными. Не «возможно», а украденными.
  3. Перевыпустите ключи OpenAI, Anthropic, AWS, GCP, Azure, токены GitHub, пароли из браузера.
  4. Ищите в site-packages лишние .pth файлы, переустановите окружение с нуля.
  5. Закрепите версии зависимостей и не тяните latest в прод.
  6. Включите сканирование секретов в своих репозиториях и правило: утёк ключ, отзываем в тот же час.

Итог

Хакеры не взламывали LiteLLM хитрым эксплойтом. Они просто подобрали ключ, который полгода лежал на виду. Сколько таких ключей сейчас висит в истории ваших репозиториев?

11