TL; DR
Med 1. in 6. majem 2026 je en sam založnik npm, alone5511, je predstavil osem paketov brez odvisnosti, ki so očitno usmerjeni Microsoft / Notranji imenski prostori paketov v slogu Azure.
Paketi so uporabljali imena, kot so cosmos-explorer, ms.analytics-web, icons.generated, latency-tracking-internal, carbonite-internalin carboniteappVeč različic je uporabljalo visoke vrednosti semerja, kot na primer 99.9.0 in 99.9.13, kar je pogosta taktika zmede zaradi odvisnosti, zasnovana za prehitevanje zasebnih internih paketov.
Založnik je med 1. in 6. majem 2026 že preklical objavo vseh osmih sorodnih paketov iz npm. Neposredni metapodatki registra so potrdili, da datoteke tarball zdaj vrnejo HTTP 404 iz npm CDN.
Vendar pa je grozd še vedno pomemben.
Koristni tovor v kanoničnih vzorcih, carbonite-internal:99.9.0 in carboniteapp:99.9.0, se izvaja ob namestitvi prek preinstall kavelj. Zbira podatke o prstnih odtisih gostitelja, pridobi javni IP-naslov naprave iz api.ipify.org, sestavi lažno »POROČILO O OBVEŠČEVALNIH PODATKIH NA RAVNI PROFESIONALCE«, gostitelja označi kot RCE VERIFIEDin pošlje poročilo Telegram botu prek Telegram Bot API-ja.
Xygenijev sistem za zgodnje opozarjanje na zlonamerno programsko opremo (MEW) Sistem je kanonične vzorce razvrstil kot verjetno zlonamerne z oceno nad 91/100.
To spremljamo kot Microsoftovo kampanjo zmede odvisnosti internih imen s prstnim odtisom gostitelja med namestitvijo in izkrcanjem signalov Telegram.
Grozd: Osem paketov, en založnik
Račun založnika alone5511 uporabil e-poštni naslov:
raistargaming703@gmail.com Račun ni imel preverjenega e-poštnega naslova, ne SCM preverjanje in ocena ugleda npm 2.
Referenčna identiteta GitHub-a, alonebeast002/beastcrypt, se je pojavil tudi v kontekstu grozda.
Založnik je v šestih dneh izdal osem sorodnih paketov. Vsi paketi niso imeli nobenih odvisnosti in so sledili istemu splošnemu vzorcu: majhen paket, skript ob namestitvi, prstni odtis gostitelja in Telegram beaconing.
| # | paket | Zlonamerna različica | Ustvarjeno, UTC | Neobjavljeno, UTC | Tovor potrjen | Namestite kavelj |
|---|---|---|---|---|---|---|
| 1 | raziskovalec vesolja | 1.1.3 | 2026-05-01T18:26Z | 2026-05-01T19:01Z | Izpeljano, isti založnik/gruča | prednamestitev, domnevno |
| 2 | signalsdk-splet | 1.0.0, 10.0.0 | 2026-05-04T13:57Z | 2026-05-04T18:51Z | Naveden | prednamestitev, domnevno |
| 3 | ms.analytics-splet | 99.0.0, 99.9.13 | 2026-05-04T18:47Z | 2026-05-05T10:07Z | Naveden | prednamestitev, domnevno |
| 4 | ikone.generirane | 99.9.13 | 2026-05-05T10:02Z | 2026-05-05T12:57Z | Naveden | prednamestitev, domnevno |
| 5 | sledenje latenci | 99.9.0 | 2026-05-05T11:57Z | 2026-05-05T12:57Z | Naveden | prednamestitev, domnevno |
| 6 | sledenje-zamudi-notranje | Različice, odstranjene iz zapisa v registru | 2026-05-06T06:02Z | 2026-05-06T08:35Z | Naveden | prednamestitev, domnevno |
| 7 | aplikacija za karbonit | 99.9.0 | 2026-05-06T05:49Z | 2026-05-06T08:35Z | Da, celoten potek kode skeniranja | prednamestitev: node index.js |
| 8 | notranji karbonit | 99.9.0 | 2026-05-06T06:14Z | 2026-05-06T08:36Z | Da, celoten potek kode skeniranja | prednamestitev: node index.js |
Skupno število zlonamernih različic v gruči: 9+.
Nekateri zapisi sorodnih paketov so imeli po preklicu objave odstranjene različice, kar omejuje natančno rekonstrukcijo samo iz podatkov javnega registra.
Zakaj so imena pomembna
Imena paketov so najmočnejši signal.
Izgledajo kot notranji paketi za SDK, telemetrijo, generiranje ikon, raziskovalec ali sledenje zakasnitvi:
cosmos-explorer signalsdk-web ms.analytics-web icons.generated latency-tracking latency-tracking-internal carbonite-internal carboniteapp To ni naključno poimenovanje. Zdi se, da je kalibrirano za zmeda glede odvisnosti.
Več kasnejših paketov je uporabljalo visoke številke različic:
99.0.0 99.9.0 99.9.13 10.0.0 To je pomembno, ker napadi z zmedo odvisnosti pogosto temeljijo na javnih paketih, ki imajo višje različice kot interni paketi zasebnega registra. Če je sistem za gradnjo napačno konfiguriran, lahko upravitelj paketov izbere javno različico npm namesto predvidene interne.
Zdi se, da založnik sčasoma tudi stopnjuje.
Zgodnji paketi so uporabljali različice običajnega videza, kot na primer 1.1.3 in 1.0.0Kasneje so se paketi premaknili v 99.x.x in 99.9.xTa premik je skladen z akterjem, ki prilagaja kampanjo za notranje vedenje pri reševanju paketov.
Kaj se zgodi med namestitvijo
Kanonični vzorci, carbonite-internal:99.9.0 in carboniteapp:99.9.0, razglasi preinstall kljuka:
{ "scripts": { "preinstall": "node index.js" } } To pomeni, da se koristni bremen zažene, preden npm konča z nameščanjem odvisnosti.
To je najzgodnejša možna točka za namestitev. Razvijalcu ni treba uvoziti paketa. Gradnja ne zahteva izvajanja kode aplikacije. Sama namestitev je dovolj.
Koristni tovor je majhen, približno 2.4 KB, in nima nobenega funkcionalnega namena razen signalizacije.
Obnašanje koristnega tovora
Naš index.js Datoteka izvede štiri glavna dejanja.
Najprej pokliče api.ipify.org za pridobitev javnega IP-naslova gostitelja:
https://api.ipify.org Drugič, zbira osnovne podatke o prstnih odtisih gostitelja z uporabo API-jev operacijskega sistema Node.js:
os.userInfo() os.hostname() os.platform() os.networkInterfaces() os.uptime() Tretjič, zbrane podatke oblikuje v večvrstično poročilo z dobesednim pasico:
PRO-LEVEL INTELLIGENCE REPORT Poročilo se konča z:
Status: 🟢 RCE VERIFIED Četrtič, poročilo pošlje Telegramu prek sendTelegram(report) funkcija z uporabo končne točke Telegram Bot API:
https://api.telegram.org/bot<token>/sendMessage Natančen žeton bota Telegram je shranjen v neobjavljenih datotekah tarball in bi ga bilo mogoče obnoviti iz notranjega pomnilnika npm.
Zakaj je pomemben pasica »RCE VERIFIED«
Dobesedno RCE VERIFIED Marker je operativno poveden.
Koristni bremen ne namesti zadnjih vrat. Ne vztraja. Ne krade neposredno poverilnic za oblak. Namesto tega potrdi, da se je med namestitvijo paketa izvedla koda.
To je dovolj za kampanjo dokazovanja izvajanja, ki temelji na zmedi odvisnosti.
Če napadalec prejme sporočilo Telegram iz ciljnega okolja, ve, da je bil javni paket npm razrešen in izveden znotraj pravega gostitelja, izvajalca CI, delovne postaje razvijalca ali okolja za gradnjo.
Z drugimi besedami, zlonamerna programska oprema ne zbira le metapodatkov gostitelja, temveč preverja tudi, ali je ločljivost ciljnega paketa izkoriščena.
Klasifikacija Xygeni MEW
Xygeni MEW je kanonične vzorce razvrstil kot verjetno zlonamerno, z oceno nad 91/100.
Zaznave so vključevale:
| Resnost | Odkrivanje | Pomen |
|---|---|---|
| Kritično | izbruh_občutljivih_podatkov | req.write(data) prenese poročilo o prstnem odtisu gostitelja v odhodno sporočilo POST v storitvi Telegram. |
| visoka | zlonamerne_namestitvene_skripte | prednamestitev: node index.js sproži svetilnik ob namestitvi |
| nizka | sumljiva_zahteva | Odkrivanje javnega IP-ja prek api.ipify.org |
| nizka | sumljiva_zahteva | Izhodna končna točka API-ja bota Telegrama |
| nizka | trivialni_paket | Paket nima nobenega smiselnega namena razen signaliziranja |
| Informacije | naštevanje_občutljivih_podatkov | Podrobnosti gostitelja, kot so čas delovanja, podatki o uporabniku in ime gostitelja, so naštete |
oba carbonite-internal:99.9.0 in carboniteapp:99.9.0 imel je enake koristne obremenitve, vključno z istim ID-jem toka kode in bajtno enakovrednimi namestitvenimi skripti.
Indeks projektov založnikov MEW je vseh osem paketov označil kot del istega grozda založnikov/koristnih podatkov.
Zakaj je vzorec samodejnega preklica objave pomemben
Založnik je vseh osem sorodnih paketov preklical objavo v nekaj minutah do urah po objavi.
To vedenje je pomembno.
Legitimni vzdrževalci včasih prekličejo objavo paketov, vendar je čas tukaj videti kot čiščenje s strani napadalca. Paketi so se pojavili, izvedli svoj namestitveni tovor, če ga je tarča razrešila, in nato izginili iz javnega registra.
To branilcem ustvarja dve težavi.
Prvič, javni metapodatki npm postanejo po preklicu objave nepopolni. Nekateri zapisi različic so lahko odstranjeni ali pa jih je težje rekonstruirati.
Drugič, zagovorniki, ki se zanašajo na trenutno stanje registra, lahko spregledajo pakete, ki so bili prisotni med oknom izpostavljenosti, vendar jih ni več mogoče namestiti.
Zaradi tega bi moral npm interno hraniti neobjavljene tarballe za forenzične preiskave. Bot za Telegram Žeton v tarballih lahko pomaga pri naštevanju prejemnega kanala in rekonstrukciji morebitnih žrtev.
Kazalniki kompromitacije in odkrivanja
Založnik in račun
| Polje | Vrednost |
|---|---|
| uporabniško ime npm | alone5511 |
| e-poštni naslov založnika NPM | raistargaming703@gmail.com |
| ugled NPM-ja | 2 |
| E-pošta preverjena | Ne |
| SCM preverjeno | Ne |
| Referenčna identiteta GitHub | alonebeast002/beastcrypt |
Prizadeta imena paketov
cosmos-explorer signalsdk-web ms.analytics-web icons.generated latency-tracking latency-tracking-internal carbonite-internal carboniteapp Sumljivi vzorci različic
10.0.0 99.0.0 99.9.0 99.9.13 Te višje različice so še posebej pomembne pri preiskavah zmede odvisnosti, saj lahko prekašajo različice zasebnih paketov.
Omrežne končne točke
| tip | Vrednost |
|---|---|
| Sonda za javni IP | https://api.ipify.org |
| Izločevalni umivalnik | https://api.telegram.org/bot<token>/sendMessage |
| Metoda eksfiltracije | OBJAVA API-ja bota Telegrama |
Označevalci koristnega tovora
Poiščite namestitvene skripte za te nize:
PRO-LEVEL INTELLIGENCE REPORT Status: 🟢 RCE VERIFIED sendTelegram( Označi tudi ta vzorec manifesta:
{ "scripts": { "preinstall": "node index.js" } } Še posebej v kombinaciji z:
- Nič odvisnosti
- Majhna velikost paketa
- Ime paketa, ki je videti kot notranji
- Visokotemperaturna različica
- API-ji za prstne odtise gostitelja
- Promet API-ja bota Telegram
API-ji za prstne odtise gostitelja
Kanonični koristni tovor uporablja:
os.userInfo() os.hostname() os.platform() os.networkInterfaces() os.uptime() Nanaša se tudi na:
https://api.ipify.org za zajem javnega IP-ja gostitelja.
Opombe o zaznavanju
To kampanjo in njene podobne različice lahko zajame več pravil.
Najprej spremljajte skripte za namestitev npm, ki se povezujejo s Telegramom:
api.telegram.org Skript za namestitev paketa skoraj nikoli ne bi smel objavljati v Telegram. To obravnavajte kot sovražno, razen če obstaja zelo jasna in pregledana izjema.
Drugič, zastava preinstall skripte v majhnih paketih brez odvisnosti z imeni, ki so videti kot interni.
Kombinacija majhnega paketa, različice z visokim strežnikom in imena v slogu notranjega imenskega prostora je močan signal za zmedo zaradi odvisnosti.
Tretjič, bodite pozorni na imena paketov, ki so videti kot zasebni inženirski moduli, objavljeni s strani javnih npm računov z nizko reputacijo.
Primeri iz te skupine vključujejo:
ms.analytics-web latency-tracking-internal carbonite-internal icons.generated Četrtič, poiščite reference zaklenjenih datotek za osem imen paketov v sistemih CI in na delovnih postajah razvijalcev.
Iskanje:
package-lock.json yarn.lock pnpm-lock.yaml npm-shrinkwrap.json Vsako ujemanje bi moralo sprožiti pregled odvisnosti in zmede.
Predlagani ukrepi v registru
Ta gruča je bila v času poročila že neobjavljena. Vendar pa preklic objave ne odpravi tveganja.
Priporočena dejanja na strani npm:
- Preverite, ali so bile neobjavljene objave čiščenje, ki ga je sprožil napadalec, in ne legitimno dejanje vzdrževalca.
- Začasno ukinite ali prepovedite račun založnika
alone5511. - Dodajte založnika, e-poštni naslov, imena paketov in označevalnike koristnega tovora na sezname zlorab in blokad v dobavni verigi.
- Neobjavljene tarballe shranite v internem pomnilniku za forenzične preiskave.
- Iz ohranjenih tarballov izvlecite žeton bota Telegram.
- Kjer je mogoče, sodelujte s Telegramom, da identificirate sprejemni kanal in rekonstruirate telemetrijo potencialne žrtve.
Kontrolni seznam za odziv na kompromis
Če se je kateri od prizadetih paketov pojavil v vaših zaklepnih datotekah, dnevnikih gradnje, predpomnilniku paketov ali zgodovini namestitve CI med oknom izpostavljenosti, ga obravnavajte kot dogodek izvajanja zaradi zmede odvisnosti.
Priporočen odgovor:
- Določite, kje je bil paket nameščen: lokalna delovna postaja, izvajalec CI, agent za gradnjo ali slika vsebnika.
- Ohranite datoteke zaklepanja, predpomnilnik npm, dnevnike gradnje, zgodovino lupine in izhod upravitelja paketov.
- Preverite dnevnike odhodnega omrežja za
api.telegram.orginapi.ipify.orgmed namestitvenim oknom. - Preverite, ali je namestitev potekala v okolju z občutljivimi spremenljivkami, poverilnicami ali dostopom do notranjega omrežja.
- Žetone, izpostavljene namestitvenemu okolju, zavrti, če je bil gostitelj privilegiran izvajalec CI ali delovna postaja razvijalca.
- Konfiguracija razreševanja revizijskih paketov za zmedo med javnim/zasebnim registrom.
- Uveljavite omejene zasebne pakete in pripenjanje registra.
- Blokiraj neodobrene javne pakete, ki se ujemajo z notranjimi vzorci poimenovanja.
- Dodaj guardrails za namestitvene skripte, še posebej
preinstall,installinpostinstall.
Kaj bi si morali branilci odnesti s seboj
Ta kampanja ni tehnično zapletena. Ravno zato je pomembna.
Nosilnost je majhna, neposredna in enostavna za izvajanje. Napadalec ne potrebuje vztrajnosti ali napredne zlonamerne programske opreme. Potrebuje le eno napačno konfigurirano pot za razreševanje paketov.
Resnično tveganje je zmeda zaradi odvisnosti.
Paket z znanim notranjim imenom, visoko številko različice in preinstall kavelj lahko obrne normalno npm install v svetilnik iz vašega okolja.
za DevSecOps ekipe, lekcija je jasna: notranja imena paketov so občutljiva sredstva. Z njimi ravnajte kot s površino za napad.
Poročano npm za uveljavljanje na ravni računa, uvrstitev na seznam blokov in shranjevanje neobjavljene tarball datoteke.




