LiteLLM: вредоносный релиз через украденные токены
21 октября атака затронула LiteLLM — шлюз для доступа к сотням языковых моделей через единый API. Компания сообщила о компрометации релизного конвейера. Вредоносная версия 1.107.0 появилась на PyPI и оставалась доступной в течение двух часов в виде Docker-образов. Вредоносное ПО похищало учётные данные и загружало инструменты удалённого выполнения кода. Предыдущие версии безопасны, корпоративные клиенты с приватным реестром не пострадали, а пользователям рекомендуют вернуться к версии 1.106.2.
Цепочку атаки LiteLLM описала отдельно. У злоумышленника оказались три набора учётных данных разработчиков GitHub CLI. Один из токенов принадлежал владельцу организации, и с его помощью атакующий отключил защиту веток и внёс изменения в рабочий процесс релиза. Затем он запустил сборку из репозитория-двойника Berri-AI/litellm вместо настоящего BerriAI/litellm, и опубликованные артефакты были подписаны как легитимные.
Токены, по версии LiteLLM, нашлись в логах внутреннего развёртывания самой компании. Оно было открыто в интернет, и в нём появился неизвестный пользователь с безобидным именем. Как атакующий туда попал, пока не подтверждено: подозрение падает на недавно закрытую уязвимость. Попадание токенов в логи компания связывает с поведением Claude Code, который в определённых ситуациях помещает токен GitHub CLI в тело ответа. Если тела ответов логируются, токены оказываются в журналах.
Railway: расшифрованные переменные окружения
Облачная платформа Railway, на которой разработчики развёртывают приложения, пострадала с 20 по 22 октября. Первое сообщение об инциденте компания опубликовала 21 октября, а предварительный отчёт раскрыл подробности. По оценке Railway, потенциально затронуты не более 1,85% рабочих пространств — около 100 000.
Атака началась с попытки повысить привилегии в инфраструктуре сборок, и Railway остановила сборки. К утру 21 октября выяснилось, что злоумышленник вытащил секреты в зашифрованном виде. Позже он получил доступ к среде CI и расшифровал часть переменных окружения. Определить, какие именно ключи затронуты, невозможно: они защищены двойным шифрованием.
Поэтому Railway обратилась к GitHub, GitLab, Anthropic, OpenAI, OpenRouter, Stripe и другим сервисам с просьбой отозвать потенциально скомпрометированные ключи. Часть провайдеров получила вообще все ключи с платформы, так что уведомления об отзыве приходили и тем, чьи данные не пострадали.
Работающие сервисы клиентов оставались в сети, но новые сборки приостановили, а панель управления и API были временно недоступны. Аккаунты пользователей атакующий не взломал. Railway не исключает, что он мог увидеть исходный код, и обещает уточнить это в итоговом отчёте.
Судя по поведению злоумышленника, он искал рабочие пространства с большим числом переменных и ИИ-ключей, чтобы использовать их для дистилляции моделей — обучения одной модели на ответах другой. Railway рекомендует всем, кто зарегистрировался до 21 октября, заново выпустить чувствительные переменные, закрыть публичный доступ к базам данных и проверить журналы аудита GitHub. Сборки при этом компания перевела на новое поколение инфраструктуры с изолированными средами.
Общая цель атак
В трёх случаях злоумышленники действовали разными способами: через утёкшие внутренние ключи, через поддельный релиз и через повышение привилегий в сборках. Объединяет их мишень — платформы и инструменты, где хранятся API-ключи и токены доступа к ИИ-сервисам.
Для Zeabur последствия обернулись решением о закрытии бизнеса, для LiteLLM — отзывом заражённых релизов, а для Railway — временной остановкой сборок и массовым отзывом ключей. Расследования Railway и LiteLLM продолжаются, итоговые отчёты обеих компаний пока не опубликованы.
Мнение ИИ
Анализ исторических паттернов показывает: LiteLLM попадает под удар не впервые. Ещё в марте 2026 года компания связала публикацию вредоносных версий 1.82.7 и 1.82.8 с непривязанной к версии установкой сканера Trivy в конвейере сборки. Тогда оружием стал инструмент защиты, теперь — журналы собственного развёртывания. Дверь меняется, коридор остаётся прежним.
Шлюз к сотням моделей работает как связка ключей на одном кольце: чем шире охват, тем дороже одна ошибка. Про яйца в одной корзине известно давно, но эта корзина подключена к интернету. Что надёжнее: удобный единый шлюз или десяток неудобных ключей с раздельными правами?