В npm обнаружили вредоносный пакет, который прячет вредоносный код с помощью невидимых символов Unicode и использует ссылки Google Calendar для своих управляющих серверов.
Специалисты компании Veracode рассказывают, что с начала мая вредоносный пакет os-info-checker-es6 был загружен более 1000 раз. При этом первая версия пакета была добавлена в npm еще 19 марта и являлась относительно безопасной, поскольку только собирала информацию о хосте.
После этого автор внес в пакет изменения, которые включали в себя бинарники для конкретных платформ и обфусцированные скрипты установки. В итоге 7 мая 2025 года была опубликована новая версия пакета, содержащая сложный код для связи с управляющим сервером, откуда доставляется итоговая полезная нагрузка.
Исследователи предупреждают, что последняя версия os-info-checker-es6, все еще доступная в npm на (1.0.8), и она является вредоносной.
Также отмечается, что вредоносный пакет является зависимостью для четырех других пакетов: skip-tot, vue-dev-serverr, vue-dummyy и vue-bit. Все они позиционируются как полезные утилиты для разработки и обеспечения доступности. Специалисты не смогли установить, связаны ли эти инструменты с тем же злоумышленником кампанией.
Исследователи рассказывают, что вредоносная версия os-info-checker-es6 встраивает данные в строку, которая выглядит как «|». Однако за этим символом следует длинная последовательность невидимых символов Unicode из диапазона Variation Selectors Supplement (U+E0100 - U+E01EF).
Обычно эти символы являются модификаторами, которые используются «для обеспечения специфических вариаций глифов в сложных письменностях». В данном случае их роль заключается в том, чтобы облегчить стеганографию, то есть сокрытие информации среди других данных.
Эксперты расшифровали и деобфусцировали строку, обнаружив в ней полезную нагрузку для сложного C&C-механизма, который использовал короткую ссылку Google Calendar для получения адреса конечной полезной нагрузки.
Так, после получения ссылки Google Calendar проверяется ряд перенаправлений, пока не будет получен ответ HTTP 200 OK. Затем из HTML-страницы события берется атрибут data-base-title, который содержит закодированный в base64 URL, указывающий на итоговую полезную нагрузку.
По словам исследователей, тело ответа содержит закодированную base64 полезную нагрузку для второго этапа атаки, а в заголовках HTTP, вероятно, передаются инициализационный вектор и секретный ключ. Все это может свидетельствовать о шифровании финального пейлоада.
Также было обнаружено, что полезная нагрузка выполняется с помощью eval(). Скрипт сохраняется во временный каталог, что предотвращает одновременный запуск нескольких экземпляров.
При этом в ходе анализа не удалось получить и исследовать финальную полезную нагрузку, и специалисты полагают, что эта кампания может быть временно неактивна или пока находится на совсем ранней стадии разработки.
Специалисты уже уведомили о своих находках представителей npm, однако пока перечисленные вредоносные пакеты не были удалены с платформы.