23 марта 2026, 12:27
Атака на цепочку поставок Trivy запустила червь CanisterWorm в десятках пакетов npm

Злоумышленники, стоящие за атакой на цепочку поставок популярного сканера Trivy, предположительно, проводят последующие атаки, которые привели к компрометации большого количества пакетов npm с помощью ранее не описанного самораспространяющегося червя CanisterWorm.
Название отсылает к тому факту, что вредоносная программа использует ICP-контейнер, обозначающий защищённый от взлома смарт-контракт в блокчейне Интернета, в качестве средства разрешения тайников. Как заявил исследователь Aikido Security Чарли Эриксен, это первое публично задокументированное злоупотребление ICP-контейнером для получения доступа к серверу управления и контроля (C2).
Ниже приведён список затронутых пакетов:
28 пакетов в области действия @EmilGroup;
16 пакетов в области действия @opengov;
@teale.io/eslint-config;
@airtm/uuid-base32;
@pypestream/floating-пользовательский интерфейс-dom.
Ранее злоумышленники использовали скомпрометированные учётные информация для публикации вредоносных релизов trivy, trivy-action и setup-trivy, содержащих программу для кражи данных. Предполагается, что за этими атаками стоит киберпреступная группа TeamPCP, специализирующаяся на облачных технологиях. Цепочка заражения, включающая пакеты npm, предполагает использование postinstall hook для выполнения загрузчика, который затем устанавливает бэкдор на Python, отвечающий за связь с хранилищем ICP для получения URL-адреса, указывающего на следующую полезную нагрузку. Децентрализованная инфраструктура хранилища делает её устойчивой и защищённой от попыток удаления.
«Контроллер контейнера может в любой момент изменить URL-адрес, отправляя новые бинарные файлы на все заражённые хосты», — сказал Эриксен.
Устойчивость обеспечивается с помощью службы пользователя systemd, которая настроена на автоматический запуск бэкдора на Python через 5 секунд, если он по какой-либо причине завершается с помощью директивы "Restart=always". Служба systemd маскируется под инструменты PostgreSQL ("pgmon"), чтобы оставаться незамеченной.
Бэкдор, как упоминалось ранее, каждые 50 минут отправляет в контейнер ICP поддельный User-Agent браузера, чтобы получить URL-адрес в открытом виде. Затем URL-адрес анализируется для получения и запуска исполняемого файла.
«Если URL-адрес содержит youtube[.]com, скрипт пропускает его. Это спящее состояние контейнера. Злоумышленник активирует имплант, направив контейнер на реальный исполняемый файл, и деактивирует его, переключившись обратно на ссылку YouTube. Если злоумышленник обновит контейнер, указав новый URL-адрес, каждая заражённая машина при следующем запросе получит свежий исполняемый файл. Старый исполняемый файл продолжает работать в фоновом режиме, поскольку сценарий никогда не завершает предыдущие процессы», — пояснил Эриксен.
Стоит отметить, что аналогичный механизм аварийного отключения на основе youtube[.]com также был обнаружен Wiz в связи с троянизированным исполняемым файлом Trivy (версия 0.69.4), который обращается к тому же контейнеру ICP через другой Python-дроппер ("sysmon.py"). На момент написания статьи URL-адрес, возвращаемый C2, представляет собой видео rickroll на YouTube.
В Hacker News обнаружили, что контейнер ICP поддерживает три метода — get_latest_link, http_request, update_link — новейший из которых даёт возможность злоумышленнику в любое время изменить поведение для запуска реальной полезной нагрузки.
Вместе с этим, пакеты содержат файл "deploy.js", который злоумышленник запускает вручную, чтобы распространить вредоносную нагрузку на каждый пакет, к которому украденный токен npm предоставляет доступ программным способом. Червь, предположительно, созданный с помощью инструмента искусственного интеллекта (ИИ) и использующий технологию Vibe, не пытается скрыть свою функциональность.
Ситуация усугубляется тем, что обнаруженная в версиях 1.8.11 и 1.8.12 "@teale.io/eslint-config" мутация CanisterWorm крадет токены npm и использует их для самораспространения без необходимости ручного вмешательства. В отличие от "deploy.js", представлявшего собой автономный скрипт, который злоумышленник должен был запустить с украденными токенами npm для установки вредоносной версии пакетов npm в реестр, новый вариант включает эту функциональность в "index.js" в функции findNpmTokens(), которая запускается на этапе postinstall для сбора токенов аутентификации npm с машины жертвы.
Основное отличие заключается в том, что сценарий postinstall после установки постоянного бэкдора пытается найти все токены npm из среды разработчика и немедленно запускает червя с этими токенами, запуская "deploy.js" как полностью отсоединённый фоновый процесс.
Интересно, что, по имеющимся данным, злоумышленник заменил полезную нагрузку бэкдора ICP на фиктивную тестовую строку ("hello123"), вероятно, чтобы убедиться, что вся цепочка атаки работает должным образом, прежде чем добавлять вредоносное ПО.
«Это тот момент, когда атака переходит от „скомпрометированный аккаунт публикует вредоносное ПО“ к „вредоносное ПО компрометирует больше аккаунтов и публикует себя“. Каждый разработчик или конвейер CI, который устанавливает этот пакет, становится невольным вектором распространения», — сказал Эриксен.
Компания Socket, занимающаяся безопасностью цепочки поставок программного обеспечения, сообщила, что атака CanisterWorm на цепочку поставок распространилась на 141 вредоносный артефакт, охватывающий более 66 уникальных пакетов.
«В наблюдаемой активности злоумышленник, по-видимому, получил один или несколько токенов публикации npm или эквивалентный доступ к публикации CI/CD и использовал этот доступ для замены легитимного содержимого пакета вредоносным кодом, а затем повторно опубликовал полезную нагрузку в дополнительных пакетах, доступных по скомпрометированным учетным данным», — заявила организация.
Дополнительные анализы CanisterWorm были опубликованы Endor Labs и JFrog, которые охарактеризовали вредоносное ПО как сборщик учётных данных и загрузчик вредоносного ПО. Он ищет токены аутентификации npm, сканируя машину разработчика, а затем передает собранные токены вторичному скрипту («deploy.js»), который действует как червь, распространяя вредоносную логику по программному обеспечению жертвы.
«Хотя сбор учётных данных через пост-инсталляционные хуки — это хорошо зарекомендовавшая себя тактика, Shai-Hulud доказал, что украденные токены npm могут быть немедленно использованы для заражения и повторной публикации собственных пакетов жертвы, превращая единичный случай компрометации в экспоненциально расширяющуюся атаку. Проанализированная здесь кампания следует тому же сценарию, подтверждая, что самораспространение, подобное червям, стало повторяющейся техникой, а не единичным случаем», — сказал Хенрик Плате, руководитель отдела исследований безопасности в Endor Labs.
В сентябре NPM-пакет tinycolor был скомпрометирован в ходе атаки. Она затронула более 40 пакетов библиотеки, а после самораспространяющийся червь заразил ещё более 300. Злоумышленники смогли распространить вредоносное ПО с помощью функции NpmModule.updatePackage, внедрённой в скомпрометированные библиотеки. Кампания получила название Shai-Hulud, она довольно сложна и использует TruffleHog, легитимный инструмент для скрытого сканирования, чтобы искать и проверять учётные информация перед их передачей в веб-перехватчик.
В ноябре новая кампания в цепочке поставок Sha1-Hulud затронула более 25 000 репозиториев через npm с кражей учетных данных на этапе preinstall. Злоумышленники добавляли preinstall сценарий (setup_bun.js) в список пакетов (package.json), который настроен на скрытую установку или обнаружение среды выполнения Bun и запуск вложенного вредоносного скрипта (bun_environment.js).
Читают сейчас
6 часов назад
Anthropic начнут проектировать чипы для Claude
Anthropic начала формировать собственное направление по проектированию процессоров для Claude. В свежей вакансии Research Engineer, Chip Design RL организация прямо пишет, что ищет инженера, который н

7 часов назад
37 процентов машиностроителей фокусируются на ERP и ИБ
К2Тех провел комплексное исследование цифровизации машиностроительной отрасли. Оно объединило результаты опроса 150 респондентов и 15 глубинных интервью с представителями ключевых сегментов отрасли: а

8 часов назад
Хакатоны августа 2026
Августовский версия: собрали для вас 8 крутых соревнований — от ML-баттлов с 7,2 млн ₽ до офлайн-CTF без интернета и инженерных хакатонов по CFD-моделированию. Успейте зарегистрироваться — дедлайны ск

9 часов назад
C 4 сентября Google Assistant перестанет функционировать на смартфонах и планшетах Android, его заменит Gemini
Голосовой помощник Google Assistant перестанет функционировать на смартфонах и планшетах под управлением Android с 4 сентября 2026 года, пишет 9to5Google со ссылкой на сообщение от Google. Американска

9 часов назад
«Сбер» расширит программу амбассадоров в вузах до 50 университетов в 24 городах России
«Сбер» расширит программу амбассадоров в вузах. В новом сезоне к проекту присоединятся 50 университетов из 24 городов России. Старт программы запланирован на октябрь. Как сообщили в компании, от каждо