TL, DR
Egyetlen npm kiadó, deadcode09284814, elgépelési kampányt indított a legitim axios és a chalk-template csomagok 2026 május közepe óta.
A kampány egy hagyományos hitelesítő adatok és pénztárca ellopásával indult, adatokat szivárogtatva ki egy Serveo HTTPS alagút.
On 2026-05-17, És axois-utils:1.0.9, az operátor teljesen felcserélte a hasznos adatot: ugyanaz a triple install-hook scaffold, ugyanaz a kiadó, ugyanaz a csomagnév.
De a telepítő szkript most egy platformfüggetlen DDoS botnet toborzó.
A hasznos teher egy localhost.run alagutat használ, és elárasztási parancsokat fogad, a fertőzött környezeteket DDoS-képes botnet részévé alakítva.
Az üzemeltető még a C2 szerver bináris fájl a tarballon belül, ami egyértelműen mutatja a hitelesítő adatok ellopásától az aktív botnet infrastruktúra kialakulásáig tartó eszkalációt.
Két csomag, négy verzió még aktív a rendszerleíró adatbázisban, és egy operátor, aki most mindkét modult párhuzamosan futtatja.
Súlyosság: magas.
A támadás: Hogyan működik
A kampány szándékosan unalmas állványzatra épül: két elgépeléses csomagnév, amelyek egy betűvel térnek el a heti több százmillió letöltéssel rendelkező csomagoktól (Axios, krétasablon), és tripla telepítés hooks amelyek garantálják a kivitelezést. Az érdekes az, hogy mi az állványzat hordoz — és az a tény, hogy az üzemeltető a rakományt anélkül változtatta meg, hogy bármi mást megváltoztatott volna.
A közös állványzat
Mindkét csomag minden közzétett verziója ugyanazt a három életciklust deklarálja. hooks in csomag.json:
A hasznos teher felsorolása mindhárom kategóriában hooks túlzás – telepítés után egyedül futna alapértelmezettként npm telepítésA választás számít: npm telepítés –szkriptek figyelmen kívül hagyása kihagyja a szkripteket, de számos gyakori munkafolyamat (a CI gyorsítótár visszaállítja az életciklus újrafutását) hooks szelektíven, vagy olyan fejlesztők, akik csak auditálnak telepítés után) a támadó számára a tripla redundáns deklarációt tekintik a legbiztonságosabb megoldásnak.
kréta-sablon egy második mechanizmust is hozzáad: deklarálja axois-utils:^1.0.7 futásidejű környezetként függőségA typosquatted telepítése krétasablon ezért a testvércsomagot, a typosquatot is behúzza, és mindkét hasznos adat lefut. A két csomag egy összehangolt párt alkot, nem független listázást.
A fázis – hitelesítő adat / pénztárca ellopása (2026-05-15 → jelen)
Az A fázis az eredeti hasznos teher. A betöltő egy rövid postinstall.js ami egy Serveo HTTPS fordított alagútra mutat:
A Serveo aldomain kódolja a cél IP-címet (80.200.28.28) közvetlenül a gazdagépnévben – ez egy jól ismert konvenció az adott szolgáltatásnál. Az operátor a véletlenszerű aldomain előtagot a verziók között cseréli, hogy elkerülje a naiv domain tiltólistákat, de az alapul szolgáló IP-cím soha nem változik.kréta-tempalte:1.0.14 használt 8a3e818ea8f11186-80-200-28-28…1.0.16 / 1.0.19 / 1.0.20 használat; f04a273bd84c0622-….)
postinstall.js kezekkel le phantom.js, egy 7,667 soros, csomagban lévő „gyűjtő” modul. phantom.js sétál a házigazda:
SSH privát kulcsok (~/.ssh/*) |
.npmrc tartalom és bármilyen npm_* környezeti tokenek |
| AWS, GCP és Azure hitelesítő fájlok |
GitHub személyes hozzáférési token regex (ghp_*, gho_*, ghu_*, ghs_*) |
| Kripto-tárca artefaktumok Bitcoinhoz, Exodushoz, Electrumhoz, Moneróhoz, Litecoinhoz, Dogecoinhoz, Zcashhez és Dashhez |
Egy rekurzív .env* végigjátszás ~/projects, ~/dev, ~/code, ~/workspace, és a telepítő cwd |
A Shell történetei és a teljes process.env |
A csomagot POSTÁZVA küldték a Serveo alagútba a következő címen: / gyűjteniNincs ködösítés, nincs virtuális gép ellenes logika, nincs átmeneti sémák – az üzemeltető a mennyiségre és a sebességre fogad.
B. fázis — PhantomBot DDoS toborzás (2026-05-17, csak axois-utils:1.0.9)
A B fázis a phantom.js + postinstall.js fájlokat egyetlen, distrube.js nevű fájllal cseréli le (az elgépelés az operátor hibája). A package.json fájlban található triple-hook scaffold változatlan; a csomag megtartja ugyanazt a nevet, hatókört és verziószám-felugró mintát. Kívülről az axois-utils:1.0.9 az 1.0.6 kisebb folytatásának tűnik. Belülről egy másik kártevőcsaládról van szó.
distrube.js egy konfigurációs blokkal nyílik meg, amely elnevezi az operátor saját arculatát:
// axois-utils-1.0.9/distrube.js:11-15 |
// Use your localhost.run HTTPS URL (the tunnel handles HTTP internally) |
const C2_HOST = 'b94b6bcfa27554.lhr.life'; // Your localhost.run tunnel |
const C2_PORT = 443; // HTTPS port - tunnel handles SSL |
const BOT_ID = `${os.hostname()}_${Date.now()}_${crypto.randomBytes(4).toString('hex')}`; |
A megjegyzések a készletet futtató jövőbeli operátornak szólnak („Use your localhost.run HTTPS URL”). Ez, valamint a bot kliens mellett található információk arra utalnak, hogy ez nem csak egy áldozati adatcsomag – hanem maga a készlet.
Az áramlás:
- Kitartás először fut. A szkript operációs rendszerenként három különböző módon települ (beállításjegyzék futás + Indítópult + feladatok Windows rendszeren; crontab + fantom-bot.szolgáltatás rendszerezett egység + .bashrc/.zshrc hozzáfűzés + /etc/rc.local Linuxon; LaunchAgent com.phantom.bot.plist macOS rendszeren). A perzisztencia szolgáltatás neve és a LaunchAgent címke is fantom-bot / com.phantom.bot, amiből a kampány neve is származik.
- Rendszerinformáció exfil egyszer fut le — egylépéses ujjlenyomat-POST a b94b6bcfa27554.lhr.life:443/collect címre, amely tartalmazza a hostname, platform, arch, felhasználónév, CPU/RAM, hálózati interfészek, process.env, cwd, homedir, node version és nyilvános IP cím értékeket. Ez sokkal kevésbé agresszív, mint az A fázis: nincs SSH, nincsenek tárcák, nincs .env rekurzió. A bot feladata a regisztráció, nem a lopás.
- Szívverés hurok 30 másodpercenként HTTPS POST-ot nyit a b94b6bcfa27554.lhr.life:443/ címre. A felhasználói ügynök PhantomBot/1.0. A TLS-ellenőrzés explicit módon le van tiltva (rejectUnauthorized: false). A C2 választ JSON formátumban, {type, target, port, duration, threads, method} formátumban értelmezi és továbbítja.
- Árvízi arzenál hat parancshoz van kötve:
| Parancstípus | Modulok | Megjegyzések |
|---|---|---|
| fütyülés | Élénkség válasz | A bot azonosítja magát |
| http | HTTP-árvíz | 7. rétegbeli kérésárvíz |
| https | HTTPS árvíz | Ugyanaz, mint a http, TLS-be csomagolva |
| tcp | TCP árvíz | 65 KB véletlenszerű hasznos terhelésű spam |
| udp | UDP árvíz | 65 507 bájtos UDP csomagok |
| gyors | HTTP/2 gyors visszaállítású DoS támadás | A 2023-as CVE-2023-44487 technika |
Mind az öt árvízmodul egy cél, kikötő, időtartamaés szálak argumentum — a bot egy általános, bérelhető árasztó bot, nem egy adott áldozatot céloz meg. Az üzemeltető áldozatlistája a C2-n található, nem a csomagban.
Újdonságok – a leszállított C2 bináris fájl
Az A fázis ismerős alakzat: hitelesítő adatok ellopása, telepítési horog, gyártó általi alagútrendszerű C2. A B fázis… Is ismerős forma – a DDoS botnetek évek óta a rosszindulatú npm csomagok állandó részét képezik. Ami szokatlan, hogy az üzemeltető a szerver oldal az npm tarballban található készletből:
- c2 — egy 4 megabájtos lefordított Go ELF bináris fájl
- c2.go — a bináris fájl 426 soros Go forráskódja
Egyik fájlt sem hívja meg semmilyen telepítő hook. Nem részei az áldozat hasznos adatának. Ugyanúgy a csomag könyvtárában helyezkednek el, mint egy dokumentációs fájl. A leghihetőbb értelmezés az, hogy az operátor a fejlesztési munkafáját npm-re toltatta anélkül, hogy a fájllistát összeállította volna – ez egy igazi OpSec hiba –, és a szállított tartalom a teljes kétoldalas készlet: az áldozat által futtatott kliens és az operátor által futtatott szerver.
Ez a történetnek az a része, amely igazolja a „kulcsrakész botnet készlet” megfogalmazását. Bárki, aki letöltötte axois-utils:1.0.9 A takedown előtt nemcsak egy áldozati mintájuk van – van egy működő C2 szerverük is.
A fordulópont, egy mondatban
Ugyanaz a kiadó, ugyanazok a csomagnevek, ugyanaz a triple-hook scaffold, ugyanaz a „fantom” márkajelzés – de A hasznos teher egyik napról a másikra megváltoztatta a bevételszerzési modellt: a „titkok begyűjtése, amelyeket továbbértékesíthetek”-től a „bérbeadásra szánt árvízi kapacitás bérlése, amelyet lízingelhetek”-ig. A telepítési idejű TTP-k, amelyeket a védőknek figyelniük kell, mindkét fázisban szinte azonosak; az aláírás-alapú védelem az A fázis pénztárca-útvonal karakterláncaihoz vagy a phantom.js7,667 soros gyűjtője teljesen kihagyta volna a B fázist.
| Dátum (UTC) | esemény |
|---|---|
| 2026-05-15 | Első megjelenés: axois-utils:1.0.4 (LAN tesztépítés, fejlesztői felszerelés itt: 192.168.129.19) |
| 2026-05-15 | axois-utils:1.0.6 közzétették — A fázis C2-jét felcserélték erre: 80.200.28.28 Serveo alagúton keresztül; a forráshozzászólás // Change to '80.200.28.28' for public megerősíti a fejlesztő→gyár cserét |
| 2026-05-16 | chalk-tempalte:1.0.14 és a 1.0.16 közzétett — láncolt rakodó deklarálja axois-utils:^1.0.7 futásidejű függőségként; a Serveo aldomain elforgatva |
| 2026-05-16 | A fázisú kampányt fedeztek fel a rutinszerű npm-vizsgálat során; megerősített kártékonyságra vonatkozó ítéleteket alkalmaztak |
| 2026-05-17 | axois-utils:1.0.9 közzétett — hasznos terhelés pivot: PhantomBot DDoS toborzás localhost.run tunnelen keresztül; operátori oldal c2 bináris és c2.go forráskód a tarballban |
| 2026-05-17 | chalk-tempalte:1.0.19 és a 1.0.20 közzétett — továbbra is A fázis (lopó); az operátor most mindkét modult párhuzamosan futtatja |
| 2026-05-17 | A B fázis felfedezése rutinszerű vizsgálat során; az ítéletek mindenre vonatkoznak 2026-05-17 verzió |
| (folyamatban lévő) | Eltávolítási jelentések függőben; mind a négy közzétett csomag továbbra is elérhető a nyilvántartásban az írás időpontjában. |
A kiegyezés mutatói
Csomagok
| Az ökoszisztéma | Csomag | változatok |
|---|---|---|
| NPM | axois-utils (axios typosquatja) | 1.0.4, 1.0.6, 1.0.9 |
| NPM | chalk-tempalte (kréta-sablon elgépelése) | 1.0.14, 1.0.16, 1.0.19, 1.0.20 |
Szerzői kilét
| Mező | Érték: |
|---|---|
| npm kiadó | deadcode09284814 |
| Kiadó e-mail címe | phantomdeadcode@tutamail.com |
| SCM ellenőrzés | egyik sem |
Parancs és irányítás
| Fázis | Endpoint | közlekedés |
|---|---|---|
| A | f04a273bd84c0622-80-200-28-28.serveousercontent.com:443/collect | Serveo HTTPS alagút |
| A | 8a3e818ea8f11186-80-200-28-28.serveousercontent.com:443/collect | Serveo HTTPS alagút (korábbi verzió) |
| A | 80.200.28.28:443/collect | Alapjául szolgáló VPS végpont |
| B | b94b6bcfa27554.lhr.life:443/ | localhost.run HTTPS fordított alagút |
Fájlkivonatok (SHA-256)
| filé | SHA-256 | Megjegyzések |
|---|---|---|
c2 (ELF, 4 MB) | 165fa92d237fd017c227d00da06ab788212a62be94bf61e95df2d22d00377ef2 | Operátoroldali C2 szerver, belül szállítva axois-utils:1.0.9 |
c2.go (426 sor) | 7d0ae79fdb1e9968f3323a3712b624643a782ba3efb2cf3a2cb9c4c5513cea30 | Go forráskód a C2 binárishoz |
distrube.js | 308b15c023088a7188dea4ef609010ac2493eb4c365b103053d7621a9ca5b935 | B. fázisú botkliens |
phantom.js (chalk-tempalte:1.0.19) | 9e380ec88d3ccf3929e1a104e3b868d4d7b59ca189a8a431a54e9f3357dfdd81 | A fázisú hitelesítő adatok / pénztárca gyűjtő |
phantom.js (chalk-tempalte:1.0.20) | d1c9e3f296ee9f7d5032f73f9c504cede50334bc14c394055fd5cb9c3a6e08b3 | A fázisú gyűjtő (1.0.20 változat) |
postinstall.js (chalk-tempalte:1.0.19 = 1.0.20) | ffba9bdd6793edd5b38e12900252c1813a693f59c25af51c3b658cf3f27b6162 | A fázisú betöltő, bájt-azonos mindkét verzióban |
Tulajdonítás és motiváció
Ezt a kampányt a következőképpen követjük nyomon: PhantomBot, átvéve az üzemeltető saját márkajelzését a Felhasználói ügynök: PhantomBot/1.0 szívverés fejléc, a fantom-bot.szolgáltatás systemd egység, a com.phantom.bot LaunchAgent címke és a phantomdeadcode@ e-mail cím. Az operátor legalább négy műtermékben következetesen megadja ezt a nevet.
Jelek katalógusa
- kiadó - halott kód09284814 npm-en. Egyfelhasználós fiók, eldobható Tutamail e-mail, nincs SCM ellenőrzés. Nincsenek korábbi publikációs előzmények ezen a kampányon kívül.
- Márkaépítés újrafelhasználása — a „fantom” szó szerepel a kiadó e-mailjében, az A fázis gyűjtői fájlnevében (phantom.js), a B fázisú adatmegőrzési szolgáltatás nevében (fantom-bot.szolgáltatás), a LaunchAgent címkében (com.phantom.bot), és a bot User-Agentjében (FantomBot/1.0).
- Infrastruktúra — Egyetlen VPS a következő címen: 80.200.28.28 az A fázis a Serveo aldomain rotációján keresztül kerül előtérbe; a B fázis egy másik fázisba mozdul el localhost.run fordított alagút (b94b6bcfa27554.lhr.lifeMindkét szolgáltatói szolgáltatás ingyenes, és csak kimenő SSH-t igényel a kezelői oldalon, ami összhangban van az alacsony költségvetésű, alacsony OpSec-igényű beállításokkal.
- kód stílus — Sima JavaScript végig; nincs obfuszkálás, nincs karakterlánc-kódolás, nincsenek VM-ellenőrző ellenőrzések. A változónevek leíró jellegűek (lopásRendszerinformáció, végrehajtási parancs, httpFlood). Hozzászólások itt: distrube.js közvetlenül egy jövőbeli operátort címez („Use your localhost.run HTTPS URL”), ami arra utal, hogy a fájlt készletként való terjesztésre szánták, nem pedig egyetlen támadó használta.
- OpSec csúszás — A B fázis tarball tartalmazza mind a bot klienst, mind az operátori oldali C2 szervert (c2 ELF + c2.go forrás). Ez összhangban van egy olyan operátorral, aki a munkafáját npm-re küldte a fájllista auditálása nélkül. Vagy az operátor tapasztalatlan, vagy a készlet jelentett nyilvánosan terjeszthető, és a C2 bináris fájl a termék része.
- Önmegerősítés - axois-utils:1.0.4 tartalmazza a forrásmegjegyzést // Váltsa '80.200.28.28'-ra nyilvános esetben a 12. sorban, megerősítve a fejlesztési/előkészítési/gyártási folyamatot, amelyet az operátorok általában tagadnak.
Motiváció
Az A fázis hasznos eleme egyértelmű pénzügyi lopás: a hitelesítő adatok, a felhőkulcsok, a GitHub tokenek és a kriptovaluta-tárcák mind likvid viszonteladási piaccal rendelkeznek. A B fázis szintén pénzügyi, de közvetett: a bérelhető („booter”) DDoS-szolgáltatások percenként bérelnek elárasztási kapacitást, és az olyan botok, mint amilyen itt is van, alkotják azt a készletet, amelyen ezek a szolgáltatások futnak. A 30 másodperces szívverés, az általános cél/kikötő/időtartama parancssémát és az ötprotokollos árvízi arzenál a standard egy zsákmányoló operátor terméke.
Mindkét modul párhuzamos futtatása — kréta-tempalte:1.0.19 és a 1.0.20 folytasd a tolvaj szállítását, miközben axois-utils:1.0.9 szállítja a botot – arra utal, hogy az üzemeltető a bevételi forrásokat fedezi, ahelyett, hogy felhagyna az A fázissal. A pivot egy mellett, nem helyettesítő.
Amit nem állítunk
Nem tudtuk megerősíteni a mögötte álló valós személyazonosságot halott kód09284814 azonosítót, és ezt a kampányt nem tulajdonítjuk semmilyen megnevezett fenyegető szereplőnek, csoportnak vagy országnak. A „fantom” márkajelzés elég következetes a különböző műtermékek között ahhoz, hogy egyetlen operátorra utaljon, de a C2 bináris készletstílusú szállítása nyitva hagyja annak a lehetőségét, hogy a jövőbeni csomagok a nem kapcsolódó azonosítókhoz tartozó azonosítókhoz hasonlóan újra felhasználják ugyanazt a kódot.
Hatás, trendek és mit kell tenniük a védőknek
Fenntarthatóság (CSR)
A legitim guggoláscélok Axios és a krétasablon széles körben függenek a JavaScript ökoszisztémában; Axios egyedül a harminc leggyakrabban letöltött npm csomag között van. A typosquat nevek egyetlen billentyűleütésnyire vannak a valódiaktól (axois ↔ Axios, sablon ↔ sablon), és mindkettő nyelvileg hihető elírás.
Nem tudtunk megbízható letöltési statisztikákat szerezni a rosszindulatú verziókról az eltávolítás előtt – az npm nem őrzi meg a verziónkénti letöltések számát a csomag közzétételének visszavonása után, és npms.ioA stílusú proxyk zajosak ezen a skálán. Bármely szervezet, amelynek zárolási fájlja egy nevű csomagra van feloldva axois-utils or kréta-sablon a kiadótól halott kód09284814 kompromittálódottként kell kezelni: minden jelen lévő hitelesítő adatot cseréljen ki folyamat.env az érintett gazdagépen operációs rendszerenként auditálja a perzisztencia vektorokat (lásd alább a „Mit kell tenniük a védőknek” részt), és távolítsa el a függőséget.
Feltörekvő minták
Ez a kampány jól példázza azt a változást, amelyet számos közelmúltbeli npm incidens során tapasztaltunk: A szerelőhorgos állványzat tartós eszköz; a hasznos teher cserélhetőUgyanaz a kiadó, ugyanaz a csomag, ugyanaz előtelepítés / telepíteni / telepítés után hármas, sőt ugyanaz a verzió-bump kadencia – az egyetlen dolog, ami a kettő között változott axois-utils:1.0.6 és a axois-utils:1.0.9 volt a fájl a hooks futtatás. Aláírás-alapú észlelés, amely az A fázis hasznos adatához van kötve (pénztárca-útvonal karakterláncok, phantom.js7,667 soros gyűjtője, a Serveo C2 hoszt) megjelölte volna az első három verziót, és teljesen kihagyta volna a B fázist.
Ugyanez a minta figyelhető meg a többi 2026-os kampányban is, amelyeket követtünk: egyetlen operátor stabil állvánnyal, aki váltakozik a hitelesítő adatok ellopása, a vizsgacsaló ügyfelek, a Telegram-bot exfil és most a DDoS toborzás között. A hasznos adat aláírásokra támaszkodó védekezők minden kampány második fordulóját elveszítik.
A következmény az, hogy A telepítési idejű TTP-k a jobb jelzést adjákTripla telepítési hook deklarációk, importáló telepítő szkriptek. https or gyermekfolyamat, telepítsen olyan szkripteket, amelyek a felhasználó indítási mappáiba írnak, és telepítsen olyan szkripteket, amelyek feloldják a hosztneveket az ingyenes fordított alagút szolgáltatásokon (Serveo, localhost.run, ngrok, cloudflared) mind ritkák a legitim csomagokban, de gyakoriak a rosszindulatú csomagokban.
Mit kell tenniük a védőknek
- Zárolt fájl auditálása. Keresés minden package-lock.json / fonal.zár / pnpm-lock.yaml a szervezetében a pontos karakterláncokért axois-utils és a kréta-sablonBármely meccset kompromisszumként kezelj.
- Titkok elforgatása az érintett gazdaszervezeteken. A fázisban tömegesen gyűjtött SSH, felhő, GitHub, npm és pénztárca hitelesítő adatok. Tegyük fel, hogy minden valaha is jelen lévő hitelesítő adat folyamat.env, ~ / .ssh, ~/.aws, ~/.npmrc, ~ / .config, vagy bármi .env* az érintett gazdagépen található fájl kiszivárgott.
- A kitartás eltávolítása (B fázis). Windows rendszeren törölje HKCU\Szoftver\Microsoft\Windows\Jelenlegi verzió\Futtatás\Rendszerfrissítés, távolítsa el %APPDATA%\Microsoft\Windows\Start menü\Programok\Indítás\system-update.batés schtasks /delete /tn SystemUpdate /fLinuxon crontab -e és távolítsa el @reboot csomópont …, systemctl –felhasználó letiltása –most phantom-bot.service majd törli ~/.config/systemd/user/phantom-bot.service, bozót .bashrc / .zshrc / /etc/rc.localmacOS rendszeren launchctl unload ~/Library/LaunchAgents/com.phantom.bot.plist majd töröld a plist-et.
- Blokkolja a C2 hosztokat. Adja hozzá az IOC táblában található négy C2 végpontot a kimenő forgalom tiltólistájához. *.serveousercontent.com és a *.lhr.life nagykereskedelmi szinten blokkolható, ha a környezetednek nincs jogos felhasználása a fordított alagút szolgáltatásokra.
- Vadászat telepítési idő szerinti TTP alapján, nem hasznos teher. Leltárzárolási fájl bejegyzések, amelyek csomag.json kijelenti, előtelepítés, telepíteniés telepítés után mind ugyanarra a szkriptre mutatnak. Ellenőrizd a csomag korát és a kiadó ellenőrzési állapotát. Ez a minta ritka a legitim csomagokban, és ez a legmegbízhatóbb jel, amelyet a PhantomBot újra felhasznál.
- A C2 bináris fájl auditálása. Bárki, aki letöltötte axois-utils:1.0.9 rendelkezik az operátor C2 szerverével (c2 ELF, sha256 165fa92d…) lemezen. Gyorsítótárak és CI-műtárgyak beolvasása. A bináris fájl önmagában szunnyadó állapotban van, de a jelenléte egy munkaállomáson egyértelműen bizonyítja a csomag telepítését.
Záró sor
Ugyanaz az operátor, ugyanaz a csomag és ugyanaz a telepítő hook teljesen különböző fenyegetéseket okozhat 48 órán belül. A scaffoldatot figyeld, ne a hasznos terhet.




