Релиз LiteLLM 1.107.0 на PyPI содержал стилер и загрузчик
Версия LiteLLM 1.107.0 была скомпрометирована на PyPI: во все семь опубликованных колёс для разных платформ попали три несанкционированных файла, которые копировались в среду Python при установке. Исходный код пакета на Python не меняли, подмену внесли через модифицированную конфигурацию сборки Maturin. Файлы .pth и sitecustomize.py выполняются при запуске Python, поэтому вредоносные нагрузки срабатывали при запуске Python, pip, тестов, Jupyter или прокси LiteLLM, даже если пакет не импортировали.
Сбор данных и удалённое выполнение кода
Полезная нагрузка cook, обозначенная как privcollect, собирала учётные данные и файлы cookie браузера, ключи SSH и GPG, закрытые сертификаты, учётные данные облачных и разработческих сервисов, конфигурации Kubernetes и Docker, секреты CI/CD и Vault, переменные окружения доступных процессов, историю команд в оболочке и базе данных, а также учётные данные для множества инструментов ИИ для написания кода. На хостах с прокси LiteLLM, где была задана переменная DATABASE_URL, она пыталась извлечь из базы данных учётные данные провайдеров и конфигурации моделей.
Собранные данные шифровались с помощью AES-256-CBC, а ключ шифрования оборачивался в RSA-4096. Затем данные упаковывались в архив tar и отправлялись по HTTP на www.litellm.dev/healthcheck с жёстко заданным заголовком X-Token. Сбор повторялся при каждом запуске Python до успешной отправки данных.
Вторая полезная нагрузка использовала sitecustomize.py для создания отсоединённого демона в Linux и macOS. Демон получал блокировку в /tmp/remote_code_loader.lock, затем каждый час извлекал имя узла из репозитория GitHub letters9813/pythonclient-test, загружал /codepy и выполнял его содержимое с помощью функции Python exec(). В Windows функциональность демона отсутствовала, но стиллер учётных данных продолжал работать.
Индикаторы и действия на затронутых системах
Потенциальными индикаторами компрометации могут служить:
- файлы
cook.pthиcook.py, а также несанкционированные файлыsitecustomize.pyв каталогеsite-packages; - файл
/tmp/.pc_once_72129118c59f5636c0bbи файл блокировки загрузчика; - соединения с доменом
litellm.devи репозиторием атакующего на GitHub; - запросы, путь которых заканчивается на
/codepy.
Для затронутых систем указаны следующие действия:
- завершить работу загрузчика;
- удалить файлы полезной нагрузки;
- переустановить LiteLLM версии 1.106.2 или другую проверенную чистую версию;
- расследовать сетевую активность;
- обновить все учётные данные, доступные с данного хоста.
Отчет получен из сервиса CTT Report Hub. Права на отчет принадлежат его владельцу.
Ознакомиться подробнее с отчетом можно по ссылке.
Об этом также писали: socket.dev, safedep.io.



