LiteLLM скомпрометирован: похищаются учетные данные

Источник: wiz.io•

LiteLLM скомпрометирован: похищаются учетные данные

В ходе нового инцидента вредоносная версия (1.107.0) пакета LiteLLM была загружена в PyPI и Docker 21 октября. Вредоносная версия содержит похититель учетных данных, нацеленный на секреты браузеров, облачных и ИИ-служб, а также неактивную функцию командного центра (C2).

LiteLLM скомпрометирован

21 октября в 11:39 UTC вредоносная версия (1.107.0) пакета LiteLLM была загружена в PyPI. Эта версия была помещена в карантин на PyPI в 1:20 UTC.

Контейнеры LiteLLM на GHCR и Docker Hub также содержали сопряженную с трояном версию LiteLLM. К ним относятся теги v1.107.0, latest, main-latest и main-stable. Самой последней безопасной версией является v1.106.2.

При установке вредоносного пакета три файла извлекаются непосредственно в корневой каталог site-packages: cook.pth, cook.py и sitecustomize.py. Эти пакеты предназначены для выполнения при каждом запуске интерпретатора Python.

ОБНОВЛЕНИЯ

  • 14:05 UTC — добавлена таблица индикаторов компрометации (IOC)

14:05 UTC — добавлена таблица индикаторов компрометации (IOC)

  • 14:15 UTC — добавлены сведения о коммитах атаки

14:15 UTC — добавлены сведения о коммитах атаки

Полезная нагрузка

При запуске интерпретатор обрабатывает файл cook.pth, который содержит команду для импорта cook, загружающую cook.py. cook.py расшифровывает сам себя, запускает процедуру кражи данных и записывает маркер в /tmp/.pc_once_72129118c59f5636c0bb (обратите внимание, что это завершается ошибкой в Windows, так как путь /tmp/ часто не существует). Процедура кражи собирает секреты системы, браузеров, разработчиков, облачных платформ и ИИ-инструментов, шифрует их и передает на www.litellm.dev/healthcheck посредством POST-запроса. Этот домен контролируется злоумышленником и маскируется под инфраструктуру LiteLLM.

Интерпретаторы Python также попытаются выполнить sitecustomize.py — однако он запускается только на машинах под управлением Linux и MacOS. Этот сценарий пытается получить domain.txt с мертвой точки (dead drop) на GitHub (letters9813/pythonclient-test/main/domain.txt). При получении ответа он попытается загрузить питоновский скрипт второго этапа с сайта http://<domain>/codepy и запустить его. На момент анализа файл domain.txt не был заполнен. Репозиторий был удален в 13:30 по всемирному координированному времени (UTC).

Коммиты злоумышленника

Полезная нагрузка происходит из вредоносных коммитов, сделанных в github.com/Berri-AI/litellm. Обратите внимание, что это вариант легитимной организации BerriAI с дефисом. Этот репозиторий, невидимый на GitHub, использовался для внедрения полезной нагрузки в конвейер выпуска.

21 октября в период с 08:56 до 10:46 UTC злоумышленник отправил 10 коммитов, используя адрес электронной почты автора ckdi82fkoos@proton.me. Первые девять коммитов были созданы на GitHub.com и поэтому подписаны проверенной подписью GitHub.

Первые три (в течение 2 минут) добавили файлы постоянного хранения: cook.pth, cook.py и sitecustomize.py. Еще четыре коммита увеличили номера версий до 1.107.0.

После 39-минутного перерыва два коммита доработали полезную нагрузку и добавили критическую директиву data = "cook" в pyproject.toml, которая предписала инструменту сборки упаковать вредоносное ПО в wheel-пакет.

Финальный коммит, сделанный 58 минут спустя с другим адресом электронной почты (Berri-AI@users.noreply.github.com) и неподписанный (что указывает на другую среду), добавил инструкцию COPY cook ./cook в Dockerfiles.

Хотя репозиторий Berri-AI недоступен, все коммиты остаются доступными через родительский репозиторий благодаря совместному использованию объектов форков в Git. Полный дифф доступен по адресу: github.com/BerriAI/litellm/compare/a8113b0d...20535d8f

Рекомендации

Клиенты Wiz должны ознакомиться с рекомендациями нашего Центра анализа угроз (Threat Intel Center): Цепочка поставок под угрозой, нацеленная на LiteLLM.

Индикаторы компрометации

cook.pth Windows: 84dc8c82c0a4a4a62552ef826b49fcc86d1a5c4a5d0f2c06665723f93d129d7d Linux/macOS: 7f191632e7320705d154b85204f1ae546b543acbd7e8861229b76f5042b92bdb

cook.py Windows: 03ac2a8b752605d1d7710979c17ff18b03dd978203ba23ba97fd8ce3d6f897ea Linux/macOS: 9dd0a3926f96a37eb86cf1ee2310d9be93139cc4ebef3ef9e2efe9531390be25

sitecustomize.py Windows: b6122440d0d9cb1eb1ade9933f49214da8c31288de7710c076c2680dfa528465 Linux/macOS: 34bef04fe88ac9d0aae0475630b1738681d15b94f233ac8aa46eacf5968305fa

Затронутые экземпляры

linux/amd64 sha256:bd1aeee419ea36da9aa2b657288da4101887be468f020ac63d22ba6ed84a3ea5 linux/arm64 sha256:56b74573eed6e4aafe4b50603dbe7853e0345f188c8e44a09f1098caf1f4bcdf

linux/amd64 sha256:24581ddc30767f16ecb69d2b0517556f2cd7dea56971adb42a3d1beb97d69523 linux/arm64 sha256:827dd893c74cf621a860a66a3a447a5c732533f087589ce905573e285c0a239c

О чём эта статья

Ещё в разделе «Кибербезопасность»

Все →

Ещё от Wiz