TL; DR
Üks npm-i väljaandja, deadcode09284814, on korraldanud legitiimse vastu trükivigadega kampaania axios ja chalk-template pakette alates 2026. aasta mai keskpaigast.
Kampaania algas tavapärase volituste ja rahakoti varastamisena, mille käigus vargati andmeid Serveo HTTPS tunnel.
On 2026-05-17Koos axois-utils:1.0.9, vahetas operaator kasuliku koormuse täielikult: sama kolmekordne installikonksu karkass, sama avaldaja, sama paketi nimi.
Kuid installiskript on nüüd platvormideülene DDoS-i botneti värbamine.
Kasulik koormus räägib a-ga localhost.run tunnel ja aktsepteerib üleujutuskäsklusi, muutes nakatunud keskkonnad DDoS-võimelise botneti osaks.
Operaator saatis isegi C2 serveri binaarfail tarballi sees, mis näitab selget eskaleerumist volituste vargusest aktiivse botnetitaristuni.
Kaks paketti, neli registris endiselt aktiivset versiooni ja üks operaator käitab nüüd mõlemat moodulit paralleelselt.
Raskusaste: kõrge.
Rünnak: kuidas see toimib
Kampaania on üles ehitatud tahtlikult igavale edastusraamistikule: kaks typosquat-tüüpi paketinime, mis erinevad ühe tähe võrra pakettidest, millel on sadu miljoneid iganädalasi allalaadimisi (aksioosid, kriidimall) ja kolmekordne install hooks mis garanteerivad teostuse. Huvitav on see, mida tellingud viib läbi — ja asjaolu, et operaator muutis lasti midagi muud muutmata.
Jagatud tellingud
Mõlema paketi iga avaldatud versioon deklareerib sama kolme elutsüklit hooks in pakett.json:
"scripts": { "preinstall": "node <payload>.js", "install": "node <payload>.js", "postinstall": "node <payload>.js" } Kasuliku koormuse loetlemine kõigi kolme all hooks on liialdus — pärast installimist üksi töötaks vaikimisi npm installiValik on oluline: npm install –ignoreeri skripte jätab skriptid vahele, kuid mitmed levinud töövood (CI vahemälu taastab), mis käivitavad elutsükli uuesti hooks valikuliselt või arendajad, kes auditeerivad ainult pärast installimist) teevad ründaja jaoks kõige kindlamaks valikuks kolmekordselt redundantse deklaratsiooni.
kriiditempel lisab teise mehhanismi: see deklareerib axois-utils:^1.0.7 käituskeskkonnana sõltuvustTyposquatted'i installimine kriidimall Seetõttu tõmbab sisse ka õe-venna typosquati ja mõlemad paketifailid käivituvad. Need kaks paketti on koordineeritud paar, mitte sõltumatud loendid.
A-etapp — volituste/rahakoti varastaja (15.05.2026 → praegune aeg)
A-faas on algne kasulik koormus. Laadur on lühike postinstall.js mis osutab Serveo HTTPS-i pöördtunnelile:
// chalk-tempalte/postinstall.js:11-13 const C2_HOST = "f04a273bd84c0622-80-200-28-28.serveousercontent.com"; const C2_PORT = 443; const C2_PATH = '/collect'; Serveo alamdomeen kodeerib sihtkoha IP-aadressi (80.200.28.28) otse hostinimes – selle teenuse puhul äratuntav konventsioon. Operaator vahetab versioonide vahel juhuslikku alamdomeeni eesliidet, et vältida naiivseid domeenide blokeeritud nimekirju, kuid aluseks olev IP-aadress ei liigu kunagi.kriidi-templi:1.0.14 Kasutatud 8a3e818ea8f11186-80-200-28-28…; 1.0.16 / 1.0.19 / 1.0.20 kasutamine f04a273bd84c0622-….)
postinstall.js käed eemale phantom.js, 7,667-realine komplekteeritud „kollektori“ moodul. phantom.js jalutab peremehe poole:
SSH privaatvõtmed (~/.ssh/*) |
.npmrc sisu ja mis tahes npm_* keskkonna märgid |
| AWS-i, GCP ja Azure'i mandaadifailid |
GitHubi isikliku juurdepääsu tunnuse regulaaravaldus (ghp_*, gho_*, ghu_*, ghs_*) |
| Krüptorahakottide artefaktid Bitcoini, Exoduse, Electrumi, Monero, Litecoini, Dogecoini, Zcashi ja Dashi jaoks |
Rekursiivne .env* kõndida läbi ~/projects, ~/dev, ~/code, ~/workspaceja installi cwd |
Shelli ajalugu ja täielik process.env |
Pakk postitatakse Serveo tunnelisse aadressil / kogudaPuudub segamine, VM-vastane loogika ega lavastuslik lähenemine – operaatori panus on mahule ja kiirusele.
B-etapp — PhantomBot DDoS-i värbamine (17.05.2026, ainult axois-utils:1.0.9)
B-faas asendab phantom.js + postinstall.js ühe failiga nimega distrube.js (trükivea tegi operaator). Kolmekordne konksuga telling failis package.json jääb samaks; pakett säilitab sama nime, ulatuse ja versioonimuutuste mustri. Väljastpoolt näeb axois-utils:1.0.9 välja nagu väike järg versioonile 1.0.6. Sisuliselt on see aga teistsugune pahavaraperekond.
distrube.js avaneb konfiguratsiooniplokiga, mis nimetab operaatori enda brändingu:
// 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')}`; |
Kommentaarid on adresseeritud tulevasele komplekti käitavale operaatorile („Kasutage oma localhost.run HTTPS URL-i“). See ja lisaks botkliendiga kaasnevale annab märku, et tegemist pole lihtsalt ohvri kasuliku koormusega – see on komplekt ise.
Vool:
- Püsivus käivitub esimesena. Skript installib end operatsioonisüsteemiti kolmel erineval viisil (registri jooks + Käivituskaust + ülesanded Windowsis; crontab + phantom-bot.service süsteemitud üksus + .bashrc/.zshrc lisa + /etc/rc.local Linuxis; LaunchAgent com.phantom.bot.plist macOS-is). Nii püsivusteenuse nimi kui ka LaunchAgenti silt on fantoomrobot / com.phantom.bot, kust pärineb ka kampaania nimi.
- Süsteemiinfo exfil käivitub üks kord — ühekordne sõrmejälje POST failile b94b6bcfa27554.lhr.life:443/collect, mis sisaldab hostinime, platvormi, arhitektuuri, kasutajanime, protsessori/mälu, võrguliideseid, process.env, cwd, kodukataloogi, sõlme versiooni ja avalikku IP-aadressi. See on palju vähem agressiivne kui A-faas: pole SSH-d, rahakotte ega .env rekursiooni. Boti ülesanne on registreeruda, mitte varastada.
- Südamelöögi tsükkel avab iga 30 sekundi järel HTTPS POST-i aadressile b94b6bcfa27554.lhr.life:443/. Kasutajaagent on PhantomBot/1.0. TLS-i verifitseerimine on selgesõnaliselt keelatud (rejectUnauthorized: false). C2 vastus parsitakse JSON-failina kujul {type, target, port, duration, threads, method} ja saadetakse välja.
- Üleujutuse arsenal on ühendatud kuue käsuga:
| Käsu tüüp | moodulid | märkused |
|---|---|---|
| ping | Elujõu vastus | Bot tuvastab end |
| http | HTTP üleujutus | 7. kihi taotluste üleujutus |
| https | HTTPS-i üleujutus | Sama mis http, TLS-mähitud |
| tcp | TCP üleujutus | 65 KB juhusliku sisuga rämpsposti |
| Udp | UDP üleujutus | 65 507-baidised UDP-paketid |
| kiire | HTTP/2 kiire lähtestamisega DoS | 2023. aasta CVE-2023-44487 tehnika |
Kõik viis üleujutusmoodulit võtavad a sihtmärk, port, kestusja niidid argument — bot on üldine palgatav flooder, mis pole suunatud ühelegi konkreetsele ohvrile. Operaatori ohvrite nimekiri asub C2-s, mitte paketis.
Mis on siin uut — tarnitud C2 binaarfail
A-etapp on tuttav kujund: volituste vargus, paigalduskonks, müüja poolt tunneldatud C2. B-etapp on Ka tuttav kuju – DDoS-i botnetid on aastaid olnud pahatahtlike npm-pakettide sihtmärk. Ebatavaline on see, et operaator saatis serveripoolne npm tarballi komplektist:
- c2 — 4-megabaidine kompileeritud Go ELF binaarfail
- c2.go — selle binaarfaili 426-realine Go lähtekood
Kumbagi faili ei kutsu välja ükski installikonks. Need ei ole osa ohvri kasulikust koormusest. Need asuvad paketikataloogis samamoodi nagu dokumentatsioonifail. Kõige usutavam lugemine on see, et operaator lükkas oma arendustöö tööpuu npm-i peale ilma faililoendit kureerimata – tõeline OpSec-lipuke – ja kaasas oli täielik kahepoolne komplekt: klient, mida ohver käitab, ja server, mida operaator käitab.
See on loo see osa, mis õigustab „võtmed kätte botnetikomplekti” raamistamist. Igaüks, kes laadis alla axois-utils:1.0.9 Enne eemaldamist pole neil mitte ainult ohvri näidis – neil on ka toimiv C2 server.
Pöördepunkt ühes lauses
Sama kirjastaja, samad paketinimed, sama kolmekordne tugisüsteem, sama „fantoombränding” – aga kasulik koormus muutis üleöö monetiseerimismudelit: alates „saagikoristussaladuste saagist, mida saan edasi müüa“ kuni „üleujutusmahu rentimiseni, mida saan liisida“. Installiaegsed TTP-d, mida kaitsjad peaksid jälgima, on mõlemas faasis peaaegu identsed; allkirjapõhised kaitsemehhanismid on võtmega seotud A-faasi rahakotitee stringidega või phantom.js7,667-realine koguja oleks B-faasist täielikult mööda vaadanud.
| Kuupäev (UTC) | sündmus |
|---|---|
| 2026-05-15 | Esimene väljaanne: axois-utils:1.0.4 (LAN-testi ehitus, arendusriist aadressil 192.168.129.19) |
| 2026-05-15 | axois-utils:1.0.6 avaldatud — A-faasi C2 asendati 80.200.28.28 Serveo tunneli kaudu; allika kommentaar // Change to '80.200.28.28' for public kinnitab arendaja ja toote vahetust |
| 2026-05-16 | chalk-tempalte:1.0.14 ja 1.0.16 avaldatud — aheldatud laadur deklareerib axois-utils:^1.0.7 käitusaja sõltuvusena; Serveo alamdomeen on pööratud |
| 2026-05-16 | Rutiinse NPM-skannimise käigus avastati A-faasi kampaania; rakendati kinnitatud pahatahtlikkuse otsuseid |
| 2026-05-17 | axois-utils:1.0.9 avaldatud — kasuliku koormuse pivot: PhantomBot DDoS-i värbamine localhost.run tunneli kaudu; operaatori pool c2 binaarne ja c2.go allikas tarnitud tarballis |
| 2026-05-17 | chalk-tempalte:1.0.19 ja 1.0.20 avaldatud — ikka veel faas A (varastaja); operaator käitab nüüd mõlemat moodulit paralleelselt |
| 2026-05-17 | B-faasi avastamine rutiinse skaneerimise käigus; kohtuotsuseid rakendati kõigis 2026-05-17 versioonid |
| (jätkuv) | Eemaldamisaruanded on ootel; kõik neli avaldatud paketti on kirjutamise ajal registris endiselt saadaval. |
Kompromissi näitajad
Paketid
| Ökosüsteemi | Pakend | Variandid |
|---|---|---|
| npm | axois-utils (axios'e tüposkvaat) | 1.0.4, 1.0.6, 1.0.9 |
| npm | chalk-tempalte (kriidimalli tüposquat) | 1.0.14, 1.0.16, 1.0.19, 1.0.20 |
Autori identiteet
| Väli | Väärtus |
|---|---|
| npm-i väljaandja | deadcode09284814 |
| Väljaandja e-posti aadress | phantomdeadcode@tutamail.com |
| SCM kontrollimine | mitte ükski |
Käsklus ja kontroll
| Faas | Lõpp-punkt | Transport |
|---|---|---|
| A | f04a273bd84c0622-80-200-28-28.serveousercontent.com:443/collect | Serveo HTTPS tunnel |
| A | 8a3e818ea8f11186-80-200-28-28.serveousercontent.com:443/collect | Serveo HTTPS tunnel (varasem versioon) |
| A | 80.200.28.28:443/collect | Aluseks olev VPS-i lõpp-punkt |
| B | b94b6bcfa27554.lhr.life:443/ | localhost.run HTTPS-i pöördtunnel |
Failide kokkuvõtted (SHA-256)
| Fail | SHA-256 | märkused |
|---|---|---|
c2 (Mine ELF-i, 4 MB) | 165fa92d237fd017c227d00da06ab788212a62be94bf61e95df2d22d00377ef2 | Operaatoripoolne C2 server, tarnitakse sees axois-utils:1.0.9 |
c2.go (426 rida) | 7d0ae79fdb1e9968f3323a3712b624643a782ba3efb2cf3a2cb9c4c5513cea30 | C2 binaarkoodi lähtekood |
distrube.js | 308b15c023088a7188dea4ef609010ac2493eb4c365b103053d7621a9ca5b935 | B-faasi botiklient |
phantom.js (chalk-tempalte:1.0.19) | 9e380ec88d3ccf3929e1a104e3b868d4d7b59ca189a8a431a54e9f3357dfdd81 | A-faasi volituste/rahakoti koguja |
phantom.js (chalk-tempalte:1.0.20) | d1c9e3f296ee9f7d5032f73f9c504cede50334bc14c394055fd5cb9c3a6e08b3 | A-faasi kollektor (variant 1.0.20) |
postinstall.js (chalk-tempalte:1.0.19 = 1.0.20) | ffba9bdd6793edd5b38e12900252c1813a693f59c25af51c3b658cf3f27b6162 | A-faasi laadur, mõlemas versioonis baitidentne |
Omistamine ja motivatsioon
Me jälgime seda kampaaniat järgmiselt PhantomBot, võttes operaatori enda kaubamärgi Kasutajaagent: PhantomBot/1.0 südamelöökide päis phantom-bot.service süsteemitud üksus com.phantom.bot LaunchAgent silt ja fantomdeadcode@ e-posti aadress. Operaator on selle nime osas vähemalt nelja artefakti puhul järjepidev.
Signaalide kataloog
- kirjastaja - surnud kood09284814 npm-is. Ühe käega konto, Tutamaili ühekordne e-post, ei SCM kinnitus. Lisaks sellele kampaaniale pole varasemaid avaldatud materjale.
- Brändingu taaskasutamine — „phantom” esineb väljaandja e-kirjas, A-faasi koguja failinimes (phantom.js), B-faasi püsivuse teenuse nimes (phantom-bot.service), LaunchAgent sildil (com.phantom.bot) ja boti kasutajaagendi (PhantomBot/1.0).
- Infrastruktuur — Üks VPS aadressil 80.200.28.28 faas A liigub Serveo alamdomeeni rotatsiooni kaudu; faas B liigub a-le localhost.run tagasikäik tunnel (b94b6bcfa27554.lhr.eluMõlemad pakkuja teenused on tasuta ja vajavad operaatori poolelt ainult väljaminevat SSH-d, mis on kooskõlas väikese eelarve ja vähese operatsiooniturvalisusega seadistustega.
- koodi stiil — Lihtne JavaScript kogu ulatuses; pole mingit segadust tekitavat teksti, stringide kodeerimist ega VM-vastaseid kontrolle. Muutujate nimed on kirjeldavad (stealSystemInfo, käskluskäsk, httpFlood). Kommentaarid jaotises distrube.js pöörduda otse tulevase operaatori poole („Kasutage oma localhost.run HTTPS URL-i”), mis viitab sellele, et fail oli mõeldud levitamiseks komplektina, mitte ühe ründaja poolt kasutamiseks.
- Operatiivturvalisuse libisemine — B-faasi tarball sisaldab nii botiklienti kui ka operaatoripoolset C2-serverit (c2 ELF + c2.go allikas). See on kooskõlas operaatoriga, kes saatis oma tööpuu npm-i ilma faililoendit auditeerimata. Kas operaator on kogenematu või on komplekt tähendas avalikult levitada ja C2 binaarfail on toote osa.
- Enesekinnitus - axois-utils:1.0.4 sisaldab allika kommentaari // Avalike jaoks muutke väärtuseks '80.200.28.28' real 12, kinnitades arendus-/etapi-/tootmisjärgus olemist, mida operaatorid tavaliselt eitavad.
Motiveerimine
A-faasi kasulik koormus on otsene finantsvargus: volitustel, pilvevõtmetel, GitHubi žetoonidel ja krüptorahakottidel on kõik likviidsed edasimüügiturud. B-faas on samuti finantsiline, kuid kaudne: DDoS-i teenused rendivad minuti kaupa üleujutusvõimsust ja robotid, nagu siin pakutav, on inventar, millel need teenused töötavad. 30-sekundiline südamelöök, üldine sihtmärk/port/kestus käsklusskeem ja viieprotokolliline üleujutuse arsenal on standard saapaoperaatori toode.
Mõlema mooduli paralleelne käitamine — kriidi-templi:1.0.19 ja 1.0.20 jätka varastaja saatmist samal ajal axois-utils:1.0.9 saadab boti – viitab sellele, et operaator maandab tuluallikaid, selle asemel et A-faasist loobuda. Pöördepunkt on lisamine, mitte asendaja.
Mida me ei väida
Me ei ole suutnud kinnitada reaalse maailma identiteeti selle taga surnud kood09284814 käepide ja me ei omista seda kampaaniat ühelegi nimetatud ohutegijale, grupile ega riigile. „Fantoom“ bränding on artefaktide lõikes piisavalt järjepidev, et viidata ühele operaatorile, kuid C2 binaarfaili komplektlaadne saatmine jätab avatuks võimaluse, et tulevased paketid sõltumatutelt käepidemetelt taaskasutavad sama koodi.
Mõju, trendid ja mida kaitsjad peaksid tegema
mõju
Õigustatud küki sihtmärgid aksioosid ja kriidimall on JavaScripti ökosüsteemis laialdaselt sõltuvad; aksioosid üksi kuulub kolmekümne enim allalaaditud npm-paketi hulka. Typosquat-nimed on ühe klahvivajutuse kaugusel tegelikest (aksois ↔ aksioosid, tempalte ↔ šabloon) ja mõlemad on keeleliselt usutavad kirjavead.
Enne eemaldamist ei õnnestunud meil saada pahatahtlike versioonide kohta usaldusväärset allalaadimisstatistikat – npm ei säilita versioonide kaupa allalaadimiste arvu pärast paketi avaldamise tühistamist ja npms.io-stiilis puhverserverid on sellises ulatuses lärmakad. Iga organisatsioon, mille lukustusfail annab tulemuseks paketi nimega axois-utils or kriiditempel kirjastajalt surnud kood09284814 tuleks käsitleda kui ohustatud isikut: vahetage kõiki olemasolevaid volitusi protsess.keskkond Auditeerige kahjustatud hostil püsivusvektoreid iga operatsioonisüsteemi kohta (vt allpool jaotist „Mida kaitsjad peaksid tegema”) ja eemaldage sõltuvus.
Tärkavad mustrid
See kampaania on hea näide muutusest, mida oleme näinud mitmes hiljutises NPM-i intsidendis: Paigalduskonksuga tellingud on vastupidav vara; kasulik koormus on vahetatavSama kirjastaja, sama pakett, sama eelinstallimine / paigaldama / pärast installimist kolmekordne ja isegi sama versiooni-tõukerütmi kadents – ainus asi, mis vahepeal muutus axois-utils:1.0.6 ja axois-utils:1.0.9 oli see fail hooks käivitamine. Allkirjapõhine tuvastus, mis on seotud A-faasi kasuliku koormusega (rahakoti tee stringid, phantom.js'i 7,667-realine koguja, Serveo C2 host, oleks märgistanud kolm esimest versiooni ja jätnud B-faasi üldse vahele.
Sama muster on nähtav ka teistes 2026. aasta kampaaniates, mida oleme jälginud: üks operaator stabiilse tugisambaga, vaheldumisi mandaatide varguse, eksamipettuste klientide, Telegram-roboti abil e-posti teel värbamise ja nüüd ka DDoS-värbamise vahel. Kaitsjad, kes tuginevad kasuliku andmevoo allkirjadele, kaotavad iga kampaania teise vooru.
Järeldus on see, et Installiaegsed TTP-d on parem signaalKolmekordsed installikonksu deklaratsioonid, imporditavate failide installiskriptid. https or lapseprotsess, installige skripte, mis kirjutavad kasutaja käivituskaustadesse, ja installige skripte, mis lahendavad hostinimesid tasuta pöördtunnelteenustes (Serveo, localhost.run, ngrok, cloudflared) on kõik haruldased legitiimsetes pakettides ja levinud pahatahtlikes pakettides.
Mida kaitsjad peaksid tegema
- Lukustusfaili audit. Otsi iga pakett-lukk.json / lõng.lukk / pnpm-lock.yaml teie organisatsioonis täpsete stringide jaoks axois-utils ja kriiditempelKohtle iga matši kompromissina.
- Pööra saladusi mõjutatud peremeesorganismidel. A-faasis kogutakse hulgi SSH, pilve, GitHubi, npm-i ja rahakoti volikirju. Eeldatakse, et kõik volikirjad on kunagi olemas. protsess.keskkond, ~ / .ssh, ~/.aws, ~/.npmrc, ~ / .konfigvõi mis tahes .ümbrik* kahjustatud hostil olev fail on avalikustatud.
- Eemaldage püsivus (etapp B). Windowsis kustutage HKCU\Tarkvara\Microsoft\Windows\Praegune versioon\Käivita\SüsteemiUuendus, eemaldage %APPDATA%\Microsoft\Windows\Start menüü\Programmid\Startup\system-update.batja schtasks /delete /tn SystemUpdate /fLinuxis crontab -e ja eemaldage @reboot sõlm …, systemctl –kasutaja keelamine –nüüd phantom-bot.service siis kustuta ~/.config/systemd/user/phantom-bot.service, nühkima .bashrc / .zshrc / /etc/rc.localmacOS-is launchctl unload ~/Library/LaunchAgents/com.phantom.bot.plist seejärel kustutage loendiloend.
- Blokeeri C2 hostid. Lisa IOC tabelis olevad neli C2 lõpp-punkti oma väljuva andmevoo blokeerimisloendisse. *.serveousercontent.com ja *.lhr.elu saab hulgi blokeerida, kui teie keskkonnal pole tagasitunneli teenuste jaoks seaduslikku kasutust.
- Jahtimine installimise ajal tekkiva TTP järgi, mitte kasulik koormus. Inventuuri lukustusfaili kirjed, mille pakett.json kuulutab eelinstallimine, paigaldamaja pärast installimist kõik osutavad samale skriptile. Võrrelge paketi vanust ja avaldaja kinnituse olekut. See muster on legitiimsete pakettide puhul haruldane ja on kõige usaldusväärsem signaal, mida PhantomBot taaskasutab.
- C2 binaarfaili audit. Igaüks, kes laadis alla axois-utils:1.0.9 omab operaatori C2 serverit (c2 ELF, sha256 165fa92d…) kettal. Skannib vahemälusid ja CI artefaktide salvestusruume. Binaarfail ise on passiivne, kuid selle olemasolu tööjaamas on ühemõtteline tõend paketi installimise kohta.
Lõppjoon
Sama operaator, sama pakett ja sama installikonks võivad 48 tunni jooksul edastada täiesti erinevaid ohte. Jälgige tellinguid, mitte koormust.




