Bollywood HungamaRamayana producer Namit Malhotra calls Los Angeles premiere his “Oscar moment” ahead of November 5 releaseEl ComercioLa hoja de ruta de Estados Unidos para Venezuela: reformas, vacancia de Delcy Rodríguez y eleccionesPunchBREAKING: NELFUND introduces token system to stop double payment of school feesThe Jerusalem PostQatari mediators present peace deal to Iran in mediation effort, official saysInquirer EntertainmentDonny Pangilinan felt ‘awkward’ over Showtime Baby Doll Juby’s dream about himDaily MaverickWildlife is not livestock — Aucamp’s dangerous plan to turn conservation into agricultureInquirerMimaropa drug bust in Palawan yields ₱51,884 worth of ‘shabu’ZDF heuteEntdecken Sie das ZDF-NachrichtenstudioSky TG24Meteo, freddo e maltempo in Italia nel weekend di Halloween e Ognissanti. Le previsioniVariety‘One Cut of the Dead’ Director Ueda Shinichiro on Turning a Microdrama Into Tokyo Feature ‘Earthlings in Love’NumeramaÀ mi chemin entre le VTC et le longtail, le vélo électrique Nakamura Crosscity+ perd 500 €DeadlineRussell Brand Forcefully Denies Charges As He Gives Evidence During Rape Trial
The Daily Newsstand · Free, Always
Wednesday, October 28, 2026

В релизе LiteLLM 1.107.0 обнаружены инфостилер и бэкдор

Translate

21 октября 2026 года релизный конвейер LiteLLM был скомпрометирован. В течение нескольких часов в PyPI, Docker Hub и GitHub Container Registry (GHCR) распространялась версия 1.107.0 с инфостилером и бэкдором. Проект удалил вредоносные артефакты и опубликовал разбор атаки. Об инциденте также писал «Хакер», а на Хабре уже выходили материалы с техническим разбором атаки и механизма запуска вредоноса. Наш материал — короткий обзор для операторов и пользователей ИИ-шлюзов: что произошло, чем это грозит и какие действия нужно предпринять, если 1.107.0 запускалась. Ниже основные факты, возможные последствия для пользователей ИИ-шлюзов и короткие рекомендации.

Что произошло

LiteLLM — это открытый Python SDK и ИИ-шлюз, через который приложения обращаются к моделям разных поставщиков по единому API. Это один из самых популярных ИИ-шлюзов: по данным проекта на начало октября, LiteLLM скачивают около 90 млн раз в месяц, а на GitHub у него более 60 тыс. звезд.

В PyPI зараженный пакет провисел с 14:39 до 16:23 МСК. В Docker Hub теги v1.107.0, latest, main-latest и main-stable указывали на зараженный образ с 14:46 до 17:20, в GHCR с 14:46 до 16:51. Затронуты все семь wheel-пакетов, а также образы litellm, litellm-database и litellm-non_root в GHCR.

Атакующие не меняли исходный код LiteLLM в официальном репозитории GitHub: тег v1.107.0 там чистый. Они вмешались в процесс публикации и перенаправили сборку в похожий репозиторий Berri-AI/litellm, который отличался от настоящего BerriAI/litellm одним дефисом. В результате вредоносный пакет собрали и подписали, не трогая официальный код. То есть чистый код на GitHub еще не гарантирует чистый пакет.

При этом приватный реестр LiteLLM не затронут: по данным проекта, enterprise-клиенты, которые берут пакеты оттуда, не пострадали.

Это не первый инцидент

24 марта 2026 года в PyPI уже публиковались вредоносные версии 1.82.7 и 1.82.8. В 1.82.7 код добавили в proxy_server.py, и он срабатывал при импорте. В 1.82.8 появился файл litellm_init.pth, который запускал полезную нагрузку при каждом старте Python. По разным оценкам, пакеты были доступны от 40 минут до 2,5 часов: LiteLLM говорил примерно о 40 минутах, PyPI сообщал о 2 часах 32 минутах.

Полезная нагрузка собирала SSH-ключи, облачные учетные данные, токены Kubernetes, секреты CI/CD и .env. Данные шифровались и уходили на models.litellm.cloud. Отдельно вредонос пытался закрепиться в кластерах Kubernetes через привилегированные поды. Последней чистой версией тогда считалась 1.82.6, чистая 1.83.0 вышла 30 марта 2026 года. Инцидент связывают с группировкой TeamPCP, а входной точкой считают скомпрометированный GitHub Action aquasecurity/trivy-action; эта связь не подтверждена полностью.

