Популярный Python-пакет LiteLLM оказался скомпрометирован в результате атаки на цепочку поставок ПО. По сообщениям SafeDep, Socket, StepSecurity и Upwind, версия 1.107.0 содержала похититель учётных данных и бэкдор. Вредоносный релиз распространялся через колёса PyPI и Docker-образы. Сейчас пакет помещён в карантин на Python Package Index (PyPI), а заражённые Docker-образы удалены.

Вредоносный код рассчитан на сбор облачных учётных данных, приватных ключей, данных браузеров и файлов авторизации для инструментов разработки ИИ. По словам Оливера Дженсена, директора по безопасности LiteLLM, расследование продолжается: компания пока выясняет, каким способом злоумышленники добились публикации релиза.
Дженсен сообщил, что вредоносные действия провели через GitHub-аккаунты трёх инженеров, предположительно используя украденные OAuth-токены GitHub CLI. С одного аккаунта запустили процедуру
В качестве временной меры LiteLLM удалила из своей организации на GitHub всех пользователей, кроме одного, чья учётная запись не была затронута. Компания также убрала из публичных реестров доверенные ссылки на свою GitHub-организацию, чтобы затруднить публикацию новых вредоносных пакетов.
В перечень затронутых файлов LiteLLM 1.107.0 вошли
Запуск происходил ещё до импорта LiteLLM: при старте интерпретатора Python файл
Собранную информацию злоумышленники упаковывали в TAR-архив с GZIP-сжатием и отправляли HTTP POST-запросом на
Похожий приём с
Тем, кто скачал версию 1.107.0, следует из чистой среды отозвать все потенциально раскрытые учётные данные и заменить их. Для LiteLLM рекомендуется закрепить версию 1.106.2 по дайджесту, а не полагаться только на номер версии.

Изображение носит иллюстративный характер
Вредоносный код рассчитан на сбор облачных учётных данных, приватных ключей, данных браузеров и файлов авторизации для инструментов разработки ИИ. По словам Оливера Дженсена, директора по безопасности LiteLLM, расследование продолжается: компания пока выясняет, каким способом злоумышленники добились публикации релиза.
Дженсен сообщил, что вредоносные действия провели через GitHub-аккаунты трёх инженеров, предположительно используя украденные OAuth-токены GitHub CLI. С одного аккаунта запустили процедуру
project-releaser, другой аккаунт подтвердил её. Все токены, замеченные в атаке, отозваны. Но LiteLLM пока не установила, как они попали к злоумышленникам, и потому не может утверждать, что дальнейшего доступа к аккаунтам нет. В качестве временной меры LiteLLM удалила из своей организации на GitHub всех пользователей, кроме одного, чья учётная запись не была затронута. Компания также убрала из публичных реестров доверенные ссылки на свою GitHub-организацию, чтобы затруднить публикацию новых вредоносных пакетов.
В перечень затронутых файлов LiteLLM 1.107.0 вошли
107.0-cp310-abi3-macosx_10_12_x86_64.whl (так имя указано в опубликованном перечне), litellm-1.107.0-cp310-abi3-macosx_11_0_arm64.whl, litellm-1.107.0-cp310-abi3-manylinux_2_28_aarch64.whl, litellm-1.107.0-cp310-abi3-manylinux_2_28_x86_64.whl, litellm-1.107.0-cp310-abi3-musllinux_1_2_aarch64.whl, litellm-1.107.0-cp310-abi3-musllinux_1_2_x86_64.whl и litellm-1.107.0-cp310-abi3-win_amd64.whl. Архив litellm-1.107.0.tar.gz не содержал файлов с полезной нагрузкой, но его pyproject.toml был изменён. Запуск происходил ещё до импорта LiteLLM: при старте интерпретатора Python файл
cook.pth автоматически выполнял единственную строку import cook. По данным StepSecurity, первый модуль назывался privcollect. Он собирал облачные токены и пароли, данные учётных записей разработчиков и приватные ключи, JSON-файлы с секретами AI-инструментов, переменные окружения, а также данные Chromium и Firefox. В установках LiteLLM вредоносная программа могла извлечь сохранённые прокси-сервера учётные данные и конфигурацию моделей. Собранную информацию злоумышленники упаковывали в TAR-архив с GZIP-сжатием и отправляли HTTP POST-запросом на
litellm[.]dev/healthcheck. Второй модуль запускал фоновый процесс-демон: раз в час тот проверял GitHub-репозиторий github[.]com/letters9813 и читал файл domain.txt. Если в файле был указан домен, программа повторно запускала похититель данных, отправляла HTTP GET-запрос к <domain>/codepy и выполняла полученный ответ. Сейчас репозиторий возвращает ошибку 404. Похожий приём с
cook.pth, который позволяет исполнить код до импорта LiteLLM, обнаруживали и при компрометации LiteLLM, связанной с атаками TeamPCP на цепочку поставок. Это произошло ранее в марте; год и точная дата в опубликованной информации не указаны. Тем, кто скачал версию 1.107.0, следует из чистой среды отозвать все потенциально раскрытые учётные данные и заменить их. Для LiteLLM рекомендуется закрепить версию 1.106.2 по дайджесту, а не полагаться только на номер версии.