Атаки на цепочки поставок программного обеспечения превращаются в один из наиболее опасных векторов распространения вредоносного кода. Вместо прямого нацеливания на организации злоумышленники всё чаще атакуют сторонние инструменты и библиотеки, от которых ежедневно зависят разработчики. Последний крупный инцидент, начавшийся с, казалось бы, рутинного обновления популярного сканера безопасности, наглядно демонстрирует, как уязвимость в одном компоненте может вызвать каскад компрометаций и привести к массовой краже учетных данных, секретов и потенциальным атакам программами-вымогателями.
Описание
В конце февраля 2026 года группа угроз TeamPCP осуществила масштабную атаку, затронувшую экосистемы GitHub, PyPI (реестр пакетов Python) и npm (менеджер пакетов Node.js). Исходной точкой стала компрометация репозитория проекта Trivy, известного инструмента для сканирования образов контейнеров и файловых систем на наличие уязвимостей, разрабатываемого компанией Aqua Security. Злоумышленники использовали ошибку конфигурации в системе непрерывной интеграции (CI) репозитория, что позволило им повысить привилегии и получить доступ к токену личного доступа (PAT) с расширенными правами к API GitHub. Обладая этими правами, атакующие закрепились в системе и получили контроль над репозиторием.
Первая попытка команды Trivy исправить ситуацию путём смены учётных данных оказалась неудачной из-за неатомарного характера ротации. TeamPCP, сохранив доступ к части ещё не обновлённых секретов, смогла перехватить новые ключи, что сделало процесс восстановления контроля неэффективным. Этот эпизод служит наглядным примером критической важности тщательного и всеобъемлющего подхода к очистке среды после взлома при противодействии продвинутым группам угроз. После этого атакующие принудительно отправили вредоносный код в десятки версионных тегов в связанных репозиториях "aquasecurity/trivy-action" и "aquasecurity/setup-trivy", а также в саму версию Trivy 0.69.4.
Внедрённые вредоносные файлы, такие как "entrypoint.sh" и "action.yaml", были предназначены для перехвата секретов из памяти и переменных окружения с последующей их отправкой на фишинговый домен, имитирующий сайт Aqua Security. Затем на систему жертвы устанавливался скомпрометированный бинарный файл Trivy, который выполнял гораздо более широкие задачи по сбору данных. Этот вредоносный компонент крал учетные данные для локальной системы и множества облачных сервисов, включая AWS, GitHub, Google Cloud, Kubernetes, а также токены Slack и Discord. Собранная информация отправлялась на тот же поддельный домен. Кроме того, бинарный файл использовал вложенное кодирование base64 для размещения скрипта "sysmon.py", который устанавливался как постоянная системная служба и обеспечивал функционал командного центра (C2) для дальнейшего управления.
Исследователи компании FutureSearch обнаружили эксплойт случайно, благодаря непреднамеренно закодированной в вредоносном файле "fork bomb" - рекурсивной функции, которая могла вызвать отказ в обслуживании заражённой машины. Однако до этого момента атака уже успела распространиться дальше по цепочке. Согласно временной шкале событий, компрометация Trivy в конечном итоге привела к захвату учётной записи одного из сопровождающих пакета LiteLLM на PyPI. Это позволило TeamPCP повысить свой урон, внедрив вредоносный код в две версии популярной библиотеки LiteLLM (1.82.7 и 1.82.8), используемой для работы с языковыми моделями.
Версия 1.82.7 содержала модифицированный файл "proxy_server.py", а в версию 1.82.8 дополнительно был добавлен файл конфигурации пути "litellm_init.pth", который автоматически выполнялся при каждом запуске Python. Оба файла включали в себя нагрузку для кражи информации, тщательно сканирующую систему на наличие огромного спектра чувствительных данных: секретов для AWS, GitHub, Google Cloud, Azure, учётных данных Kubernetes, конфигураций Docker, SSH-ключей и даже приватных ключей криптовалютных кошельков. Похищенные данные упаковывались в архив "tpcp.tar.gz" и выгружались на ещё один поддельный домен. Критическое различие между файлами заключалось в необходимости взаимодействия с пользователем: "proxy_server.py" требовал импорта определённого модуля, в то время как ".pth"-файл выполнялся автоматически, что значительно увеличивало опасность.
Накопив огромный объём украденных данных, включая учётные записи npm, TeamPCP переключилась на распространение скрипта CanisterWorm, который мог автономно распространяться внутри организаций, используя цепочки скомпрометированных учётных данных. Это создавало эффект снежного кома: каждая новая жертва способствовала заражению следующих. Более того, группа объявила о партнёрстве с операторами программы-вымогателя Vect, предложив ключи для аффилиатов всему сообществу BreachForums. Это сигнализирует о явном намерении монетизировать успех атаки, превратив кражу данных в полноценные ransomware-атаки против уже скомпрометированных организаций. Дополнительный удар был нанесён по аккаунту компании Telnyx на PyPI, где атакующие применили новую технику - стеганографию в WAV-файлах для скрытой доставки вредоносной нагрузки.
Данный инцидент со всей очевидностью показывает, почему атаки на цепочки поставок столь эффективны. Они эксплуатируют доверие в масштабе. Компрометируя широко используемые инструменты, злоумышленники получают возможность быстро распространять вредоносный код по множеству сред одновременно. Поскольку у команд безопасности часто ограничена видимость во внешние зависимости, такие автоматизированные обновления могут нести скрытый риск. В этом случае первоначальная уязвимость в инструменте безопасности привела к компрометации других инструментов, что, в свою очередь, открыло путь для кражи секретов, которые теперь используются для новых атак. Защита от подобных угроз требует смещения акцента с обнаружения на превентивное управление тем, что может выполняться в среде. Это включает в себя применение политик разрешительного списка приложений (Application Allowlisting), чтобы блокировать неавторизованное исполнение кода даже из доверенных пакетов, строгое следование принципу наименьших привилегий и внедрение идеологии Zero Trust, которая предполагает, что компрометация неизбежна, и фокусируется на сдерживании возможного ущерба.
Индикаторы компрометации
IPv4
- 45.148.10.212
- 83.142.209.11
- 83.142.209.203
Domains
- checkmarx.zone
- models.litellm.cloud
- plug-tab-protective-relay.trycloudflare.com
- scan.aquasecurtiy.org
- ttdtqy-oyaaa-aaaae-af2dq-cai.raw.icp0.io
SHA256
- 18a24f83e807479438dcab7a1804c51a00dafc1d526698a66e0640d1e5dd671a
- 23b1ec58649170650110ecad96e5a9490d98146e105226a16d898fbe108139e5
- 4f997ebbe069453f91ba4cef5979bdad4d04bf33931740ec22e1caefc1f86a27
- 5e2ba7c4c53fa6e0cef58011acdd50682cf83fb7b989712d2fcf1b5173bad956
- 71e35aef03099cd1f2d6446734273025a163597de93912df321ef118bf135238
- 7b5cc85e82249b0c452c66563edca498ce9d0c70badef04ab2c52acef4d629ca
- 822dd269ec10459572dfaaefe163dae693c344249a0161953f0d5cdd110bd2a0
- 8a2a05fd8bdc329c8a86d2d08229d167500c01ecad06e40477c49fb0096efdea
- a0a8857e8a65c05778cf6068ad4c05ec9b6808990ae1427e932d2989754c59a4
- a0d229be8efcb2f9135e2ad55ba275b76ddcfeb55fa4370e0a522a5bdee0120b
- a3bd86b8d621047fbcf79d3dc774d3f21cea5e7940c9e988b141454489ad7711
- b219ce2263c913655269946b884c38ee3dc577a7f1221d4524f2b2bceb1f55ad
- c37c0ae9641d2e5329fcdee847a756bf1140fdb7f0b7c78a40fdc39055e7d926
- d39f4e7a218053cce976c91eacf184cf09a6960c731cc9d66d8e1a53406593a5