Инциденты

В npm нашли самораспространяющийся вредоносный пакет: CanisterWorm крадёт токены и заражает чужие библиотеки

Маша Даровская
By Маша Даровская , IT-редактор и автор
В npm нашли самораспространяющийся вредоносный пакет: CanisterWorm крадёт токены и заражает чужие библиотеки
Обложка © Anonhaven

Процесс заражения начинается во время установки пакета. Вредоносные пакеты используют хук postinstall в файле package.json для автоматического выполнения локального файла JavaScript — обычно index.js — сразу после распаковки содержимого пакета.

В экосистеме npm обнаружена новая вредоносная кампания, получившая название CanisterWorm. Исследователи Endor Labs и Aikido описывают её как supply-chain worm: после установки заражённого пакета вредоносный код пытается украсть npm-токены разработчика, а затем с их помощью автоматически публикует заражённые версии других пакетов, которыми владеет жертва. Endor Labs пишет о «десятках» вредоносных пакетов, Aikido — как минимум о пакетах в скоупах @EmilGroup, @opengov, а также отдельных пакетах @teale.io/eslint-config, @airtm/uuid-base32 и @pypestream/floating-ui-dom.

Главный механизм заражения довольно типичный для npm-атак: вредоносный код запускается через postinstall сразу после установки пакета. По данным Endor Labs, скрипт ищет токены в .npmrc, /etc/npmrcи переменных окружения вроде NPM_TOKEN, после чего передаёт их в отдельный модуль, который получает список пакетов владельца и публикует новые версии уже с внедрённым вредоносным кодом. То есть заражение может пойти дальше без участия разработчика — за счёт уже украденных учётных данных.

Отдельно исследователи отмечают, что вредонос закрепляется на Linux-системах через пользовательский systemd-сервис. Aikido и Endor Labs приводят одинаковую механику: malware создаёт unit-файл ~/.config/systemd/user/pgmon.service, запускает его через systemctl --user enable/start и маскирует артефакты под что-то, связанное с PostgreSQL — например, pgmon и pglog. Это позволяет переживать перезагрузку и автоматически восстанавливаться после остановки процесса.

Ещё одна важная деталь — инфраструктура управления. По данным Endor Labs и Aikido, CanisterWorm использует Internet Computer Protocol (ICP) как своеобразный «dead drop» для получения адреса следующей полезной нагрузки. В разборе Endor Labs прямо указан ICP endpoint tdtqy-oyaaa-aaaae-af2dq-cai.raw.icp0.io. Исследователи считают это необычным ходом: такая схема затрудняет обычное принудительное отключение через жалобы на домен или хостинг, потому что управляющая точка вынесена в децентрализованную инфраструктуру.

По состоянию на публикации исследователей масштабы кампании оценивались по-разному. Endor Labs перечисляет 50+ затронутых пакетов в своём разборе, а Mend пишет, что затронуто более 50 пакетов в нескольких npm-скоупах. При этом Aikido зафиксировала начало волны 20 марта 2026 года в 20:45 UTC и отдельно отметила, что злоумышленники успели скомпрометировать десятки пакетов за очень короткое время.

Есть и ещё один неприятный момент: хотя постоянный бэкдор ориентирован на Linux, кража npm-токенов и дальнейшее распространение затрагивают не только Linux-машины. Mend отдельно подчёркивает, что токены, найденные на macOS и Windows, тоже могут быть украдены и использованы для публикации заражённых пакетов от имени жертвы. Иными словами, даже если полноценное закрепление не сработает, компрометация цепочки поставки всё равно возможна.

Исследователи также связывают CanisterWorm с недавним инцидентом вокруг Trivy. По официальному сообщению maintainers Trivy, 19 марта 2026 года злоумышленник с использованием скомпрометированных учётных данных опубликовал вредоносные версии trivy, trivy-action и setup-trivy. Snyk уточняет, что атакующие force-push’нули вредоносный код в 75 из 76 тегов aquasecurity/trivy-action, а окно воздействия длилось примерно 12 часов. Mend прямо пишет, что украденные в ходе атаки на Trivy npm-токены стали стартовой площадкой для последующего распространения CanisterWorm.

Разработчикам и DevSecOps-командам важно помнить, что риск не ограничивается одним «плохим» пакетом: проблема в том, что заражённая зависимость может превратить машину разработчика или CI/CD runner в точку дальнейшего распространения по всей цепочке публикации. Из-за этого компрометация одного токена способна быстро выйти за пределы одного репозитория или одной команды.

CanisterWorm опасен не только тем, что ворует npm-токены, а тем, что превращает их в механизм автоматического заражения других пакетов. Для npm-экосистемы это полноценная цепная supply-chain атака.

Есть новость? Станьте автором.

Мы сотрудничаем с независимыми исследователями и специалистами по кибербезопасности. Отправьте нам новость или предложите статью на рассмотрение редакции.

Вопросы по теме

Как определить, затронута ли моя среда червём CanisterWorm?
Чтобы определить, затронута ли ваша среда этой кампанией, необходимо проверить деревья зависимостей, файловые системы, сетевые журналы и учетные записи npm на наличие конкретных индикаторов компрометации (IoC) и моделей поведения.