Cайт веб-разработчика, программиста Ruby on Rails ESV Corp. Екатеринбург, Москва, Санкт-Петербург, Новосибирск, Первоуральск

В npm нашли пакеты, которые загружают троян на Windows под видом CSS-библиотек

Три новых вредоносные пакеты в npm маскируются под инструменты для работы с CSS и шифрованием, но после установки загружают на Windows троян удаленного доступа. Вредоносная программа собирает сведения о компьютере, похищает пароли и данные расширений Google Chrome, выполняет команды злоумышленников и передает файлы на удаленный сервер.

Подозрительные пакеты называются aes-decode-runner-pro, postcss-minify-selector и postcss-minify-selector-parser. На момент обнаружения первый загрузили 145 раз, второй 256 раз, третий 615 раз. Все три появились за последний месяц от пользователя npm под именем abdrizak и еще оставались доступными для скачивания.

Названия подобраны так, чтобы не вызвать лишних вопросов у разработчика. aes-decode-runner-pro и postcss-minify-selector-parser выдают себя за библиотеки с несколькими слоями шифрования AES и собственными кодеками, при этом обе зависят от настоящего пакета postcss-selector-parser, postcss-minify-selector обещает сжимать селекторы CSS для PostCSS и тянет за собой postcss-minify-selector-parser.

Особенно опасен последний прием. Название postcss-minify-selector-parser почти повторяет имя популярной библиотеки postcss-selector-parser, которую скачивают более 127 млн раз в неделю. Независимо от выбранного пакета заражение приводит к одному и тому же Windows-вредоносу.

Цепочка начинается с загрузчика JavaScript. Он записывает на диск скрипт PowerShell под именем settings.ps1 и запускает его. Скрипт загружает со стороннего сервера nvidiadriver[.]net ZIP-архив через штатную утилиту Windows curl.exe.

В архиве находится сценарий Visual Basic update.vbs, который запускается через wscript.exe. Вместе с ним загружаются встроенная среда Python, файл loader.py и несколько нативных расширений Python с расширением .pyd, собранных с помощью Nuitka. Сценарий Visual Basic готовит окружение Python и передает управление loader.py, после чего запускается основной код трояна.

Функции вредоносной программы распределены между расширениями Python. config.pyd хранит адрес сервера управления, идентификаторы команд и названия ключей реестра. api.pyd обменивается данными с сервером управления, а audiodriver.pyd запускает основной цикл работы трояна. Модуль command.pyd собирает сведения о зараженном компьютере, пытается определить виртуальную машину, выполняет команды оболочки и отвечает за передачу файлов. util.pyd работает с архивами tar и gzip.

Наибольший интерес представляет auto.pyd. Модуль похищает данные Chrome и информацию из расширений браузера, а также пытается обойти App-Bound Encryption, защиту Chrome, которая привязывает шифрование учетных данных к конкретному приложению. После успешного запуска троян связывается с сервером управления по адресу 95.216.92[.]207:8080, получает команды, загружает на зараженный компьютер новые файлы и отправляет похищенные данные наружу.

Одновременно обнаружили еще несколько кампаний против экосистем npm и TypeScript. Пакет apintergrationpost выдает себя за клиент Node.js для разрешенных проверок защищенности, но устанавливает Linux-троян удаленного доступа MYRA. Во время установки программа компилирует нативный руткит на C, создает три независимых механизма закрепления в системе, маскируется под службу systemd, умеет работать без сохранения полезной нагрузки на диск и дает атакующему интерактивную оболочку с передачей изображения экрана.

Пакет @withgoogle/stitch-sdk имитирует Stitch, инструмент Google для ИИ-дизайна. После установки он ищет учетные данные разработчика в восьми местах: Claude Code, конфигурации Git, файле ~/.git-credentials, открытых ключах SSH, GitHub CLI, настройках npm, файле ~/.npmrc и конфигурации Docker ~/.docker/config.json. Найденные данные пакет отправляет на домен stitch-production[.]org/api/v1, которым управляют злоумышленники.

Еще пять пакетов, procwire, routecraft, endpointmap, bytecraft и staticlayer, образуют отдельную цепочку поставок. routecraft зависит от procwire, а procwire в свою очередь подтягивает endpointmap и bytecraft. Во время установки на Windows машина разработчика получает с внешнего сервера двоичный загрузчик и запускает его. staticlayer работает на стороне атакующих: пакет выдает файл только клиенту с точным значением User-Agent, которое использует основной загрузчик.

Пользователям, которые установили любой из перечисленных пакетов, советуют немедленно удалить зависимости, найти и стереть созданные ими файлы, а затем сменить все учетные данные с затронутого компьютера. Одного удаления пакета может не хватить, поскольку трояны успевают сохранить файлы, прописать закрепление в системе или скопировать ключи доступа до очистки проекта.

Атаки на npm в последние недели затронули и инструмент для работы с графами знаний gonex-AI/Understand-Anything. Вредоносный код связывается с одним из трех заранее прописанных серверов управления, передает метку кампании, расшифровывает загруженный клиент-бот с помощью XOR и запускает его. Следующая команда приходит еще более запутанным путем: программа читает последнюю транзакцию по адресу в сети Tron, получает из нее хеш транзакции в сети BSC и уже там находит активную полезную нагрузку.

Аналитики связали активность с северокорейской операцией PolinRider. Злоумышленники внедряли обфусцированный JavaScript в легитимные конфигурационные файлы разработчиков почти в 2000 скомпрометированных репозиториях GitHub. Код загружает известный похититель данных BeaverTail, который затем открывает путь для бэкдора InvisibleFerret.

В одной из атак использовали поддельное описание запроса на включение изменений с выдуманными результатами тестов. Полезную нагрузку спрятали в горизонтальных пробелах в измененном коде, а вторую стадию управления вынесли в публичный блокчейн, где запись можно опубликовать один раз и читать из любой точки мира. При проверке зависимостей разработчикам приходится смотреть не только на название библиотеки и число загрузок, но и на новые пакеты-двойники, цепочки зависимостей и код, который выполняется сразу после установки.

SecurityLab