TL; DR
Jedan NPM izdavač, deadcode09284814, pokrenuo je kampanju s pogrešnim tipografskim uvredama protiv legitimnih axios i chalk-template paketi od sredine maja 2026.
Kampanja je započela kao konvencionalna krađa akreditiva i novčanika, izvlačeći podatke u Serveo HTTPS tunel.
On 2026-05-17, sa axois-utils:1.0.9, operater je u potpunosti zamijenio korisni teret: isti trostruki instalacijski scaffol, isti izdavač, isto ime paketa.
Ali instalacijska skripta je sada regrut za DDoS botnet na više platformi.
Korisni teret govori o localhost.run tunelira i prihvata flood komande, pretvarajući zaražena okruženja u dio DDoS-sposobnog botneta.
Operater je čak i poslao Binarni kod C2 servera unutar tarballa, što pokazuje jasnu eskalaciju od krađe akreditiva do aktivne botnet infrastrukture.
Dva paketa, četiri verzije su još uvijek aktivne u registru i jedan operater sada pokreće oba modula paralelno.
Ozbiljnost: visoka.
Napad: Kako funkcioniše
Kampanja je izgrađena na namjerno dosadnoj skeli za isporuku: dva tipografski pogrešna imena paketa, jedno slovo različita od paketa sa stotinama miliona sedmičnih preuzimanja (axios, predložak kredom) i trostruku instalaciju hooks koji garantuju izvršenje. Zanimljivo je šta skela nosi — i činjenicu da je operater promijenio teret bez ikakvih drugih promjena.
Zajednička skela
Svaka objavljena verzija oba paketa deklariše ista tri životna ciklusa hooks in package.json:
"scripts": { "preinstall": "node <payload>.js", "install": "node <payload>.js", "postinstall": "node <payload>.js" } Navođenje korisnog tereta pod sva tri hooks je pretjerano — nakon instalacije sam bi se pokrenuo u zadanom stanju npm installIzbor je važan: npm instalacija –ignore-scripts preskače skripte, ali nekoliko uobičajenih tokova rada (CI keš vraća taj životni ciklus ponovnog pokretanja) hooks selektivno ili programeri koji samo vrše reviziju nakon instalacije) daju trostruko redundantnu deklaraciju kao najsigurniju opkladu za napadača.
kreda-predložak dodaje drugi mehanizam: deklariše axois-utils:^1.0.7 kao okruženje za izvođenje zavisnostInstaliranje tipografske greške predložak kredom stoga povlači i srodni typosquat, i oba paketa se pokreću. Dva paketa su koordinirani par, a ne nezavisni popisi.
Faza A — kradljivac akreditiva / novčanika (2026-05-15 → danas)
Faza A je originalni korisni teret. Utovarivač je kratak postinstall.js koji ukazuje na Serveo HTTPS obrnuti tunel:
// 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 poddomena kodira odredišnu IP adresu (80.200.28.28) direktno u nazivu hosta — prepoznatljiva konvencija za tu uslugu. Operator rotira nasumični prefiks poddomene između verzija kako bi izbjegao liste blokiranja naivnih domena, ali se osnovna IP adresa nikada ne mijenja. (kreda-predložak:1.0.14 polovan 8a3e818ea8f11186-80-200-28-28…; 1.0.16 / 1.0.19 / 1.0.20 upotreba f04a273bd84c0622-….)
postinstall.js ruke dalje od phantom.js, "kolektorski" modul u paketu od 7,667 linija. phantom.js šeta domaćina za:
SSH privatni ključevi (~/.ssh/*) |
.npmrc sadržaj i bilo koji npm_* tokeni okruženja |
| Datoteke s AWS, GCP i Azure vjerodajnicama |
GitHub regularni izraz tokena za lični pristup (ghp_*, gho_*, ghu_*, ghs_*) |
| Artefakti kripto-novčanika za Bitcoin, Exodus, Electrum, Monero, Litecoin, Dogecoin, Zcash, Dash |
Rekurzivni .env* hodati kroz ~/projects, ~/dev, ~/code, ~/workspacei instalacijski cwd |
Shell historije i potpuni process.env |
Paket je poslan u Serveo tunel na / skupitiNema obfuskacije, nema anti-VM logike, nema staging procesa — operater se ulaže u volumen i brzinu.
Faza B — Regrutacija za PhantomBot DDoS napade (17.05.2026., samo axois-utils:1.0.9)
Faza B zamjenjuje phantom.js + postinstall.js jednom datotekom pod nazivom distrube.js (greška u kucanju je od strane operatora). Triple-hook scaffolding u package.json ostaje nepromijenjen; paket zadržava isto ime, opseg i obrazac za povećanje verzije. Izvana, axois-utils:1.0.9 izgleda kao manji nastavak verzije 1.0.6. Iznutra, to je drugačija porodica zlonamjernog softvera.
distrube.js otvara se konfiguracijskim blokom koji imenuje vlastiti brend operatera:
// 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')}`; |
Komentari su upućeni budućem operateru koji pokreće kit („Koristite svoj HTTPS URL localhost.run“). To, plus ono što se isporučuje uz bot klijenta, govori da ovo nije samo teret žrtve - to je kit.
Tok:
- upornost Prvo se pokreće. Skripta se instalira na tri različita načina po operativnom sistemu (registar trčanje + Startup folder + schtasks na Windowsu; crontab + phantom-bot.service sistemska jedinica + .bashrc/.zshrc dodati + /etc/rc.local na Linuxu; LaunchAgent com.phantom.bot.plist na macOS-u). Naziv usluge persistence i oznaka LaunchAgent su oboje fantomski robot / com.phantom.bot, odakle i potiče naziv kampanje.
- Izlaz sa sistemskih informacija pokreće se jednom — jednokratni POST otiska prsta na b94b6bcfa27554.lhr.life:443/collect koji sadrži naziv hosta, platformu, arch, korisničko ime, CPU/RAM, mrežne interfejse, process.env, cwd, početni direktorij, verziju čvora i javnu IP adresu. Ovo je mnogo manje agresivno od Faze A: nema SSH-a, nema novčanika, nema .env rekurzije. Posao bota je da se registruje, a ne da krade.
- Petlja otkucaja srca Otvara HTTPS POST svakih 30 sekundi na b94b6bcfa27554.lhr.life:443/. Korisnički agent je PhantomBot/1.0. TLS verifikacija je eksplicitno onemogućena (rejectUnauthorized: false). C2 odgovor se parsira kao JSON oblika {type, target, port, duration, threads, method} i šalje se.
- Arsenal poplava povezan je sa šest komandi:
| Tip komande | modul | bilješke |
|---|---|---|
| ping | Odgovor na pitanje o živosti | Bot se identificira |
| http | HTTP poplava | Poplava zahtjeva sloja 7 |
| HTTPS | HTTPS poplava | Isto kao http, omotano TLS-om |
| tcp | TCP poplava | 65 KB neželjene pošte sa slučajnim sadržajem |
| udp | UDP poplava | UDP paketi od 65,507 bajtova |
| brzo | DoS sa brzim resetovanjem na HTTP/2 | Tehnika CVE-2023-44487 iz 2023. |
Svih pet modula za poplave uzimaju cilj, luka, trajanje, I teme argument — bot je generički flooder za iznajmljivanje, koji nije usmjeren ni na jednu određenu žrtvu. Operaterova lista žrtava nalazi se na C2, a ne u paketu.
Šta je novo ovdje — isporučeni C2 binarni fajl
Faza A je poznatog oblika: krađa akreditiva, instalacijska kuka, tuneliranje C2 od strane dobavljača. Faza B je takođe poznati oblik — DDoS botneti su godinama bili sastavni dio zlonamjernih npm paketa. Ono što je neobično je da je operater isporučio na strani servera kompleta unutar npm tarballa:
- c2 — kompajlirani Go ELF binarni fajl od 4 megabajta
- c2.go — izvorni kod Go koda od 426 linija za taj binarni kod
Nijedna datoteka se ne poziva nijednom instalacijskom hook-om. One nisu dio žrtvenog sadržaja. Nalaze se u direktoriju paketa na isti način kao što bi se nalazila i datoteka dokumentacije. Najvjerovatnije tumačenje je da je operater prebacio svoje razvojno radno stablo na npm bez uređivanja liste datoteka - prava OpSec greška - a ono što je isporučeno je kompletan dvostrani komplet: klijent kojeg pokreće žrtva i server koji pokreće operater.
Ovo je dio priče koji opravdava postavljanje "gotovog kompleta za botnet". Svako ko je preuzeo axois-utils:1.0.9 "Before Takedown" ne samo da ima uzorak žrtve - već ima i funkcionalan C2 server.
Osovina, u jednoj rečenici
Isti izdavač, ista imena paketa, ista trostruka kuka, isto „fantomsko“ brendiranje — ali Korisni teret je preko noći promijenio model monetizacijeod „sakupljanja tajni koje mogu preprodati“ do „iznajmljivanja kapaciteta poplava koje mogu zakupiti“. Vremenski periodi instalacije (TTP) koje branioci trebaju pratiti gotovo su identični u obje faze; odbrane zasnovane na potpisima su ključane za stringove putanje novčanika Faze A ili za phantom.jsKolekcionar sa 7,667 linija bi u potpunosti propustio Fazu B.
| Datum (UTC) | događaj |
|---|---|
| 2026-05-15 | Prva publikacija: axois-utils:1.0.4 (LAN testna verzija, razvojni sistem na 192.168.129.19) |
| 2026-05-15 | axois-utils:1.0.6 objavljeno — Faza A C2 zamijenjena u 80.200.28.28 putem Serveo tunela; komentar izvora // Change to '80.200.28.28' for public potvrđuje zamjenu dev→prod |
| 2026-05-16 | chalk-tempalte:1.0.14 i 1.0.16 objavljeno — deklariranje lančanog učitavača axois-utils:^1.0.7 kao zavisnost tokom izvođenja; Serveo poddomena rotirana |
| 2026-05-16 | Kampanja faze A otkrivena tokom rutinskog npm skeniranja; primijenjene su presude o potvrđenom zlonamjernom sadržaju. |
| 2026-05-17 | axois-utils:1.0.9 objavljeno — pivot korisnog tereta: regrutacija PhantomBot DDoS-a putem tunela localhost.run; na strani operatera c2 binarni i c2.go izvorni kod poslan u tarballu |
| 2026-05-17 | chalk-tempalte:1.0.19 i 1.0.20 objavljeno — još uvijek Faza A (kradljivac); operater sada pokreće oba modula paralelno |
| 2026-05-17 | Otkriće faze B tokom rutinskog skeniranja; zaključke su primijenjene na sve 2026-05-17 verzije |
| (u toku) | Izvještaji o uklanjanju su na čekanju; sva četiri objavljena paketa su i dalje dostupna u registru u vrijeme pisanja. |
Indikatori kompromisa
paketi
| Ekosistem | paket | verzije |
|---|---|---|
| npm | axois-utils (tiposkripta aksija) | 1.0.4, 1.0.6, 1.0.9 |
| npm | chalk-tempalte (tiposquat krede-šablona) | 1.0.14, 1.0.16, 1.0.19, 1.0.20 |
Identitet autora
| polje | vrijednost |
|---|---|
| npm izdavač | deadcode09284814 |
| E-pošta izdavača | phantomdeadcode@tutamail.com |
| SCM verifikacija | nijedan |
Command-and-control
| Faza | Krajnja tačka | Transport |
|---|---|---|
| A | f04a273bd84c0622-80-200-28-28.serveousercontent.com:443/collect | Serveo HTTPS tunel |
| A | 8a3e818ea8f11186-80-200-28-28.serveousercontent.com:443/collect | Serveo HTTPS tunel (ranija verzija) |
| A | 80.200.28.28:443/collect | Osnovna VPS krajnja tačka |
| B | b94b6bcfa27554.lhr.life:443/ | localhost.run HTTPS obrnuti tunel |
Sažeci datoteka (SHA-256)
| fajl | SHA-256 | bilješke |
|---|---|---|
c2 (Idi na ELF, 4 MB) | 165fa92d237fd017c227d00da06ab788212a62be94bf61e95df2d22d00377ef2 | C2 server na strani operatera, isporučuje se unutra axois-utils:1.0.9 |
c2.go (426 linija) | 7d0ae79fdb1e9968f3323a3712b624643a782ba3efb2cf3a2cb9c4c5513cea30 | Go izvorni kod za binarni C2 |
distrube.js | 308b15c023088a7188dea4ef609010ac2493eb4c365b103053d7621a9ca5b935 | Bot klijent faze B |
phantom.js (chalk-tempalte:1.0.19) | 9e380ec88d3ccf3929e1a104e3b868d4d7b59ca189a8a431a54e9f3357dfdd81 | Faza A akreditacije / sakupljač novčanika |
phantom.js (chalk-tempalte:1.0.20) | d1c9e3f296ee9f7d5032f73f9c504cede50334bc14c394055fd5cb9c3a6e08b3 | Kolektor faze A (varijanta 1.0.20) |
postinstall.js (chalk-tempalte:1.0.19 = 1.0.20) | ffba9bdd6793edd5b38e12900252c1813a693f59c25af51c3b658cf3f27b6162 | Učitavač faze A, identičan po bajtovima u obje verzije |
Atribucija i motivacija
Pratimo ovu kampanju kao PhantomBot, preuzimajući vlastiti brend operatera od Korisnički agent: PhantomBot/1.0 zaglavlje otkucaja srca, phantom-bot.service sistemska jedinica, com.phantom.bot Oznaka LaunchAgent-a i phantomdeadcode@ adresa e-pošte. Operator je konzistentan u vezi s ovim imenom u najmanje četiri artefakta.
Katalog signala
- izdavač - mrtvi kod09284814 na npm-u. Račun s jednim korisnikom, jednokratna e-pošta Tutamail, ne SCM verifikacija. Nema prethodne historije objavljivanja izvan ove kampanje.
- Ponovna upotreba brenda — „phantom“ se pojavljuje u e-poruci izdavača, u nazivu datoteke kolekcionara Phase A (phantom.js), u nazivu servisa perzistencije faze B (phantom-bot.service), u oznaci LaunchAgent-a (com.phantom.bot), i u korisničkom agentu bota (PhantomBot/1.0).
- infrastruktura — Jedan VPS na 80.200.28.28 frontovi Faze A putem rotacije Serveo poddomene; Faza B se pomiče u a localhost.run obrnuti tunel (b94b6bcfa27554.lhr.life). Obje usluge dobavljača su besplatne i zahtijevaju samo odlazni SSH na strani operatera, što je u skladu s postavkama s niskim budžetom i niskim operativnim sigurnosnim zahtjevima.
- stil koda — Običan JavaScript u cijelom tekstu; bez obfuskacije, bez kodiranja stringova, bez anti-VM provjera. Imena varijabli su opisna (krađaSistemInfo, izvršiNaredbu, httpFlood). Komentari u distrube.js direktno se obraćaju budućem operatoru („Koristite svoj HTTPS URL localhost.run“), što sugerira da je datoteka bila namijenjena za redistribuciju kao komplet, a ne za korištenje od strane jednog napadača.
- Operativna sigurnost (OpSec) — Tarball faze B sadrži i bot klijenta i C2 server na strani operatera (c2 VILENJAK + c2.go izvor). Ovo je u skladu s operaterom koji je proslijedio svoje radno stablo na npm bez revizije liste datoteka. Ili je operater neiskusan ili je komplet mislio za javnu distribuciju, a binarna datoteka C2 je dio proizvoda.
- Samopotvrđivanje - axois-utils:1.0.4 sadrži komentar izvora // Promijeni na '80.200.28.28' za javnost u liniji 12, potvrđujući napredak u razvoju / pripremi / produkciji koji operateri obično negiraju.
motivacija
Faza A je jednostavna finansijska krađa: akreditivi, cloud ključevi, GitHub tokeni i kripto novčanici imaju likvidna tržišta preprodaje. Faza B je također finansijska, ali indirektna: DDoS servisi za iznajmljivanje („booter“) iznajmljuju kapacitet po minuti, a botovi poput ovog koji se ovdje isporučuje su inventar na kojem te usluge rade. 30-sekundni otkucaj srca, generički cilj/luka/trajanje shema komandi i arsenal poplava od pet protokola su standard proizvod operatera koji pokreće sistem.
Paralelno pokretanje oba modula — kreda-predložak:1.0.19 i 1.0.20 nastaviti slati kradljivca dok axois-utils:1.0.9 šalje bota - sugerira da operater štiti tokove prihoda umjesto da napusti Fazu A. Zaokret je dodatak, ne zamjena.
Ono što ne tvrdimo
Nismo uspjeli potvrditi stvarni identitet koji stoji iza mrtvi kod09284814 ručka, i ne pripisujemo ovu kampanju nijednom imenovanom akteru prijetnje, grupi ili državi. Brendiranje "fantom" je dovoljno konzistentno u svim artefaktima da sugerira jednog operatera, ali isporuka C2 binarnog koda u stilu kita ostavlja mogućnost da će budući paketi iz nepovezanih ručki ponovo koristiti isti kod.
Uticaj, trendovi i šta bi branioci trebali učiniti
udar
Legitimni ciljevi za čučnjeve axios i predložak kredom se uveliko oslanjaju u JavaScript ekosistemu; axios sam se nalazi među trideset najčešće preuzimanih npm paketa. Imena sa tipografskim greškama udaljena su samo jedan pritisak tipke od pravih (axois ↔ axios, predložak ↔ šablon), i oba su lingvistički uvjerljive pravopisne greške.
Nismo uspjeli dobiti pouzdanu statistiku preuzimanja za zlonamjerne verzije prije uklanjanja — npm ne zadržava broj preuzimanja po verziji nakon što je paket poništen s objavljivanja, i npms.ioProxyji u -stilu su bučni na ovoj skali. Bilo koja organizacija čija se lockfile rješava u paket pod nazivom axois-utils or kreda-predložak od izdavača mrtvi kod09284814 treba tretirati kao kompromitirano: rotirati sve prisutne akreditacije u process.env Na pogođenom hostu, provjeriti vektore perzistencije po operativnom sistemu (pogledajte "Šta branioci trebaju uraditi" u nastavku) i ukloniti zavisnost.
Novi obrasci
Ova kampanja primjer je promjene koju smo vidjeli u nekoliko nedavnih incidenata s novim vlasnicima nekretnina: Skela s kukom za montažu je izdržljiva imovinakorisni teret se može mijenjatiIsti izdavač, isti paket, isto predinstalacija / instalirajte / nakon instalacije trostruka, pa čak i ista kadenca povećanja verzije — jedina stvar koja se promijenila između axois-utils:1.0.6 i axois-utils:1.0.9 je li datoteka bila hooks pokrenuti. Detekcija zasnovana na potpisu povezana sa korisnim teretom Faze A (nizovi putanje novčanika, phantom.jsKolektor od 7,667 linija, Serveo C2 domaćin) bi označio prve tri verzije i u potpunosti propustio Fazu B.
Isti obrazac je vidljiv i u drugim kampanjama iz 2026. koje smo pratili: jedan operater sa stabilnom strukturom, koji se prebacuje između krađe akreditiva, klijenata koji varaju na ispitima, izbacivanja putem Telegram botova, a sada i regrutacije za DDoS napade. Branitelji koji se oslanjaju na potpise korisnih podataka će nastaviti gubiti drugi krug svake kampanje.
Posljedica je da TTP-ovi za vrijeme instalacije su bolji signalTrostruke deklaracije install-hook-a, instaliraju skripte koje uvoze HTTPS or podređeni_proces, instalirajte skripte koje pišu u korisničke foldere za pokretanje i instalirajte skripte koje razrješavaju imena hostova na besplatnim servisima za obrnuto tuneliranje (Serveo, localhost.run, ngrok, cloudflared) su rijetki u legitimnim paketima, a uobičajeni u zlonamjernim.
Šta bi branioci trebali uraditi
- Revizija zaključanih datoteka. Pretraži svakih package-lock.json / pređa.brava / pnpm-lock.yaml u vašoj organizaciji za tačne nizove axois-utils i kreda-predložakTretirajte bilo koju utakmicu kao kompromis.
- Rotirajte tajne na pogođenim domaćinima. Faza A - masovno prikupljeni SSH, cloud, GitHub, npm i novčanik podaci. Pretpostavimo svaki podatak koji je ikada prisutan u process.env, ~ / .ssh, ~/.aws, ~/.npmrc, ~ / .config, ili bilo koji drugi .env* Datoteka na pogođenom hostu je izložena.
- Uklonite perzistentnost (Faza B). U Windowsu, izbrišite HKCU\Softver\Microsoft\Windows\Trenutna verzija\Pokreni\Ažuriranje sistema, ukloni %APPDATA%\Microsoft\Windows\Start meni\Programi\Pokretanje\system-update.bat, I schtasks /delete /tn SystemUpdate /fNa Linuxu, crontab -e i uklonite @reboot čvor …, systemctl –korisnik onemogući –sada phantom-bot.service zatim izbriši ~/.config/systemd/user/phantom-bot.service, piling .bashrc / .zshrc / /etc/rc.localNa macOS-u, launchctl istovari ~/Library/LaunchAgents/com.phantom.bot.plist zatim obrišite plist.
- Blokiraj C2 hostove. Dodajte četiri C2 krajnje tačke iz IOC tabele na vašu izlaznu listu blokiranih. *.serveousercontent.com i *.lhr.life može se potpuno blokirati ako vaše okruženje nema legitimnu upotrebu za usluge obrnutog tuneliranja.
- Lov po vremenu instalacije (TTP), a ne korisni teret. Unosi u datoteku zaključavanja inventara čiji package.json deklariše predinstalacija, instalirajte, I nakon instalacije svi ukazuju na isti skript. Provjerite starost paketa i status verifikacije izdavača. Ovaj obrazac je rijedak u legitimnim paketima i najpouzdaniji je signal koji PhantomBot ponovo koristi.
- Revizija za binarni C2. Svako ko je preuzeo axois-utils:1.0.9 ima C2 server operatora (c2 ELF, sha256 165fa92d…) na disku. Skeniraj keš memorije i skladišta CI artefakata. Binarna datoteka je sama po sebi neaktivna, ali njeno prisustvo na radnoj stanici je nedvosmislen dokaz da je paket instaliran.
Završna linija
Isti operater, isti paket i ista instalacijska veza mogu isporučiti potpuno različite prijetnje u roku od 48 sati. Pazite na scaffold, a ne na payload.




