24 марта в PyPI были загружены отравленные версии LiteLLM (1.82.7 и 1.82.8). Простой pip install litellm — и с машин сливались: SSH-ключи, креды AWS/GCP/Azure, kubeconfig, git-токены, все переменные окружения (читай — все API-ключи), история шелла, крипто-кошельки, SSL-сертификаты, секреты CI/CD, пароли от баз данных. Пост Andrej Karpathy об этом посмотрели 62 млн (!) раз, так как его ретвитнул Илон Маск.
⚪️ Что произошло
Группировка TeamPCP сначала скомпрометировала Trivy GitHub Action, через него украла PyPI-токен мейнтейнера LiteLLM и опубликовала вредоносные версии. Малварь внедрили через .pth-файл, который выполняется при старте любого Python-процесса — даже если вы не импортируете библиотеку.
LiteLLM — это ~3,4 миллиона скачиваний в день. Но страшнее другое: это транзитивная зависимость. Если ваш проект зависит от dspy, какого-нибудь MCP-плагина или LLM-оркестратора, который тянет litellm — вы тоже под ударом. Вы могли даже не знать, что litellm у вас установлен.
⚪️ Как нашли
Малварь содержала баг: .pth-файл порождал дочерние процессы, которые при инициализации снова запускали тот же .pth, создавая экспоненциальную форк-бомбу, которая роняла машину. Исследователь из FutureSearch заметил, что у него закончилась RAM после обновления MCP-плагина в Cursor. Если бы атакующие не допустили эту ошибку — обнаружение могло затянуться на дни или недели.
Отравленные версии провисели на PyPI около 3 часов. При таком объёме скачиваний — этого более чем достаточно.
⚪️ Что делать
Проверьте:
pip show litellm | grep Version. Если видите 1.82.7 или 1.82.8 — считайте машину полностью скомпрометированной. Ротируйте все секреты: SSH, облачные токены, kubeconfig, API-ключи, пароли БД. Проверьте kube-system на подозрительные поды (node-setup-*).⚪️ Выводы
Это не единичный инцидент — это третий удар в координированной кампании TeamPCP: сначала Trivy, затем Checkmarx KICS, теперь LiteLLM.
Supply chain атаки — самый страшный вектор в современном софте. Каждый pip install может тянуть отравленный пакет из глубины дерева зависимостей. Классическая инженерная мантра «не изобретай велосипед, используй библиотеку» нуждается в переосмыслении. Пинните версии, проверяйте чексуммы, минимизируйте зависимости.
@DevOpsKaz 😛
