Исследователи информационной безопасности обнаружили сразу две кампании по распространению вредоносных пакетов в репозиториях открытого кода. Первая из них, получившая название Solana FakeFix, насчитывает двадцать пакетов для npm (менеджера пакетов экосистемы JavaScript) и PyPI (репозитория пакетов языка Python). Эти пакеты были нацелены на разработчиков блокчейн-платформы Solana, которые используют её инструментарий для создания децентрализованных приложений. Вторая кампания, названная CMS Windows loader, включает пять пакетов в npm, предназначенных для загрузки и выполнения произвольного кода на операционной системе Windows.
Описание
Для бизнеса, работающего с криптовалютными проектами или полагающегося на цепочки поставок открытого кода, подобные угрозы означают прямой риск потери цифровых активов и доступа к инфраструктуре. Разработчики, использующие библиотеки из публичных репозиториев, могут невольно установить вредоносное программное обеспечение, которое похитит ключи от кошельков, облачные учётные данные, токены систем контроля версий и ключи SSH.
Исследователи из компании JFrog в своём отчёте подробно описали механизмы обеих кампаний. Solana FakeFix использует технику подмены названий: злоумышленники создали пакеты с именами, максимально похожими на официальные компоненты Solana. Например, были опубликованы пакеты "@solana-labs/web3.js", "@solana-labs/spl-toke", "solana-web3-stable" и "solana-rpc-client". Разработчик, ищущий исправленную сборку SDK (набора инструментов разработчика) или сообщество форк проекта, легко мог ошибиться.
Приманка была построена на реальных проблемах с зависимостями в экосистеме Solana. Злоумышленник под ником PassWord1337 создал девять обращений на GitHub в разных проектах, где представил "@solana-labs/web3.js" как поддерживаемую сообществом замену официальному пакету "@solana/web3.js" второй версии. В тексте утверждалось, что пакет исправляет ошибки сборки и типов, и предлагалась команда для установки. Позже эти обращения были отредактированы и сведены к одной букве x, что указывает на попытку скрыть следы.
Аккаунт PassWord1337 подписан на множество хакеров и разработчиков инструментов для криптовалютных атак. Единственный невредоносный комментарий от этого пользователя был сделан в 2025 году в одном из репозиториев, связанных с криптовалютами.
Доставка началась с использованием жизненного цикла установки пакетов. В npm вредоносная функция "postinstall" запускает скрипт сразу после установки, ещё до того как разработчик успеет импортировать библиотеку. Этот скрипт немедленно настраивает канал управления через Telegram (мессенджер) и начинает поиск секретных данных на локальной системе. Целями были файлы кошельков Solana (например, "id.json" в папках ".config/solana" и ".solana"), закрытые ключи SSH, учётные данные AWS (облачного провайдера) и переменные окружения из файлов ".env".
Пакеты для PyPI использовали другой триггер: вредоносная нагрузка была размещена внутри файла "__init__.py". Это означало, что для активации сбора данных достаточно простого импорта пакета. Три пакета PyPI содержали одинаковый компактный код, который передавал украденную информацию через ботов Telegram.
Постепенно кампания эволюционировала. Если первые версии представляли собой короткие установочные скрипты, то более поздние пакеты npm содержали полноценные, функционально выглядящие сборки Solana, к которым был добавлен скрытый вредоносный код. После легитимного экспорта разработчики вставляли стелер (модуль для кражи данных), который сканировал файлы с такими названиями, как "KEY", "SECRET", "MNEMONIC", "PRIVATE" и другими чувствительными словами. Некоторые варианты устанавливали постоянное закрепление в системе и через Telegram получали команды от оператора: извлечь ключи, SSH-данные, переменные окружения, содержимое кошелька или выполнить команды оболочки. Таким образом, пакет превращался в бэкдор (функцию скрытого удалённого доступа) с возможностью сброса данных.
Продвинутые версии также проверяли наличие изолированной среды (sandbox), подтверждали токены, обновлялись самостоятельно и даже изменяли настройки RPC (удалённого вызова процедур) Solana, перенаправляя запросы на сервер злоумышленника. Одна из версий пыталась загрузить дополнительный установщик из внешнего репозитория, хотя на момент анализа этот ресурс был недоступен. Тот же вариант пытался опустошить кошелёк Solana на указанный адрес.
Отдельного внимания заслуживает пакет "solana-mev-bot", который использовал прямой социальный инжиниринг. Он был представлен как бот для извлечения максимальной стоимости (MEV) - инструмент, позволяющий заработать на торговых операциях в блокчейне. Программа запрашивала у пользователя приватный ключ Solana, обещая автоматическую прибыль. Пользователь, в надежде на лёгкий доход, передавал ключ, после чего все средства отправлялись на кошелёк злоумышленника. Дополнительно пакет сканировал систему на предмет других ключей и токенов.
Вторая кампания, CMS Windows loader, загружалась как набор пакетов с именами, связанными с системами управления контентом, например "cms-storehub", "cms-helpgit" и "shopifyto-cms". Они не имели отношения к Solana, но использовали ту же технику выполнения на этапе установки. Вместо вредоносных скриптов Telegram они запускали скрытые команды PowerShell, устанавливали среду выполнения Deno (современный рантайм для JavaScript и TypeScript) и загружали удалённый код. Этот код, в свою очередь, обеспечивал постоянное присутствие в системе через реестр Windows, создание мьютекса и связь с управляющим сервером для получения следующих команд. Другие пакеты этой группы просто скачивали исполняемый файл ".exe" во временную папку и запускали его, после чего пытались скрыть следы.
Такие атаки представляют серьёзную угрозу для цепочек поставок программного обеспечения. Разработчики, устанавливающие пакеты из публичных репозиториев, должны проверять названия библиотек, особенно если они претендуют на статус "исправленных" или "форков". Важно обращать внимание на наличие скриптов в жизненном цикле установки и сетевую активность, исходящую от непроверенных пакетов. Злоумышленники всё лучше маскируют вредоносный код, встраивая его в функциональные модули, что делает обнаружение более сложным.
Индикаторы компрометации
NPM Package
- @solana-labs/ancor
- @solana-labs/etherjs
- @solana-labs/spl-toke
- @solana-labs/web3.js
- @solana-labs/web3js
- @solana-labs/web3-js
- cms-github
- cms-helpgit
- cms-storehub
- shopifyto-cms
- solana-js-client
- solana-mev-bot
- solana-rpc-client
- solana-web3-community
- solana-web3-fixed
- solana-web3-fork
- solana-web3-lts
- solana-web3-patched
- solana-web3-stable
- solana-web3-v1
- to-cms
PyPI Package
- solana-cli-py
- solana-web3
- solana-web3-py
- spl-token-py
Telegram
- Chat ID: 8346336575
- Chat ID: -1003931822407
Solana wallet
- D4hGgKKaBFZV1NUTWvYRwbpu8HHr3qmDfHyKCTLqbaE7
URLs
- http://104.239.66.223:8899
- http://77.90.185.225/6bc8fb9ad965fbb0.js
- http://77.90.185.225/ae83b0125aa433a7.js
- http://77.90.185.225/de2079d13aa5d620.js
- http://77.90.185.225/health
- http://77.90.185.225/message
- http://77.90.185.225/v026a4a141fd9e7d2dd.js
- http://77.90.185.225/v0277dff354c59f92d3.js
- http://77.90.185.225/v2{id}.js
- http://77.90.185.225/v26a4a141fd9e7d2dd.js
- https://meet-fr.com/ChromeSetup.exe
- https://raw.githubusercontent.com/PassWord1337/updates/main/install.js
- https://whiteshopify.replit.app/api/aCpsuydgwbasd.exe