В npm-репозитории обнаружено одиннадцать вредоносных пакетов: под угрозой разработчики криптовалют и Web3

security

Открытые репозитории пакетов давно стали неотъемлемой частью современной разработки. Особенно это касается экосистемы блокчейна и Web3, где скорость выпуска продуктов критически важна. Разработчики децентрализованных приложений, платформ DeFi, NFT-маркетплейсов и криптовалютных кошельков активно используют готовые библиотеки из npm - менеджера пакетов для языка JavaScript. Однако именно эта доверчивость превращает цепочку поставок ПО в удобную мишень. Исследователи компании Cyfirma обнаружили масштабную кампанию, в рамках которой злоумышленники разместили в npm одиннадцать подозрительных пакетов. Их общее число скачиваний превысило 2,72 миллиона, что делает атаку одной из крупнейших в своём роде.

Описание

Среди найденных пакетов особое место занимает moralis-sdk - он имитирует легитимный SDK популярной платформы Moralis. На момент анализа этот пакет набрал более 2,7 миллиона установок. Подобное распространение означает, что даже небольшой процент успешных заражений мог привести к компрометации тысяч сред разработки. Остальные десять пакетов тоже маскировались под известные инструменты: ethers-jss, coinbase-wallet-utils, Ganach, Solidty, Stelar-sdk, hardhat-deploy-utils, web3-deploy-helper, defi-sdk-core, ethers-compat и ethereum-dev-utils. Все они использовали тактику typosquatting - названия, максимально похожие на настоящие библиотеки, но с опечатками или незначительными отличиями.

Механизм заражения однотипен: вредоносный код запускается автоматически ещё на этапе установки пакета через npm. Для этого применяются хуки жизненного цикла - скрипты postinstall или preinstall. Пользователь просто добавляет зависимость в проект, а система npm выполняет команду без лишних вопросов. Злоумышленники пользуются этим, чтобы сразу после установки получить доступ к рабочей станции разработчика.

По данным исследования Cyfirma, все пакеты можно разделить на четыре операционных кластера. Первый - это ethers-jss и coinbase-wallet-utils, опубликованные одним и тем же аккаунтом sazuki. ethers-jss действует как троянизированная обёртка вокруг легитимной библиотеки ethers. При создании или восстановлении криптокошелька она перехватывает приватные ключи и мнемонические фразы, а затем отправляет их на управляемый злоумышленником сервер. Кроме того, пакет собирает переменные окружения, файлы конфигурации (hardhat.config.js, .env, secrets.json) и SSH-ключи. coinbase-wallet-utils выполняет разведку: получает имя хоста, имя пользователя, сведения об операционной системе и тоже отправляет их на внешний командный сервер.

Второй кластер - moralis-sdk. Его вредоносная логика сосредоточена в файле postinstall.js, который сильно обфусцирован. При деобфускации выяснилось, что код проверяет наличие определённого маркера на странице YouTube. Если проверка проходит, запускается многоступенчатая цепочка: PowerShell скачивает закодированные данные с Pastefy, затем с GitHub и выполняет их в памяти. Фактически пакет выступает загрузчиком - злоумышленник может в любой момент сменить финальную полезную нагрузку, не обновляя сам npm-пакет. На момент расследования удалённый сервер оказался недоступен, поэтому конечная стадия не была получена.

Третий кластер - пакеты Ganach, Solidty и Stelar-sdk. Они действуют уже почти два года и используют уникальный метод получения командного сервера через смарт-контракты в сети Ethereum. После установки скрипт обращается к определённому смарт-контракту, получает оттуда IP-адрес и порт, затем загружает платформозависимый бинарник (для Windows, Linux или macOS) и запускает его в фоне. Такая схема делает инфраструктуру атаки устойчивой к блокировкам: достаточно изменить запись в блокчейне, и все заражённые машины получат новый адрес.

Четвёртый кластер - пять пакетов от пользователя ethcompat: hardhat-deploy-utils, web3-deploy-helper, defi-sdk-core, ethers-compat и ethereum-dev-utils. Все они опубликованы в один день - 2 мая 2026 года - и в сумме набрали 2236 загрузок. После установки скрипт postinstall.js ищет приватные ключи, мнемонические фразы, переменные окружения с криптовалютными секретами. Собранные данные шифруются алгоритмом AES-256-GCM, а затем встраиваются в поле data транзакции Ethereum. Транзакция отправляется на кошелёк злоумышленника, причём для подписи используется первый же украденный приватный ключ жертвы. Таким образом, жертва сама оплачивает газ и одновременно передаёт свои секреты атакующему.

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

Масштаб случившегося напоминает: даже популярные репозитории с миллионами скачиваний не гарантируют безопасность. Разработчикам Web3 стоит внедрить строгий аудит зависимостей, проверять контрольные суммы пакетов и следить за аномалиями в поведении после установки. Использование блокчейн-инфраструктуры в качестве командного канала и канала эксфильтрации - новый тревожный тренд, который усложняет обнаружение подобных угроз.

Индикаторы компрометации

IPv4 Port Combinations

  • 193.233.201.21:3001

URLs

  • pastefy.app/RhPBKGli/raw

SHA1

  • 53b91117db931d3acbbfd15aa8400bb6691e023d
  • 63154cd9c79f9d14eb9be6c4efc2a778d31646ec
  • 70842cfc27b116d0db2fd7aa33d53a3faf510993
  • 74d3d5ab6d0fa4c6a5860598231728a6a893ecf7
  • e1bdcd1a7157f7d047a88ab4573723fe1e861951
  • fcc8a542aad41e758cf6c18571048890be53808e

SHA256

  • 17bad5ae5b2ac262f5f18854853869840245c344105aa38c7f550ef51d2e5f26
  • 2fa5b0475c3b70a3ba14c6a3938baf441a08b11841493b85e087d1d5e01eba49
  • 5c50f79038b31aa8a3a68b24d8b783dfbd2e15fff7586c5609e544a717ef7d05
  • 6585ca0d3e26c20ced638f46f4a89eea924d411b8753d3fcf434663593c7cf0b
  • 7269c00a6164fd01dd516e0a72b2bd84c82e78feb552e06964e4992ff0479dda
  • bab96257018df49ace8fe8adfadc74cf8327fcf9a9dc8a3a7c9ac8e18881df5f
  • d6abc7003b580472d808b338adef0b28eacc698cd4692f76cb2a91718ab78d88
  • d7ec660a2a29c1aabcbe9bff1ef29be9a9fab8c7fe7c40df4772dd2b5bdf9666
  • d94a2444268b339dfda2615f7800322fb318e0a484414bb17016cfcd5eb07c44
  • e848d73a68e4e8aea00a6257552b5872907dfaf7cce3d94636d7e59d286edeab
  • feabf10c8a9ba2775bb0f7f9d0b20203112b7df8e6d333a44d5a11eae0e38e86

YARA

Комментарии: 0