TL; DR
En sam založnik NPM, deadcode09284814, je vodil kampanjo s tipografskimi napakami proti legitimnim axios in chalk-template pakete od sredine maja 2026.
Kampanja se je začela kot konvencionalna krajo poverilnic in denarnic, s katero so se podatki izluščili v Serveo HTTPS tunel.
On 2026-05-17s axois-utils:1.0.9, je operater v celoti zamenjal koristni tovor: isti trojni namestitveni kavelj, isti založnik, isto ime paketa.
Toda namestitveni skript je zdaj rekrutiran v večplatformski DDoS botnet.
Tovor govori o localhost.run predor in sprejema ukaze za poplavo, s čimer okužena okolja spremeni v del botneta, zmožnega DDoS-a.
Operater je celo poslal Binarna datoteka strežnika C2 znotraj tarballa, kar kaže na jasno eskalacijo od kraje poverilnic do aktivne infrastrukture botneta.
Dva paketa, štiri različice so še vedno aktivne v registru in en operater zdaj vzporedno izvaja oba modula.
Resnost: visoka.
Napad: Kako deluje
Kampanja je zgrajena na namerno dolgočasnem ogrodju za dostavo: dve tipkarsko napačni imeni paketov, ki se za eno črko razlikujeta od paketov s stotinami milijonov tedenskih prenosov (axios, predloga za kredo) in trojno namestitev hooks ki zagotavljajo izvedbo. Zanimivo je, kaj oder nosi — in dejstvo, da je upravljavec spremenil tovor, ne da bi spremenil karkoli drugega.
Skupni oder
Vsaka objavljena različica obeh paketov deklarira iste tri življenjske cikle hooks in paket.json:
Seznam koristnega tovora pod vsemi tremi hooks je pretirano — po namestitvi sam bi deloval v privzetem načinu namestite npmIzbira je pomembna: namestitev npm –ignore-scripts preskoči skripte, vendar več pogostih delovnih procesov (obnavljanje predpomnilnika CI, ki ponovno zažene življenjski cikel) hooks selektivno ali razvijalci, ki samo izvajajo revizijo po namestitvi) trojno redundantno deklaracijo najvarneje uporabijo za napadalca.
kreda-tempalte doda drugi mehanizem: deklarira axois-utils:^1.0.7 kot izvajalno okolje odvisnostNamestitev tipografsko napačne besede predloga za kredo zato potegne tudi sorodni typosquat in se oba koristna tovora zaženeta. Paketa sta usklajen par, ne pa neodvisna seznama.
Faza A – kradljiva oseba s poverilnicami/denarnicami (2026-05-15 → danes)
Faza A je prvotni koristni tovor. Nakladalnik je kratek postinstall.js ki kaže na povratni tunel HTTPS Serveo:
Poddomena Serveo kodira ciljni IP (80.200.28.28) neposredno v imenu gostitelja – prepoznavna konvencija za to storitev. Operater naključno predpono poddomene med različicami rotira, da bi se izognil seznamom blokov naivnih domen, vendar se osnovni IP nikoli ne premakne. (predloga-krede:1.0.14 Rabljeni 8a3e818ea8f11186-80-200-28-28…; uporaba 1.0.16 / 1.0.19 / 1.0.20 f04a273bd84c0622-….)
postinstall.js roke stran od phantom.js, 7,667-vrstični združeni "zbiralni" modul. phantom.js sprehaja gostitelja za:
Zasebni ključi SSH (~/.ssh/*) |
.npmrc vsebino in vse npm_* žetoni okolja |
| Datoteke s poverilnicami AWS, GCP in Azure |
GitHubov regularni izraz žetona za osebni dostop (ghp_*, gho_*, ghu_*, ghs_*) |
| Artefakti kripto denarnice za Bitcoin, Exodus, Electrum, Monero, Litecoin, Dogecoin, Zcash, Dash |
Rekurzivno .env* sprehod ~/projects, ~/dev, ~/code, ~/workspacein namestitveni cwd |
Zgodovine Shell in celotno process.env |
Paket je OBJAVLJEN v predor Serveo na / zbiratiNi zakrivanja, ni logike proti virtualnim strojom, ni umirjanja – operater stavi na količino in hitrost.
Faza B – novačenje za DDoS napade PhantomBot (17. 05. 2026, samo axois-utils:1.0.9)
Faza B nadomesti phantom.js + postinstall.js z eno samo datoteko z imenom distrube.js (tipkarska napaka je na strani operatorja). Trojni kavelj v package.json se ne spremeni; paket ohranja isto ime, obseg in vzorec nadgradnje različice. Od zunaj je axois-utils:1.0.9 videti kot manjši nadaljevalec različice 1.0.6. V notranjosti pa gre za drugačno družino zlonamerne programske opreme.
distrube.js odpre se s konfiguracijskim blokom, ki poimenuje lastno blagovno znamko operaterja:
// 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')}`; |
Komentarji so naslovljeni na bodočega operaterja, ki bo izvajal komplet (»Uporabite URL HTTPS localhost.run«). To, poleg tega, kar je priloženo odjemalcu bota, sporoča, da to ni le koristni tovor žrtve – to je komplet.
Tok:
- Vztrajnost Najprej se zažene. Skript se namesti na tri različne načine glede na operacijski sistem (register Run + Zagonska mapa + schtasks v sistemu Windows; crontab + storitev fantomskega bota sistemska enota + .bashrc/.zshrc dodajte + /etc/rc.local v Linuxu; LaunchAgent com.phantom.bot.plist v sistemu macOS). Ime storitve vztrajnosti in oznaka LaunchAgent sta tako fantomski robot / com.phantom.bot, od koder izvira tudi ime kampanje.
- Sistemske informacije iz programa Exfil zažene se enkrat – enkratni POST s prstnim odtisom na b94b6bcfa27554.lhr.life:443/collect, ki vsebuje ime gostitelja, platformo, arch, uporabniško ime, CPU/RAM, omrežne vmesnike, process.env, cwd, domači imenik, različico vozlišča in javni IP. To je veliko manj agresivno kot faza A: brez SSH, brez denarnic, brez rekurzije .env. Naloga bota je vpis, ne krajo.
- Zanka srčnega utripa Vsakih 30 sekund odpre HTTPS POST na b94b6bcfa27554.lhr.life:443/. Uporabniški agent je PhantomBot/1.0. Preverjanje TLS je izrecno onemogočeno (rejectUnauthorized: false). Odgovor C2 se razčleni kot JSON oblike {type, target, port, duration, threads, method} in pošlje.
- Poplavni arzenal je povezan s šestimi ukazi:
| Vrsta ukaza | Moduli | Opombe |
|---|---|---|
| ping | Odgovor na vprašanje Živost | Bot se identificira |
| http | Poplava HTTP-ja | Poplava zahtevkov na 7. plasti |
| https | Poplava HTTPS | Enako kot http, zavito v TLS |
| tcp | Poplava TCP-ja | 65 KB naključne neželene pošte |
| udp | Poplava UDP | 65,507-bajtni UDP paketi |
| hitro | DoS s hitro ponastavitvijo HTTP/2 | Tehnika CVE-2023-44487 iz leta 2023 |
Vseh pet modulov za poplave traja ciljna, pristanišče, trajanjein teme argument – bot je generični najeti flooder, ki ni namenjen nobeni določeni žrtvi. Seznam žrtev operaterja je na C2, ne v paketu.
Kaj je novega tukaj — dobavljena binarna datoteka C2
Faza A ima znano obliko: kraja poverilnic, namestitveni kavelj, tuneliranje C2 s strani prodajalca. Faza B je Prav tako znana oblika – DDoS botneti so že leta stalnica zlonamernih npm paketov. Nenavadno je, da je operater poslal stran strežnika kompleta v tarballu npm:
- c2 — 4-megabajtno prevedeno binarno datoteko Go ELF
- c2.go — 426-vrstična izvorna koda Go za to binarno kodo
Nobena od datotek se ne pokliče z nobenim namestitvenim kavljem. Nista del koristnega tovora žrtve. Nahajata se v imeniku paketa na enak način kot datoteka z dokumentacijo. Najbolj verjetna razlaga je, da je operater potisnil svoje razvojno delovno drevo v npm, ne da bi uredil seznam datotek – pravi OpSec spodrsljaj – in da je bil poslan celoten dvostranski komplet: odjemalec, ki ga izvaja žrtev, in strežnik, ki ga izvaja operater.
To je del zgodbe, ki upravičuje označevanje za "komplet botnetov na ključ". Vsakdo, ki je prenesel axois-utils:1.0.9 pred odstranitvijo nima le vzorca žrtve – imajo tudi delujoč strežnik C2.
Pivot, v enem stavku
Isti založnik, ista imena paketov, isti trojni kavelj, ista »fantomska« blagovna znamka – vendar koristni tovor je čez noč spremenil model monetizacijeod »skrivnosti žetve, ki jih lahko preprodajam« do »najema poplavne zmogljivosti, ki jo lahko dam v najem«. Časovni okviri namestitve, ki bi jih morali branilci spremljati, so v obeh fazah skoraj enaki; obramba na podlagi podpisov, ki je povezana z nizi poti denarnice faze A ali z phantom.jsZbiralec s 7,667 vrsticami bi v celoti zgrešil fazo B.
| Datum (UTC) | Event |
|---|---|
| 2026-05-15 | Prva objava: axois-utils:1.0.4 (Testna gradnja LAN-a, razvojna ploščad na 192.168.129.19) |
| 2026-05-15 | axois-utils:1.0.6 objavljeno — Faza A C2 zamenjana z 80.200.28.28 prek tunela Serveo; komentar vira // Change to '80.200.28.28' for public potrdi zamenjavo dev→prod |
| 2026-05-16 | chalk-tempalte:1.0.14 in 1.0.16 objavljeno — deklariranje verižnega nalagalnika axois-utils:^1.0.7 kot odvisnost med izvajanjem; poddomena Serveo zasukana |
| 2026-05-16 | Kampanja faze A, odkrita med rutinskim skeniranjem npm; uporabljene so bile ugotovitve o potrjeni zlonamernosti. |
| 2026-05-17 | axois-utils:1.0.9 objavljeno — pivot koristnega tovora: novačenje PhantomBot DDoS prek tunela localhost.run; na strani operaterja c2 binarno in c2.go izvorna koda je bila poslana v tarballu |
| 2026-05-17 | chalk-tempalte:1.0.19 in 1.0.20 objavljeno – še vedno faza A (kradljiva različica); operater zdaj vzporedno izvaja oba modula |
| 2026-05-17 | Odkritje faze B med rutinskim skeniranjem; sklepi so bili uporabljeni za vse 2026-05-17 različice |
| (v teku) | Poročila o odstranitvi so v teku; vsi štirje objavljeni paketi so v času pisanja še vedno na voljo v registru |
Kazalci kompromisa
Paketi
| Ekosistem | paket | različice |
|---|---|---|
| npm | axois-utils (tipografska tipografija aksiosov) | 1.0.4, 1.0.6, 1.0.9 |
| npm | chalk-tempalte (tipografska koda predloge s kredo) | 1.0.14, 1.0.16, 1.0.19, 1.0.20 |
Identiteta avtorja
| Polje | Vrednost |
|---|---|
| založnik npm | deadcode09284814 |
| E-poštni naslov založnika | phantomdeadcode@tutamail.com |
| SCM preverjanje | none |
Poveljevanje in nadzor
| Zdravljenje | Končna točka | Promet |
|---|---|---|
| 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 (starejša različica) |
| A | 80.200.28.28:443/collect | Osnovna končna točka VPS |
| B | b94b6bcfa27554.lhr.life:443/ | localhost.run HTTPS obratni tunel |
Povzetki datotek (SHA-256)
| file | SHA-256 | Opombe |
|---|---|---|
c2 (Pojdi na ELF, 4 MB) | 165fa92d237fd017c227d00da06ab788212a62be94bf61e95df2d22d00377ef2 | Strežnik C2 na strani operaterja, dobavljen v notranjosti axois-utils:1.0.9 |
c2.go (426 vrstic) | 7d0ae79fdb1e9968f3323a3712b624643a782ba3efb2cf3a2cb9c4c5513cea30 | Izvorna koda Go za binarno datoteko C2 |
distrube.js | 308b15c023088a7188dea4ef609010ac2493eb4c365b103053d7621a9ca5b935 | Odjemalec bota faze B |
phantom.js (chalk-tempalte:1.0.19) | 9e380ec88d3ccf3929e1a104e3b868d4d7b59ca189a8a431a54e9f3357dfdd81 | Zbiralec poverilnic / denarnic faze A |
phantom.js (chalk-tempalte:1.0.20) | d1c9e3f296ee9f7d5032f73f9c504cede50334bc14c394055fd5cb9c3a6e08b3 | Zbiralnik faze A (različica 1.0.20) |
postinstall.js (chalk-tempalte:1.0.19 = 1.0.20) | ffba9bdd6793edd5b38e12900252c1813a693f59c25af51c3b658cf3f27b6162 | Nalagalnik faze A, bajtno identičen v obeh različicah |
Pripisovanje in motivacija
To kampanjo spremljamo kot PhantomBot, pri čemer je operater prevzel lastno blagovno znamko od Uporabniški agent: PhantomBot/1.0 glava srčnega utripa, storitev fantomskega bota enota systemd, com.phantom.bot Oznaka LaunchAgent in phantomdeadcode@ e-poštni naslov. Operator je glede tega imena dosleden v vsaj štirih artefaktih.
Katalog signalov
- Založba - mrtva koda09284814 na npm. Račun z enim ročajem, e-pošta za enkratno uporabo Tutamail, ne SCM preverjanje. Ni predhodne zgodovine objav po tej kampanji.
- Ponovna uporaba blagovne znamke — »phantom« se pojavi v e-poštnem sporočilu založnika, v imenu datoteke zbiralnika faze A (phantom.js), v imenu storitve vztrajnosti faze B (storitev fantomskega bota), v oznaki LaunchAgent (com.phantom.bot) in v uporabniškem agentu bota (PhantomBot/1.0).
- Infrastruktura — En sam VPS na 80.200.28.28 fronte faze A preko rotacije poddomene Serveo; faza B se premakne v a localhost.run povratni predor (b94b6bcfa27554.lhr.življenje). Storitve obeh ponudnikov sta brezplačni in zahtevata le odhodni SSH na strani operaterja, kar je skladno z nizkoproračunskimi nastavitvami z nizkimi operativnimi stroški.
- Slog kode — Preprost JavaScript v celotnem besedilu; brez zamegljevanja, brez kodiranja nizov, brez preverjanj proti virtualnim strojom. Imena spremenljivk so opisna (krastiSistemskeInformacije, executeCommand, httpFlood). Komentarji v distrube.js neposredno nagovarjati bodočega operatorja (»Uporabite URL HTTPS za localhost.run«), kar nakazuje, da je bila datoteka namenjena prerazporeditvi kot komplet in ne uporabi enega samega napadalca.
- Izpisek iz Operativne varnosti — Tarball faze B vsebuje tako odjemalca bota kot tudi strežnik C2 na strani operaterja (c2 VILENČEK + c2.go vir). To je skladno z operaterjem, ki je svoje delovno drevo prenesel v npm, ne da bi pregledal seznam datotek. Ali je operater neizkušen ali pa je komplet pomenilo za javno distribucijo in binarna datoteka C2 je del izdelka.
- Samopotrditev - axois-utils:1.0.4 vsebuje komentar vira // Spremeni na '80.200.28.28' za javno v vrstici 12, ki potrjuje napredek razvoja / uprizarjanja / produkcije, ki ga operaterji običajno zanikajo.
Motivacija
Koristni tovor faze A je preprosta finančna kraja: poverilnice, ključi v oblaku, žetoni GitHub in kripto denarnice imajo likvidne trge za nadaljnjo prodajo. Faza B je prav tako finančna, vendar posredna: storitve DDoS za najem (»booter«) najemajo poplavne zmogljivosti iz minute v minuto, boti, kot je ta, ki je dostavljen tukaj, pa so inventar, na katerem te storitve delujejo. 30-sekundni srčni utrip, generični ciljna/pristanišče/trajanje shema ukazov in arzenal poplav s petimi protokoli sta standard produkt operaterja zagonskega sistema.
Vzporedno izvajanje obeh modulov — predloga-krede:1.0.19 in 1.0.20 nadaljujte s pošiljanjem tatuja, medtem ko axois-utils:1.0.9 pošilja bota – nakazuje, da operater varuje prihodkovne tokove, namesto da bi opustil fazo A. Preobrat je Poleg tega, ne nadomestek.
Česar ne trdimo
Nismo mogli potrditi resnične identitete, ki stoji za mrtva koda09284814 ročaj in te kampanje ne pripisujemo nobenemu imenovanemu akterju grožnje, skupini ali državi. »Fantomsko« označevanje je dovolj dosledno v vseh artefaktih, da nakazuje na enega samega operaterja, vendar pošiljanje binarne datoteke C2 v obliki kompleta pušča možnost, da bodo prihodnji paketi iz nepovezanih ročkov ponovno uporabili isto kodo.
Vpliv, trendi in kaj naj storijo zagovorniki
vpliv
Legitimne tarče za počep axios in predloga za kredo so v ekosistemu JavaScript zelo odvisni; axios sam se uvršča med trideset najpogosteje prenesenih npm paketov. Imena s tipkarsko napako so od pravih oddaljena le en pritisk tipke (axois ↔ axios, predloge ↔ Predloga), in obe sta jezikovno verjetni napačni črkovanju.
Pred odstranitvijo nismo mogli pridobiti zanesljive statistike prenosov za zlonamerne različice – npm ne hrani števila prenosov za posamezne različice, ko je paket preklicano objavljen, in npms.ioProxyji v slogu - so v tej lestvici hrupni. Vsaka organizacija, katere datoteka zaklepanja se razreši v paket z imenom axois-utils or kreda-tempalte od založnika mrtva koda09284814 je treba obravnavati kot ogroženo: zamenjati vse prisotne poverilnice process.env na prizadetem gostitelju preverite vektorje vztrajnosti za vsak operacijski sistem (glejte »Kaj naj storijo branilci« spodaj) in odstranite odvisnost.
Nastajajoči vzorci
Ta kampanja ponazarja premik, ki smo ga opazili v več nedavnih incidentih z novimi preventivnimi ukrepi: Oder s kavljem za montažo je trpežno sredstvo; koristni tovor je zamenljivIsti založnik, isti paket, isti prednamestitev / namestitev / po namestitvi trojna in celo enaka kadenca nadgradnje različic – edina stvar, ki se je spremenila med axois-utils:1.0.6 in axois-utils:1.0.9 je bila datoteka hooks zagon. Zaznavanje na podlagi podpisa, povezano s koristnim tovorom faze A (nizi poti denarnice, phantom.jsZbiralnik s 7,667 vrsticami, gostitelj Serveo C2), bi označil prve tri različice in v celoti zgrešil fazo B.
Enak vzorec je viden tudi v drugih kampanjah iz leta 2026, ki smo jih spremljali: en sam operater s stabilno podporo, ki preklaplja med krajo poverilnic, strankami za goljufanje na izpitih, izključitvijo prek Telegramovih botov in zdaj novačenjem za DDoS. Zagovorniki, ki se zanašajo na podpise koristnih tovorov, bodo še naprej izgubljali drugi krog vsake kampanje.
Posledica tega je, da Časovni intervali ob namestitvi so boljši signalTrojne deklaracije install-hook, namestitvene skripte, ki uvažajo https or podrejeni_proces, namestite skripte, ki pišejo v zagonske mape uporabnika, in namestite skripte, ki razrešujejo imena gostiteljev na brezplačnih storitvah obratnega tuneliranja (Serveo, localhost.run, ngrok, cloudflared) so redki v legitimnih paketih in pogosti v zlonamernih.
Kaj naj storijo branilci
- Revizija zaklepnih datotek. Išči vsakih package-lock.json / preja.zaklepanje / pnpm-lock.yaml v vaši organizaciji za natančne nize znakov axois-utils in kreda-tempalteVsako tekmo obravnavajte kot kompromis.
- Rotiraj skrivnosti na prizadetih gostiteljih. Faza A je v množičnem zbiranju pridobila poverilnice za SSH, oblak, GitHub, npm in denarnico. Predpostavimo vse poverilnice, ki so kdajkoli prisotne v process.env, ~ / .ssh, ~/.aws, ~/.npmrc, ~ / .configali katero koli drugo .env* Datoteka na prizadetem gostitelju je izpostavljena.
- Odstranite vztrajnost (faza B). V sistemu Windows izbrišite HKCU\Programska oprema\Microsoft\Windows\Trenutna različica\Zaženi\Posodobitev sistema, Odstrani %APPDATA%\Microsoft\Windows\Meni Start\Programi\Zagon\system-posodobitev.batin schtasks /delete /tn SystemUpdate /fV Linuxu, crontab -e in odstranite Vozlišče @reboot …, systemctl –uporabnik onemogoči –zdaj phantom-bot.service nato izbriši ~/.config/systemd/uporabnik/phantom-bot.service, piling .bashrc / .zshrc / /etc/rc.localV sistemu macOS, launchctl unload ~/Library/LaunchAgents/com.phantom.bot.plist nato izbriši plist.
- Blokiraj gostitelje C2. Dodajte štiri končne točke C2 iz tabele IOC na svoj izhodni seznam blokov. *.serveousercontent.com in *.lhr.life* je mogoče v celoti blokirati, če vaše okolje nima legitimne uporabe za storitve obratnega tuneliranja.
- Lov po času namestitve TTP, ne pa koristnega tovora. Vnosi v zaklepno datoteko inventarja, katerih paket.json izjavi prednamestitev, namestitevin po namestitvi vsi kažejo na isti skript. Preverite starost paketa in stanje preverjanja založnika. Ta vzorec je redek v legitimnih paketih in je najbolj zanesljiv signal, ki ga PhantomBot ponovno uporabi.
- Revizija za binarno datoteko C2. Vsakdo, ki je prenesel axois-utils:1.0.9 ima strežnik C2 operaterja (c2 ELF, sha256 165fa92d…) na disku. Preglej predpomnilnike in shrambe artefaktov CI. Binarna datoteka je sama po sebi mirujoča, vendar je njena prisotnost na delovni postaji nedvoumen dokaz, da je bil paket nameščen.
Zaključna vrstica
Isti operater, isti paket in isti namestitveni kavelj lahko v 48 urah prinesejo povsem različne grožnje. Pazite na oder, ne na koristni tovor.




