Вредоносные npm-пакеты атакуют Windows и WSL через PowerShell
В августе 2026 года оператор разместил 40 пакетов в npm, которые имитировали популярные библиотеки, включая chalk, axios, commander, lodash, react и typescript. Большинство названий содержали опечатки или использовали захваченные пространства имён.
Все пакеты имели версию 1.0.0 и автоматический hook scripts/postinstall.js. Скрипты профилировали хост и связывались с жёстко заданным сервером управления. Адрес назначения формировался во время выполнения из массивов, поэтому IP-адрес не хранился в открытом виде.
Атака была ориентирована на Windows и WSL
Пакеты впоследствии удалили, однако это не устранило инфраструктуру второго этапа. Установщик целенаправленно проверял нативную платформу и для Linux-систем выявлял Windows Subsystem for Linux (WSL) через переменные окружения и файлы /proc.
URL полезной нагрузки и логику доставки скрывали четыре байтовых массива. Они были закодированы с использованием повторяющегося ключа XOR и пароля stf2026.
В WSL скрипт вызывал скрытый мост PowerShell, чтобы перейти из среды Linux на базовый хост Windows. В нативной Windows он применял HTTPS-клиент Node для загрузки main.exe в %TEMP% и запускал файл без видимого окна или консоли.
Полезная нагрузка была скрыта внутри PE-файла
Полезная нагрузка представляла собой исполняемый PE-файл на Rust размером 22 969 344 байта. Его SHA-256 имеет значение 6f088ade49456db2422c3edfbb9998f4a3e9cce7c4c00a7279fb45d672a82b7d.
Только около 265 КБ файла содержали исполняемый код. Приблизительно 98,7% занимал шестнадцатеричный текст, представлявший зашифрованную полезную нагрузку в секции .rdata.
Обёртка декодировала и расшифровывала содержимое в памяти, затем выполняла его в том же процессе. При этом она не создавала дочерний процесс и не сохраняла постоянный файл на диске.
PE-файл имел обнулённую метку времени. Он использовал графическую подсистему, загружал криптографические библиотеки Windows, DPAPI и сырые сокеты. Среды выполнения .NET при этом не загружались.
Какие данные пытались собрать
Распакованный этап определял жертву через api.ipify.org, после чего пытался загрузить собранные данные на upload.gofile.io.
Целевая информация включала:
- 26 локаций криптокошельков для настольных ПК;
- файлы
Local State; - cookies, истории и
Web Dataбраузеров семейства Chromium; - директории
tdataTelegram Desktop.
Проверка TLS-сертификата предотвратила успешный перехват в лабораторных условиях. Подтверждённую эксфильтрацию обнаружить не удалось.
На что должна реагировать информационная безопасность
Кампания показывает, что одного отключения npm недостаточно, если инфраструктура доставки, хостинг полезной нагрузки и сервисы сбора данных остаются разделёнными.
Обнаружение следует сосредоточить на следующих признаках:
- скрытый PowerShell, запускаемый из installation hooks;
- выполнение WSL-to-Windows;
- исполняемые файлы, записанные в
%TEMP%; - PE-файлы, упакованные в hex;
- быстрый доступ к сервисам публичного IP-адреса и сервисам загрузки файлов.
Отчет получен из сервиса CTT Report Hub. Права на отчет принадлежат его владельцу.
Ознакомиться подробнее с отчетом можно по ссылке.



