TL; DR
W okresie od 1 do 6 maja 2026 r. jeden wydawca npm, alone5511, wprowadzono osiem pakietów o zerowej zależności, które wydają się być przeznaczone Microsoft / Wewnętrzne przestrzenie nazw pakietów w stylu platformy Azure.
Pakiety używały nazw takich jak cosmos-explorer, ms.analytics-web, icons.generated, latency-tracking-internal, carbonite-internal, carboniteapp. Kilka wersji używało wysokich wartości semver, takich jak 99.9.0 oraz 99.9.13, co jest powszechną taktyką polegającą na wprowadzaniu w błąd co do zależności, mającą na celu przewyższenie rangi prywatnych pakietów wewnętrznych.
Wydawca wycofał publikację wszystkich ośmiu pakietów siostrzanych z npm między 1 a 6 maja 2026 r. Bezpośrednie metadane rejestru potwierdziły, że pliki tarball zwracają teraz błąd HTTP 404 z CDN npm.
Jednakże klaster nadal ma znaczenie.
Ładunek w próbkach kanonicznych, carbonite-internal:99.9.0 oraz carboniteapp:99.9.0, uruchamia się w czasie instalacji za pomocą preinstall hak. Zbiera dane odcisku palca hosta, pobiera publiczny adres IP maszyny z api.ipify.org, tworzy fałszywy „RAPORT WYWIADOWCZY POZIOMU PRO”, oznacza gospodarza jako RCE VERIFIEDi wysyła raport do bota Telegramu poprzez API Telegram Bot.
Wczesne ostrzeganie przed złośliwym oprogramowaniem (MEW) firmy Xygeni System sklasyfikował próbki kanoniczne jako prawdopodobnie złośliwe, przyznając im wynik powyżej 91/100.
Śledzimy to jako wewnętrzną kampanię firmy Microsoft powodującą zamieszanie związane z zależnościami nazw, z odciskiem palca hosta w czasie instalacji i eksfiltracją sygnału Telegram.
Klaster: osiem pakietów, jeden wydawca
Konto wydawcy alone5511 użył adresu e-mail:
raistargaming703@gmail.com
Konto nie miało zweryfikowanego adresu e-mail, nie SCM weryfikacja i wynik reputacji npm wynoszący 2.
Referencyjna tożsamość GitHub, alonebeast002/beastcrypt, pojawił się również w kontekście klastra.
Wydawca udostępnił osiem powiązanych pakietów w ciągu sześciu dni. Wszystkie pakiety nie miały żadnych zależności i opierały się na tym samym ogólnym schemacie: mały pakiet, skrypt instalacyjny, odcisk palca hosta i sygnalizacja Telegram.
| # | Pakiet | Wersja złośliwa | Utworzono, UTC | Niepublikowane, UTC | Potwierdzono ładunek | Zainstaluj hak |
|---|---|---|---|---|---|---|
| 1 | badacz kosmosu | 1.1.3 | 2026-05-01T18:26Z | 2026-05-01T19:01Z | Wywnioskowano, ten sam wydawca / klaster | preinstalować, przypuszczalnie |
| 2 | sygnałydk-web | 1.0.0, 10.0.0 | 2026-05-04T13:57Z | 2026-05-04T18:51Z | Wnioskowane | preinstalować, przypuszczalnie |
| 3 | ms.analytics-web | 99.0.0, 99.9.13 | 2026-05-04T18:47Z | 2026-05-05T10:07Z | Wnioskowane | preinstalować, przypuszczalnie |
| 4 | ikony.wygenerowane | 99.9.13 | 2026-05-05T10:02Z | 2026-05-05T12:57Z | Wnioskowane | preinstalować, przypuszczalnie |
| 5 | śledzenie opóźnień | 99.9.0 | 2026-05-05T11:57Z | 2026-05-05T12:57Z | Wnioskowane | preinstalować, przypuszczalnie |
| 6 | śledzenie opóźnień wewnętrznych | Wersje usunięte z rejestru | 2026-05-06T06:02Z | 2026-05-06T08:35Z | Wnioskowane | preinstalować, przypuszczalnie |
| 7 | carboniteapp | 99.9.0 | 2026-05-06T05:49Z | 2026-05-06T08:35Z | Tak, pełny przepływ kodu skanera | preinstalacja: węzeł index.js |
| 8 | karbonit-wewnętrzny | 99.9.0 | 2026-05-06T06:14Z | 2026-05-06T08:36Z | Tak, pełny przepływ kodu skanera | preinstalacja: węzeł index.js |
Łączna liczba złośliwych krotek wersji w klastrze: 9+.
W przypadku niektórych rekordów pakietów pokrewnych wersje zostały usunięte po wycofaniu publikacji, co ogranicza możliwość dokładnej rekonstrukcji wyłącznie na podstawie danych z rejestru publicznego.
Dlaczego imiona mają znaczenie
Nazwy pakietów są najsilniejszym sygnałem.
Wyglądają jak wewnętrzne pakiety SDK, telemetrii, generowania ikon, eksploratora lub śledzenia opóźnień:
cosmos-explorer
signalsdk-web
ms.analytics-web
icons.generated
latency-tracking
latency-tracking-internal
carbonite-internal
carboniteapp
To nie jest losowe nazewnictwo. Wygląda na skalibrowane. pomieszanie zależności.
Kilka późniejszych pakietów używało wysokich numerów wersji:
99.0.0
99.9.0
99.9.13
10.0.0
Ma to znaczenie, ponieważ ataki typu dependency-confusion często opierają się na pakietach publicznych o wyższych wersjach niż pakiety z wewnętrznego rejestru prywatnego. Jeśli system kompilacji jest błędnie skonfigurowany, menedżer pakietów może wybrać publiczną wersję npm zamiast docelowej wersji wewnętrznej.
Wydaje się również, że wydawca z czasem eskaluje swoją działalność.
Wczesne pakiety korzystały z wersji wyglądających normalnie, takich jak 1.1.3 oraz 1.0.0. Późniejsze paczki przeniosły się do 99.x.x oraz 99.9.xTa zmiana jest zgodna z dostrajaniem kampanii przez aktora pod kątem wewnętrznego zachowania rozwiązywania pakietów.
Co dzieje się podczas instalacji
Próbki kanoniczne, carbonite-internal:99.9.0 oraz carboniteapp:99.9.0, zadeklarować preinstall hak:
{
"scripts": {
"preinstall": "node index.js"
}
}
Oznacza to, że ładunek zostanie uruchomiony zanim npm zakończy instalowanie zależności.
To najwcześniejszy możliwy punkt zaczepienia w czasie instalacji. Deweloper nie musi importować pakietu. Kompilacja nie musi wykonywać kodu aplikacji. Sama instalacja wystarczy.
Ładunek jest niewielki, ma rozmiar około 2.4 KB i nie pełni żadnej funkcji poza nawigacją.
Zachowanie ładunku
index.js Plik wykonuje cztery główne akcje.
Po pierwsze, to wzywa api.ipify.org aby pobrać publiczny adres IP hosta:
https://api.ipify.org
Po drugie, zbiera podstawowe dane odcisku palca hosta, korzystając z interfejsów API systemu operacyjnego Node.js:
os.userInfo()
os.hostname()
os.platform()
os.networkInterfaces()
os.uptime()
Po trzecie, formatuje zebrane dane do raportu wielowierszowego z dosłownym banerem:
PRO-LEVEL INTELLIGENCE REPORT
Raport kończy się słowami:
Status: 🟢 RCE VERIFIED
Po czwarte, wysyła raport do Telegramu za pośrednictwem sendTelegram(report) funkcja, korzystając z punktu końcowego Telegram Bot API:
https://api.telegram.org/bot/sendMessage
Dokładny token bota Telegram jest przechowywany w nieopublikowanych plikach tarball i można go odzyskać z wewnętrznej pamięci npm.
Dlaczego baner „RCE Verified” jest ważny
Dosłownie RCE VERIFIED znacznik jest znaczący pod względem operacyjnym.
Ładunek nie uruchamia backdoora. Nie jest utrwalany. Nie kradnie bezpośrednio danych uwierzytelniających do chmury. Zamiast tego potwierdza, że wykonanie kodu nastąpiło podczas instalacji pakietu.
To wystarczy do przeprowadzenia kampanii dowodu wykonania polegającej na pomyleniu zależności.
Jeśli atakujący otrzyma wiadomość w usłudze Telegram ze środowiska docelowego, będzie wiedział, że publiczny pakiet npm został rozwiązany i wykonany w prawdziwym hoście, programie uruchamiającym CI, stacji roboczej programisty lub środowisku kompilacji.
Innymi słowy, złośliwe oprogramowanie nie tylko gromadzi metadane hosta. Sprawdza również, czy rozwiązanie pakietu docelowego nadaje się do wykorzystania.
Klasyfikacja MEW Xygeni
Xygeni MEW sklasyfikował próbki kanoniczne jako prawdopodobnie złośliwy, z wynikiem powyżej 91/100.
Wykrycia obejmowały:
| Dotkliwość | Wykrywanie | Znaczenie |
|---|---|---|
| Krytyczny | eksfiltracja_danych_wrażliwych | req.write(data) przenosi raport odcisku palca hosta do wychodzącego komunikatu POST w Telegramie |
| Wysoki | złośliwe_skrypty_instalacyjne | preinstall: node index.js uruchamia sygnalizator w momencie instalacji |
| Niski | podejrzane_żądanie | Odkrywanie publicznego adresu IP za pomocą api.ipify.org |
| Niski | podejrzane_żądanie | Telegram Bot API – punkt końcowy wychodzący |
| Niski | pakiet_trywialny | Pakiet nie ma żadnego sensownego celu poza sygnalizowaniem |
| Informacje | wyliczenie_danych_wrażliwych | Podano szczegóły dotyczące hosta, takie jak czas sprawności, informacje o użytkowniku i nazwa hosta |
Obie carbonite-internal:99.9.0 oraz carboniteapp:99.9.0 miały identyczne ładunki, w tym ten sam identyfikator przepływu kodu i skrypty instalacyjne o równoważnym bajcie.
Indeks projektów wydawców MEW oznaczył wszystkie osiem pakietów jako część tego samego klastra wydawców/ładunków.
Dlaczego wzorzec samodzielnego wycofania publikacji ma znaczenie
Wszystkie osiem pakietów siostrzanych zostało wycofanych z publikacji przez wydawcę w ciągu kilku minut lub godzin od publikacji.
To zachowanie jest ważne.
Prawowici administratorzy czasami wycofują publikację pakietów, ale moment ten wygląda na próbę usunięcia danych przez atakującego. Pakiety pojawiały się, wykonywały swój ładunek w czasie instalacji, jeśli zostały rozwiązane przez cel, a następnie znikały z dostępu do rejestru publicznego.
To stwarza dwa problemy dla obrońców.
Po pierwsze, publiczne metadane npm stają się niekompletne po wycofaniu publikacji. Niektóre rekordy wersji mogą zostać usunięte lub trudniej je odtworzyć.
Po drugie, osoby broniące się, opierające się na aktualnym stanie rejestru, mogą przeoczyć pakiety, które były obecne w okresie narażenia, ale nie można ich już zainstalować.
Z tego powodu npm powinien zachować nieopublikowane pliki tarball wewnętrznie w celach dochodzeniowych. Bot Telegramu token znajdujący się w plikach tarball może pomóc w ustaleniu kanału odbiorczego i rekonstrukcji potencjalnych ofiar.
Wskaźniki naruszenia i wykrycia
Wydawca i konto
| Pole | Wartość: |
|---|---|
| nazwa użytkownika npm | alone5511 |
| adres e-mail wydawcy npm | raistargaming703@gmail.com |
| reputacja npm | 2 |
| Zweryfikowano adres e-mail | Nie |
| SCM zweryfikowana | Nie |
| Referencyjna tożsamość GitHub | alonebeast002/beastcrypt |
Nazwy pakietów, których to dotyczy
cosmos-explorer
signalsdk-web
ms.analytics-web
icons.generated
latency-tracking
latency-tracking-internal
carbonite-internal
carboniteapp
Podejrzane wzorce wersji
10.0.0
99.0.0
99.9.0
99.9.13
Te wyższe wersje są szczególnie istotne w przypadku dochodzeń w sprawie pomyłek zależności, ponieważ mogą mieć wyższą rangę niż prywatne wersje pakietów.
Punkty końcowe sieci
| Typ | Wartość: |
|---|---|
| Badanie publicznego adresu IP | https://api.ipify.org |
| Zlew eksfiltracyjny | https://api.telegram.org/bot<token>/sendMessage |
| Metoda eksfiltracji | Telegram Bot API POST |
Markery ładunku
Wyszukaj skrypty instalacyjne pod kątem następujących ciągów:
PRO-LEVEL INTELLIGENCE REPORT
Status: 🟢 RCE VERIFIED
sendTelegram(
Należy również oznaczyć ten wzorzec manifestu:
{
"scripts": {
"preinstall": "node index.js"
}
}
Szczególnie w połączeniu z:
- Zero zależności
- Mały rozmiar opakowania
- Nazwa pakietu wyglądająca wewnętrznie
- Wysoka wersja semver
- Interfejsy API do odcisków palców hosta
- Ruch w interfejsie API bota Telegramu
Interfejsy API do odcisków palców hosta
Kanoniczny ładunek wykorzystuje:
os.userInfo()
os.hostname()
os.platform()
os.networkInterfaces()
os.uptime()
Dociera również do:
https://api.ipify.org
aby przechwycić publiczny adres IP hosta.
Notatki dotyczące wykrywania
Istnieje kilka zasad, które mogą obejmować tę kampanię i jej warianty.
Najpierw monitoruj skrypty instalacyjne npm, które kontaktują się z Telegramem:
api.telegram.org
Skrypt instalacyjny pakietu prawie nigdy nie powinien wysyłać wiadomości POST do Telegrama. Należy to traktować jako wrogie, chyba że istnieje bardzo wyraźny i sprawdzony wyjątek.
Po drugie, flaga preinstall skrypty w małych pakietach o zerowej zależności i nazwach wyglądających na wewnętrzne.
Połączenie małego pakietu, wysokiej wersji semver i wewnętrznej nazwy w stylu przestrzeni nazw jest silnym sygnałem pomieszania zależności.
Po trzecie, zwracaj uwagę na nazwy pakietów, które wyglądają jak prywatne moduły inżynieryjne opublikowane przez publiczne konta npm o niskiej reputacji.
Przykłady z tego klastra obejmują:
ms.analytics-web
latency-tracking-internal
carbonite-internal
icons.generated
Po czwarte, poszukaj odniesień do plików blokujących dla ośmiu nazw pakietów w systemach CI i stacjach roboczych programistów.
Szukanie:
package-lock.json
yarn.lock
pnpm-lock.yaml
npm-shrinkwrap.json
Każde dopasowanie powinno skutkować przeglądem zależności.
Sugerowane działania rejestru
Ten klaster został już wycofany z publikacji w momencie raportowania. Jednak wycofanie publikacji nie eliminuje ryzyka.
Zalecane działania po stronie npm:
- Sprawdź, czy cofnięcie publikacji było działaniem inicjowanym przez atakującego, czy też normalnym działaniem administratora.
- Zawieś lub zablokuj konto wydawcy
alone5511. - Dodaj wydawcę, adres e-mail, nazwy pakietów i znaczniki ładunku do list blokowanych w celu wykrywania nadużyć i łańcucha dostaw.
- Zachowaj nieopublikowane pliki tarball w pamięci wewnętrznej na potrzeby analiz kryminalistycznych.
- Wyodrębnij token bota Telegramu z zachowanych plików tarball.
- W miarę możliwości współpracuj z Telegramem, aby zidentyfikować kanał odbiorczy i odtworzyć dane telemetryczne potencjalnej ofiary.
Lista kontrolna reakcji na kompromisy
Jeśli którykolwiek z pakietów, których dotyczył problem, pojawił się w plikach blokady, dziennikach kompilacji, pamięci podręcznej pakietów lub historii instalacji CI w okresie narażenia, należy to potraktować jako zdarzenie wykonania powodujące zamieszanie związane z zależnościami.
Zalecana odpowiedź:
- Określ miejsce zainstalowania pakietu: na lokalnej stacji roboczej, na programie uruchamiającym CI, na agencie kompilacji lub na obrazie kontenera.
- Zachowaj pliki blokad, pamięć podręczną npm, dzienniki kompilacji, historię powłoki i dane wyjściowe menedżera pakietów.
- Sprawdź dzienniki sieci wychodzącej
api.telegram.orgorazapi.ipify.orgpodczas okna instalacji. - Sprawdź, czy instalacja została przeprowadzona w środowisku z poufnymi zmiennymi, poświadczeniami lub wewnętrznym dostępem do sieci.
- Rotacja tokenów udostępnionych środowisku instalacyjnemu, jeśli hostem był uprzywilejowany użytkownik modułu CI lub stacja robocza programisty.
- Konfiguracja rozwiązania pakietu audytu w przypadku pomyłki w rejestrze publicznym/prywatnym.
- Wymuś zakresowe pakiety prywatne i przypinanie rejestru.
- Blokuj niezatwierdzone pakiety publiczne, które pasują do wewnętrznych wzorców nazewnictwa.
- Dodaj guardrails do skryptów instalacyjnych, szczególnie
preinstall,install,postinstall.
Co obrońcy powinni wynieść
Ta kampania nie jest skomplikowana technicznie. Właśnie dlatego jest taka ważna.
Ładunek jest niewielki, bezpośredni i łatwy do uruchomienia. Atakujący nie potrzebuje uporczywości ani zaawansowanego złośliwego oprogramowania. Wystarczy mu jedna błędnie skonfigurowana ścieżka do rozwiązania pakietu.
Prawdziwym ryzykiem jest pomyłka co do zależności.
Pakiet o znanej wewnętrznej nazwie, wysokim numerze wersji i preinstall hak może obrócić się normalnie npm install do sygnału radiowego z wnętrza Twojego otoczenia.
Dla litu szacuje się DevSecOps Zespoły, lekcja jest jasna: wewnętrzne nazwy pakietów to wrażliwe zasoby. Traktuj je jak powierzchnię ataku.
Zgłoszono do npm w celu egzekwowania na poziomie konta, umieszczenia na czarnej liście i zachowania nieopublikowanego pliku tarball.







