- Атака на цепочку поставок Trivy привела к распространению червя CanisterWorm как минимум через 66 npm-пакетов и 141 вредоносный артефакт.
- Вредоносный код использует postinstall-скрипты: после установки он ищет npm-токены на машине жертвы, ставит постоянный бэкдор и пытается заражать новые пакеты.
- Исследователи связали кампанию с инфраструктурой ICP: через контейнер в блокчейне злоумышленники удалённо меняют ссылку на следующую полезную нагрузку.
Атака на популярный сканер уязвимостей Trivy получила продолжение: после компрометации релизов trivy, trivy-action и setup-trivy злоумышленники начали распространять самораспространяющийся червь CanisterWorm через npm-пакеты. По данным исследователей, заражение затронуло не менее 66 уникальных пакетов, а общее число вредоносных артефактов достигло 141. Кампания уже активна, а опасный код срабатывает на этапе установки пакета.
Среди затронутых пакетов названы 28 пакетов в области действия @EmilGroup, 16 пакетов @opengov, а также @teale.io/eslint-config, @airtm/uuid-base32 и @pypestream/floating-ui-dom. В ряде случаев использовался postinstall-хук — это сценарий, который запускается автоматически сразу после установки пакета. Через него загрузчик ставит Python-бэкдор, который закрепляется в системе с помощью службы systemd под именем, похожим на инструмент PostgreSQL, и перезапускается автоматически, если процесс завершается.
Для связи с управляющей инфраструктурой вредонос использует ICP-контейнер — смарт-контракт в сети Internet Computer. Исследователи называют это первым публично описанным случаем, когда такой контейнер применяют как точку получения командного адреса. Бэкдор примерно каждые 50 минут обращается к контейнеру, получает ссылку и загружает исполняемый файл. Если вместо неё приходит адрес с youtube[.]com, вредонос считает это режимом ожидания и ничего не запускает.
Отдельно аналитики выделили версии 1.8.11 и 1.8.12 пакета @teale.io/eslint-config. В них CanisterWorm уже не требует ручного запуска вспомогательного скрипта для распространения. Код сам ищет npm-токены в среде разработчика и сразу передаёт их в deploy.js, который публикует заражённые версии других доступных пакетов. Это превращает любую машину или CI-конвейер, где установили пакет, в новый источник распространения атаки.
Дополнительный анализ кампании опубликовали несколько компаний по безопасности. Они описывают CanisterWorm как комбинацию загрузчика вредоносного ПО и сборщика учётных данных. По их данным, злоумышленники получили один или несколько токенов публикации npm либо доступ к CI/CD и с его помощью начали подменять содержимое легитимных пакетов, расширяя заражение по цепочке.
Это не первый случай самораспространяющейся атаки через npm. Осенью уже фиксировались кампании Shai-Hulud и Sha1-Hulud, где вредоносный код крал учётные данные и заражал всё больше пакетов и репозиториев.
Разработчикам и компаниям стоит срочно проверить, не использовались ли затронутые версии пакетов в локальной среде и CI/CD, и при необходимости перевыпустить npm-токены. Автоматический запуск postinstall-скриптов снова стал ключевым каналом заражения, поэтому к зависимостям из npm нужен более жёсткий контроль.