Экосистема Node.js вновь стала ареной масштабной атаки на цепочку поставок программного обеспечения. 20 марта 2026 года исследователи обнаружили компрометацию десятков пакетов в реестре NPM с помощью ранее неизвестного червя. Инцидент демонстрирует тревожную эволюцию тактик злоумышленников, которые теперь используют децентрализованные блокчейн-платформы для управления вредоносной инфраструктурой, что значительно затрудняет противодействие. Атака напрямую затрагивает разработчиков и компании, использующие популярные JavaScript-библиотеки, и, по мнению экспертов, является продолжением кампании, начавшейся менее суток назад.
Описание
В ходе атаки, получившей название CanisterWorm, были скомпрометированы как минимум 47 пакетов. В зону поражения попали 28 пакетов в области видимости (scope) "@EmilGroup", 16 пакетов из "@opengov", а также отдельные популярные библиотеки, включая "@teale.io/eslint-config", "@airtm/uuid-base32" и "@pypestream/floating-ui-dom". С технической точки зрения, атака представляет собой сложную трехэтапную архитектуру, предназначенную для скрытного закрепления в системе и последующего распространения. Особенностью кампании стало использование канистры (canister) в блокчейн-проекте Internet Computer (ICP) в качестве децентрализованного и устойчивого к блокировкам центра управления (Command and Control, C2). Это первый зафиксированный случай применения подобной технологии в подобных целях, что знаменует новый этап в развитии угроз для открытого ПО.
Анализ кода показывает, что вредоносная нагрузка активируется через стандартный хук "postinstall" в "package.json". При установке пакета выполняется скрипт на Node.js, который декодирует и записывает на диск вторую стадию - бэкдор на Python. Этот скрипт, в свою очередь, создает и запускает службу "systemd" на уровне пользователя, что обеспечивает постоянство (persistence) даже после перезагрузки системы, не требуя привилегий администратора. Для маскировки все компоненты названы в честь инструментов PostgreSQL ("pgmon", "pglog", ".pg_state"), чтобы не привлекать внимание разработчиков при беглом осмотре процессов. Наиболее изощренным элементом является механизм связи с C2. Вместо обращения к традиционному серверу, бэкдор опрашивает канистру в сети ICP, которая возвращает URL для загрузки финальной полезной нагрузки. Это решение децентрализовано, не имеет единой точки отказа и устойчиво к цензуре, что позволяет злоумышленникам удаленно менять вредоносный код на всех зараженных машинах, просто обновляя ссылку в канистре.
Исследовательская группа Aikido в своём детальном отчёте связывает эту атаку с инцидентом в проекте Trivy, произошедшим менее чем за 24 часа до этого, и приписывает активность одной и той же группе угроз, известной как TeamPCP. Сходство техник и используемого кода подтверждает эту гипотезу. Первоначально атакующие использовали ручной инструмент распространения "deploy.js", который с помощью скомпрометированных токенов доступа к NPM автоматически находил все пакеты, доступные для публикации, повышал их патч-версию и подменял содержимое. Однако уже через час после первой волны атака эволюционировала. В обновленных версиях пакета "@teale.io/eslint-config" червь обрел способность к самовоспроизведению.
Новая версия вредоносного скрипта включает функцию "findNpmTokens()", которая во время установки активно ищет и собирает токены аутентификации NPM на машине жертвы. Она анализирует файлы ".npmrc" в домашнем каталоге пользователя, в текущем рабочем каталоге и в системных директориях, а также сканирует переменные окружения, типичные для CI/CD-сред (непрерывной интеграции и доставки). При обнаружении токенов червь автоматически запускает механизм распространения, превращая машину разработчика или сборки в новый вектор атаки. Это качественно меняет характер угрозы: от единичной компрометации аккаунта до потенциально неконтролируемой цепной реакции в экосистеме. Примечательно, что в этой итерации реальная вредоносная нагрузка была заменена на тестовую строку, что, вероятно, являлось проверкой работоспособности всей цепочки заражения перед полномасштабным развертыванием.
Последствия подобных атак носят комплексный характер. Помимо прямого риска для конечных пользователей, которые получают на свои машины скрытый бэкдор, под угрозой оказывается доверие к открытым реестрам пакетов. Компании, чьи пакеты были скомпрометированы, могут столкнуться с репутационным ущербом и юридическими сложностями. Использование децентрализованного C2 на блокчейне ICP создает серьезные проблемы для специалистов по информационной безопасности и правоохранительных органов, поскольку делает практически невозможным быстрый вывод из строя управляющей инфраструктуры злоумышленников. В свою очередь, способность червя к автономному распространению через токены разработчиков предвещает возможность вспышек, масштаб которых будет сложно предсказать и локализовать. Этот инцидент служит очередным суровым напоминанием о хрупкости цепочек поставок в современной разработке и необходимости внедрения строгих практик безопасности на всех этапах жизненного цикла ПО.
Индикаторы компрометации
URLs
- https://tdtqy-oyaaa-aaaae-af2dq-cai.raw.icp0.io/
SHA256
- 0c0d206d5e68c0cf64d57ffa8bc5b1dad54f2dda52f24e96e02e237498cb9c3a
- 5e2ba7c4c53fa6e0cef58011acdd50682cf83fb7b989712d2fcf1b5173bad956
- 61ff00a81b19624adaad425b9129ba2f312f4ab76fb5ddc2c628a5037d31a4ba
- 7df6cef7ab9aae2ea08f2f872f6456b5d51d896ddda907a238cd6668ccdc4bb7
- c37c0ae9641d2e5329fcdee847a756bf1140fdb7f0b7c78a40fdc39055e7d926
- e9b1e069efc778c1e77fb3f5fcc3bd3580bbc810604cbf4347897ddb4b8c163b
- f398f06eefcd3558c38820a397e3193856e4e6e7c67f81ecc8e533275284b152