Как работал вредонос на этот раз

Socket пишет, что в пакеты добавили три файла: cook.pth, cook.py и sitecustomize.py. Они используют штатные механизмы запуска Python. cook.pth импортировал cook.py, который запускал стилер privcollect. Модуль sitecustomize.py, по данным The Hacker News, работал только на Linux и macOS и запускал фоновый загрузчик для удаленного выполнения кода.

Вредонос активировался при любом запуске Python в зараженном окружении, включая запуск pip. В разборах Security Boulevard и GMO Flatt стилер собирал облачные ключи AWS, Azure и Google Cloud, доступы к Kubernetes и Docker, токены GitHub, npm и PyPI, SSH-, GPG- и TLS-ключи, файлы .env, данные браузеров и токены AI-инструментов, включая Cursor и GitHub Copilot. CERT-In отдельно отмечает переменные окружения, секреты CI/CD и токены репозиториев. Данные отправлялись на litellm.dev/healthcheck. Загрузчик раз в час обращался к GitHub-репозиторию letters9813/pythonclient-test, читал domain.txt с адресом управляющего сервера и скачивал скрипт с /codepy.

Как злоумышленники получили доступ к релизу

По хронологии атаки от LiteLLM, мастер-ключ LiteLLM Agent Platform утек в публичный репозиторий LiteLLM-Labs/lite-harness 27 мая 2026 года. Коммит с конфигурационным файлом переписали, однако сам ключ так и не отозвали. 10 октября злоумышленники использовали его для доступа к платформе. Они получили GitHub CLI OAuth-токен владельца организации, а затем токены двух мейнтейнеров.

Сборку перенаправили на похожий репозиторий Berri-AI/litellm, обошли защиту ветки и выпустили пакет через штатный конвейер. Вредоносные артефакты прошли подпись и были опубликованы как официальный релиз. Проект временно ослабил процедуру согласования релизов, и атакующие этим воспользовались.

Возможные последствия

Похищенные облачные ключи дают доступ к инфраструктуре. Wiz зафиксировала: через 4,5 часа после утечки ключи AWS проверяли через sts:GetCallerIdentity, а затем смотрели модели Bedrock. Это похоже на LLMjacking. С ключами провайдеров ИИ можно тратить бюджет жертвы на модели, с токенами CI/CD и репозиториев можно повторить атаку от имени доверенного проекта. SSH-, GPG- и TLS-ключи, данные браузеров и сессии открывают путь вглубь инфраструктуры, загрузчик дает произвольный код, а внутренние зеркала и кеши могут разнести зараженную версию по командам.

Что делать

Сначала проверьте, использовалась ли версия 1.107.0 и затронутые теги. Смотрите pip show litellm, lock-файлы, SBOM, локальные кеши, внутренние зеркала, образы и дайджесты, CI-раннеры и рабочие машины разработчиков.

Если версия запускалась, не запускайте Python и pip в этом окружении. Удалите cook.pth, cook.py, sitecustomize.py и соответствующие файлы __pycache__ , остановите процесс, держащий /tmp/remote_code_loader.lock, и пересоберите окружение или образ с нуля на версии 1.106.2. При наличии исходящего интернета считайте данные скомпрометированными. С чистого хоста отзовите и смените облачные ключи и роли, секреты Kubernetes и Docker, токены GitHub, npm и PyPI, SSH-, GPG- и TLS-ключи, данные .env, ключи провайдеров ИИ, master и virtual keys LiteLLM, пароль DATABASE_URL. Затем проверьте следы: обращения к litellm.dev, репозиторию letters9813/pythonclient-test и путям /codepy, файлы-маркеры, переменную PRIVCOLLECT_ACTIVE=1, процесс с рабочим каталогом /. Удалите затронутые артефакты из внутренних зеркал, реестров и кешей.

Для профилактики зафиксируйте LiteLLM и зависимости на конкретных версиях и хешах, не тяните latest в прод. Поставьте внутреннее зеркало пакетов с задержкой или карантином и проверяйте подписи, provenance и SBOM. В CI и на раннерах не храните долгоживущие облачные ключи. Используйте короткоживущие токены с минимальными правами, включите сканирование секретов с автоотзывом и фильтрацию исходящего трафика.

View the original on Хабр →

KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.