Хакеры решили, что если добавить в название домена умное слово, то никто ничего не заметит.

Кампания PhantomRaven, нацеленная на разработчиков через каталог npm, получила продолжение. Специалисты обнаружили ещё три волны атак, в рамках которых злоумышленник разместил десятки вредоносных пакетов. Большая часть таких пакетов до сих пор доступна в каталоге и может попасть в проекты разработчиков.
Компания Endor Labs выявила 88 новых вредоносных пакетов, опубликованных с ноября 2025 года по февраль 2026 года. Кампания остаётся активной: 81 пакет по-прежнему доступен в npm, а два из трёх серверов управления продолжают работать.
PhantomRaven представляет собой атаку на цепочку поставок программного обеспечения. Злоумышленник использует приём Remote Dynamic Dependencies. Такой приём позволяет скрывать вредоносный код вне самого пакета. Пакет, размещённый в npm, выглядит безобидно и содержит простой сценарий «Hello, world!». Однако в файле package.json указывается зависимость не из каталога npm, а по прямому URL-адресу. Во время обычной установки npm автоматически скачивает архив с сервера злоумышленника и выполняет код.
Первая волна PhantomRaven стала известна осенью 2025 года. Тогда обнаружили более 126 вредоносных пакетов, которые успели скачать свыше 86 000 раз. Позднее выяснилось, что общее число пакетов в той волне превышало 200.
Новые этапы кампании получили условные названия Wave-2, Wave-3 и Wave-4. В рамках этих этапов злоумышленник публиковал пакеты через десятки одноразовых учётных записей. Для размещения использовали более 50 аккаунтов npm, зарегистрированных на разные электронные адреса. При этом инфраструктура постоянно менялась: регистрировались новые домены, менялись имена зависимостей и описания пакетов. Несмотря на такие изменения, вредоносный код оставался почти неизменным.
Механизм заражения выглядит довольно просто. Разработчик запускает команду npm install и устанавливает пакет. npm читает файл package.json и обнаруживает зависимость, которая ведёт на HTTP-адрес сервера злоумышленника. Менеджер пакетов загружает архив напрямую с такого сервера и запускает сценарий preinstall. После запуска вредоносный код собирает информацию из системы.
Сценарий извлекает адреса электронной почты разработчика из нескольких источников, включая файл .gitconfig, настройки npm и переменные окружения. Код также ищет токены сервисов непрерывной интеграции и доставки, например GitHub, GitLab, Jenkins и CircleCI. Дополнительно собирается информация о системе: IP-адрес, имя компьютера, версия Node.js и операционной системы.
Все собранные данные отправляются на сервер управления злоумышленника. Передача происходит сразу несколькими способами: через HTTP-запросы GET и POST, а также через соединение WebSocket. Такой подход повышает вероятность успешной передачи данных даже при фильтрации сетевого трафика.
Инфраструктура PhantomRaven демонстрирует довольно устойчивый шаблон. Все домены командных серверов зарегистрировали через Amazon Registrar и разместили на серверах AWS. В именах доменов постоянно встречается слово «artifact», чтобы создать впечатление обычного сервера для хранения пакетов. Связь с серверами происходила только по обычному HTTP без шифрования.
Код вредоносной нагрузки почти не менялся на протяжении всей кампании. Специалисты сравнили версии из разных волн и обнаружили, что 257 из 259 строк совпадают полностью. Единственное отличие касается адреса сервера управления, на который отправляются данные.
Ещё одна особенность кампании – подмена популярных названий пакетов. Злоумышленник публиковал пакеты с именами, похожими на настоящие библиотеки и расширения. В одних случаях имитировались плагины Babel или ESLint, в других – пакеты GraphQL Codegen. Такой приём увеличивает шанс того, что разработчик по ошибке установит вредоносный пакет.
После публикации исследования ситуация вокруг некоторых пакетов начала меняться. Например, один из доменов, использовавшихся во второй волне, теперь отдаёт безобидный сценарий из нескольких строк. Однако такая замена кода лишь подчёркивает риск зависимостей по URL-адресам. Автор пакета может изменить содержимое на сервере в любой момент, не публикуя новую версию пакета в npm.
Изначально появлялась версия, что пакеты могли создать в рамках эксперимента по безопасности. Однако поведение кода и методы сбора данных указывают на полноценное вредоносное программное обеспечение. Пакеты собирали значительно больше информации, чем требуется для простого сигнала об установке, и никак не сообщали пользователям об эксперименте.
История PhantomRaven показывает уязвимость экосистемы открытого программного обеспечения. Пакеты могут выглядеть безобидно и проходить проверку, поскольку вредоносный код находится вне самого пакета. Для обнаружения подобных атак приходится анализировать не только содержимое пакетов, но и внешние зависимости и инфраструктуру, с которой взаимодействует менеджер пакетов.