В экосистеме Node.js (NPM) была выявлена новая вредоносная кампания, в рамках которой злоумышленники распространяли инфостилер, маскирующийся под инструмент для игровых платформ. Атака демонстрирует сложный многоступенчатый подход, сочетающий использование публичных репозиториев, запутывание кода и кражу критически важных пользовательских данных, включая учётные записи Discord, браузеров и криптовалютные кошельки. Инцидент подчёркивает растущую изощрённость угроз, нацеленных на разработчиков, и недостаточность традиционных сигнатурных методов обнаружения для сложных, многослойных вредоносных программ.
Описание
Эксперты группы безопасности JFrog обнаружили два вредоносных пакета в репозитории NPM, которые служили точкой входа для атаки. Пакеты "bluelite-bot-manager" и "test-logsmodule-v-zisko" содержали предустановочный скрипт, который при установке автоматически загружал и запускал исполняемый файл Windows с названием "solara 1.0.0.exe" или "solara 1.0.1.exe". Файлы распространялись через ссылки на Dropbox, что изначально могло вызывать меньше подозрений у потенциальных жертв. Однако, как [сообщили] исследователи, ссылки на момент анализа уже не функционировали, а сами пакеты были оперативно удалены из NPM и помещены в «безопасный холдинг».
Первоначальный анализ загружаемого исполняемого файла на VirusTotal показал практически нулевой уровень детектирования антивирусными решениями, что могло создать ложное ощущение безопасности. Однако поведенческий анализ сразу выявил подозрительную активность: файл извлекал содержимое, пытался скачать фреймворк Python, а также читал и записывал данные в ключевые системные каталоги, включая папки браузеров и защищённые библиотеки Windows. Подозрения усиливали и метаданные файла: в качестве автора был указан «Fivem» (известный мод для Grand Theft Auto V), а описание «solara executer 1337 uhq no detect» содержало явные отсылки к хакерскому сленгу («1337» - leet) и заявлению о необнаружении.
Более глубокий статический анализ показал, что исполняемый файл представляет собой дроппер, внутри которого был запакован огромный набор ресурсов общим объёмом более 500 МБ. Среди них находился архив 7z, содержащий рабочее Node.js приложение. Его зависимость "package.json" раскрыла истинные намерения: пакеты включали библиотеки для дешифровки данных Windows DPAPI, работы с базами данных SQLite, выполнения HTTP-запросов и архивирования, что характерно для инфостилеров. Основная логика была реализована в сильно обфусцированном JavaScript-коде, который использовал методы сглаживания потока управления, мёртвый код и строковые таблицы для усложнения анализа.
После деобфускации стал ясен полный функционал вредоносной программы, самоназванной «Cipher Stealer». Её работа начинается с создания точки закрепления в системе (persistence) и промежуточной директории в "%TEMP%", маскирующейся под службу Windows. Основной целью кражи становятся токены и учётные данные Discord. Вредоносное ПО не только извлекает токены из локальных баз данных LevelDB, но и проводит их валидацию через официальный API Discord. Для гарантированного перехвата данных злоумышленники внедряют в клиент Discord второй этап вредоносной нагрузки, загружаемый с GitHub.
Этот инжект-скрипт обладает широкими возможностями: он перехватывает логин, двухфакторную аутентификацию, смену пароля и email, а также добавление банковских карт, отправляя все данные на управляемый злоумышленниками сервер. Особенно опасна функция социальной инженерии: скрипт может показать пользователю локализованное сообщение о якобы компрометации его email и подтолкнуть к смене адреса на контролируемый злоумышленниками. Параллельно Cipher Stealer ворует данные из множества браузеров (Chrome, Brave, Edge, Firefox и др.) как с помощью нативного JS-кода, так и через встроенный Python-скрипт, который при необходимости самостоятельно скачивает и устанавливает нужную версию Python.
Третьим ключевым вектором атаки является кража криптовалютных кошельков. Вредоносное ПО систематически проверяет стандартные пути хранения данных для Bitcoin, Exodus, Ethereum, Electrum и других популярных кошельков, копируя файлы для последующей эксфильтрации. Для кошелька Exodus также предпринимается попытка дешифровки seed-фразы. Все собранные данные архивируются и загружаются на файлообменник GoFile либо напрямую на сервер управления, после чего сводный отчёт отправляется через Discord Webhook.
Данный случай является показательным примером современной угрозы. С одной стороны, примитивный метод доставки через "npm install" был быстро обнаружен системами мониторинга NPM. С другой стороны, сам исполняемый артефакт успешно избегал детектирования сигнатурными антивирусами благодаря многослойной упаковке и обфускации. Это противоречие может указывать либо на недостаточную координацию между этапами операции, либо на стратегию, рассчитанную на быстрый сбор данных до неизбежного удаления пакетов. Пользователям, которые могли установить подозрительные пакеты, настоятельно рекомендуется удалить их, перевыпустить все пароли и токены, переустановить клиент Discord и проверить активность в криптовалютных кошельках. Для специалистов по безопасности инцидент служит напоминанием о критической важности поведенческого анализа и контроля целостности зависимостей в цепочках поставки программного обеспечения.
Индикаторы компрометации
URLs
- http://45.138.16.202:3002/8592943032/CIPHER-EH4L-VP30-5A0S-25C1
- https://api.gofile.io/servers
- https://discord.com/api/webhooks/1448019463642419332/QgXOp8XTaqjQVzoMmsd2ScUIlDZY36cNrgmjpr5kqR7LA1YZRmt7UJK_glJ5pKAEUeFm
- https://github.com/0xsdhzilqodizkahsqh/ozekqjsdhua
- https://i.imgur.com/yo0l1gz.png
- https://paste-pgpj.onrender.com/?p=
- https://raw.githubusercontent.com/0xsdhzilqodizkahsqh/ozekqjsdhua/refs/heads/main/injection.js
- https://www.dropbox.com/scl/fi/94tc8xcf25a629xt4g7yb/solara-1.0.0.exe?rlkey=g7t7wbtstvhu60mi4n1og4e5i&st=4hqzi50y&dl=1
- https://www.dropbox.com/scl/fi/dmybj48cyupf53y6t62nj/solara-1.0.1.exe?rlkey=nyvv718k4xq08frulg5dvz1du&st=9sk60muh&dl=1
- https://www.dropbox.com/scl/fi/yfz6a32t4pnzi3obmfnh1/solara-1.0.0.exe?rlkey=0f4dl9yp4z6epfjug4xz27ecm&st=0m8c5ze2&dl=1
SHA256
- 304be3e96c43718a24ae3114de68530f665ba3a2299d80dbb94f7883690b1459
- 52f3edb100809b62724f5cc20851181d1daf6ddff69453e611ce7681bb477d76
- 8b18f0218c28317b5870505b3a27d64536ed8e508a440638d56eac6600740432
- c9e29600cf6328734f6c25e947da1e46bda1e310bafe12981c6bef594006e850