TeamPCP внедрила вредоносный код в LiteLLM через цепочку поставок
TeamPCP провела атаку на цепочку поставок, затронувшую GitHub Actions, PyPI, npm, Docker Hub и OpenVSX. В версиях LiteLLM 1.82.7 и 1.82.8 обнаружили вредоносный код: он собирал конфиденциальные данные, а в некоторых средах обеспечивал закрепление и удалённое выполнение кода.
Путь от среды Trivy к другим проектам
Кампания началась с эксплуатации неправильно настроенного рабочего процесса pull_request_target в среде CI Trivy. Это позволило злоумышленникам похитить персональный токен доступа Aqua Security. Используя всё ещё действительные учётные данные, TeamPCP принудительно отправила вредоносные коммиты в связанные с Trivy репозитории и опубликовала скомпрометированные образы Docker.
Модифицированный сканер извлекал память исполнителей заданий, облачные учётные данные, ключи SSH и другие секреты. При этом он продолжал выполнять легитимное сканирование. Учётные данные, полученные из скомпрометированных сред CI/CD, применялись для заражения других проектов.
TeamPCP развернула самораспространяющийся червь для npm, скомпрометировала теги GitHub Action Checkmarx KICS и опубликовала вредоносные расширения для VS Code. Затем команда получила токен публикации в PyPI из конвейера сборки LiteLLM, где использовалось скомпрометированное действие Trivy.
Вредоносный код в LiteLLM
В LiteLLM 1.82.7 полезную нагрузку внедрили в файл proxy_server.py. Она запускалась при импорте прокси. Версия 1.82.8 сохранила этот код и включала файл LiteLLM_init.pth размером 34 628 байт. Python автоматически выполняет такие файлы при запуске интерпретатора.
Полезная нагрузка состояла из нескольких уровней кода Python, закодированных в Base64. Она нацеливалась на среды CI/CD, проверяя переменную GITHUB_ACTIONS, и применяла дополнительное географическое ограничение на основе локали и реестра.
Вредоносная программа собирала более 50 категорий конфиденциальных данных. Среди них были учётные данные для AWS, GCP и Azure, конфигурации Kubernetes, токены служебных учётных записей и секреты кластера, ключи SSH, а также файлы Docker, npm, Git, Vault, баз данных, Terraform, CI/CD, VPN, криптографических кошельков и TLS. Программа также собирала историю командной строки, файлы .env и ключи API для LLM.
Закрепление, передача данных и инфраструктура
Программа могла перечислять секреты Kubernetes и создавать привилегированные поды, монтировавшие файловые системы узлов. Это обеспечивало закрепление на уровне всего кластера. Собранные данные шифровались с помощью AES-256-CBC, а сеансовый ключ защищался встроенным публичным ключом RSA-4096-OAEP. Затем данные отправлялись на инфраструктуру, контролируемую злоумышленниками.
На системах, не относящихся к CI, вредоносная программа устанавливала пользовательский модуль systemd sysmon.service и бэкдор на Python в каталоге ~/.config/sysmon/. Бэкдор периодически загружал и выполнял вредоносные нагрузки с домена checkmarx[.]zone. Он сохранял работоспособность после перезагрузки и обеспечивал удалённое выполнение кода.
Инфраструктура кампании также включала домен models[.]litellm[.]cloud, связанные IP-адреса и механизм аварийного отключения, основанный на ответах со строкой «youtube». Обнаружению атаки частично способствовал дефект, аналогичный бомбе процессов (fork bomb): он приводил к исчерпанию ресурсов ЦП и сбоям из-за нехватки памяти.
Отчет получен из сервиса CTT Report Hub. Права на отчет принадлежат его владельцу.
Ознакомиться подробнее с отчетом можно по ссылке.



