PhantomBot Da u furtu di credenziali à a Botnet

PhantomBot: Una campagna Typosquat chì hè passata da u furtu di credenziali à un kit di botnet chiavi in ​​manu

TL; DR

Un unicu editore npm, deadcode09284814, hà fattu una campagna typosquat contr'à u legittimu axios e chalk-template pacchetti dapoi a mità di maghju 2026.

A campagna hà cuminciatu cum'è un ladru di credenziali è di portafogli cunvinziunali, esfiltrandu dati à un Tunnel HTTPS Serveo.

On 2026-05-17, cù axois-utils:1.0.9, l'operatore hà scambiatu cumpletamente u payload: listessa scaffold triplu install-hook, listessu editore, listessu nome di pacchettu.

Ma u script d'installazione hè avà una recluta di botnet DDoS multipiattaforma.

A carica utile parla à un localhost.run tunnel è accetta cumandamenti di inundazione, trasfurmendu l'ambienti infettati in parte di una botnet capace di DDoS.

L'operatore hà ancu speditu u Binariu di u servitore C2 in u tarball, chì mostra una chiara escalation da u furtu di credenziali à l'infrastruttura attiva di botnet.

Dui pacchetti, quattru versioni sempre attive in u registru, è un operatore chì esegue avà i dui moduli in parallelu.

Severità: alta.

Tittulu CIO Ogni versione axois-utils o chalk-tempalte da l'editore deadcode09284814

L'attaccu: cumu funziona

A campagna hè custruita annantu à un'impalcatura di consegna vuluntariamente noiosa: dui nomi di pacchetti typosquat, una lettera sfarente da i pacchetti cù centinaie di milioni di scaricamenti settimanali (axios, mudellu di gesso), è tripla installazione hooks chì garantiscenu l'esecuzione. Ciò chì hè interessante hè ciò chì l'impalcatura porta — è u fattu chì l'operatore hà cambiatu a carica senza cambià nunda altru.

L'impalcatura spartuta

Ogni versione publicata di i dui pacchetti dichjara i stessi trè cicli di vita hooks in package.json:

"scripts": {    "preinstall":  "node <payload>.js",    "install":     "node <payload>.js",    "postinstall": "node <payload>.js"  } 

Elencu di u payload sottu à tutti i trè hooks hè eccessivu - postinstallazione solu correrebbe in un predefinitu npm installA scelta hè impurtante: npm installà –ignore-scripts salta i script, ma parechji flussi di travagliu cumuni (restauri di cache CI chì rieseguinu u ciclu di vita hooks selettivamente, o sviluppatori chì verificanu solu postinstallazione) fà una dichjarazione tripla ridondante a scumessa più sicura per l'attaccante.

gesso-tempalte aghjusta un secondu mecanismu: dichjara axois-utils:^1.0.7 cum'è un tempu d'esecuzione dipendenza. Installà u typosquatted mudellu di gesso dunque tira ancu u typosquat fratellu, è i dui carichi utili sò eseguiti. I dui pacchetti sò una coppia coordinata, micca elenchi indipendenti.

Fase A — ladru di credenziali / portafogli (2026-05-15 → presente)

A Fase A hè u payload originale. U caricatore hè un cortu postinstallazione.js chì punta à un tunnel inversu HTTPS Serveo:

// chalk-tempalte/postinstall.js:11-13  const C2_HOST = "f04a273bd84c0622-80-200-28-28.serveousercontent.com";  const C2_PORT = 443;  const C2_PATH = '/collect'; 

U sottuduminiu Serveo codifica l'IP di destinazione (80.200.28.28) direttamente in u nome di l'ospite - una cunvenzione ricunniscibile per quellu serviziu. L'operatore gira u prefissu di u sottoduminiu aleatoriu trà e versioni per evità e liste di bloccu di duminii ingenue, ma l'IP sottostante ùn si move mai. (chalk-template:1.0.14 camion 8a3e818ea8f11186-80-200-28-28…; 1.0.16 / 1.0.19 / 1.0.20 usu f04a273bd84c0622-….)

postinstallazione.js e mani à phantom.js, un modulu "cullettore" di 7,667 linee in bundle. phantom.js cammina l'ospite per:

Chjavi private SSH (~/.ssh/*)
.npmrc cuntenutu è qualsiasi npm_* gettoni d'ambiente
I fugliali di credenziali AWS, GCP è Azure
Regex di u token d'accessu persunale di GitHub (ghp_*, gho_*, ghu_*, ghs_*)
Artefatti di cripto-portafogli per Bitcoin, Exodus, Electrum, Monero, Litecoin, Dogecoin, Zcash, Dash
Un recursivu .env* camminà attraversu ~/projects, ~/dev, ~/code, ~/workspace, è l'installazione cwd
Storie di Shell è u cumpletu process.env

U fasciu hè mandatu per POST à ​​u tunnel Serveo à / cullàÙn ci hè nisuna offuscazione, nisuna logica anti-VM, nisuna messa in scena - a scumessa di l'operatore hè nantu à u vulume è a velocità.

Fase B — Reclutamentu PhantomBot DDoS (2026-05-17, axois-utils:1.0.9 solu)

A Fase B rimpiazza phantom.js + postinstall.js cù un unicu schedariu chjamatu distrube.js (l'errore di battitura hè di l'operatore). L'impalcatura à triplu hook in package.json hè invariata; u pacchettu mantene u listessu nome, scopu è mudellu di versione-bump. Da fora, axois-utils:1.0.9 pare una seconda versione minore di 1.0.6. Dentru, hè una famiglia di malware diversa.

distrube.js si apre cù un bloccu di cunfigurazione chì nomina a marca propria di l'operatore:

// 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')}`;

I cummenti sò indirizzati à un futuru operatore chì esegue u kit ("Utilizate u vostru URL HTTPS localhost.run"). Què, più ciò chì hè inclusu accantu à u cliente bot, hè l'indicazione chì questu ùn hè micca solu un payload di vittima - hè u kit.

U flussu:

  1. Persistenza esegue prima. U script s'installa in trè modi diversi per sistema operativu (registru Run + Cartulare di avviu + schtasks nant'à Windows; crontab + phantom-bot.service unità systemd + .bashrc/.zshrc aghjunghje + /etc/rc.local nant'à Linux; LaunchAgent com.phantom.bot.plist in macOS). U nome di u serviziu di persistenza è l'etichetta LaunchAgent sò tramindui robot fantasma / com.phantom.bot, da induve vene ancu u nome di a campagna.
  2. Espulsione di l'infurmazioni di u sistema funziona una volta - un POST d'impronte digitali unicu à b94b6bcfa27554.lhr.life:443/collect chì porta u nome di l'ospite, a piattaforma, l'architettura, u nome d'utilizatore, a CPU/RAM, l'interfacce di rete, process.env, cwd, homedir, a versione di u nodu è l'IP publicu. Questu hè assai menu aggressivu chè a Fase A: nisun SSH, nisun portafogliu, nisuna recursione .env. U travagliu di u bot hè di iscriversi, micca di arrubà.
  3. Ciclu di battitu di core apre un HTTPS POST ogni 30 secondi à b94b6bcfa27554.lhr.life:443/. L'User-Agent hè PhantomBot/1.0. A verificazione TLS hè esplicitamente disattivata (rejectUnauthorized: false). A risposta C2 hè analizata cum'è JSON di a forma {type, target, port, duration, threads, method} è spedita.
  4. Arsenale di l'inundazione hè cablatu à sei cumandamenti:
Tipu di cumandamentu Module Fonti
ping Risposta di vivacità U bot s'identifica
situ http inundazione HTTP Inundazione di richieste di u livellu 7
https Inundazione HTTPS Listessu cum'è http, imballatu in TLS
tcp Inundazione TCP Spam di carica aleatoria di 65 KB
pudu Inundazione UDP Pacchetti UDP di 65,507 byte
rapidu Reset rapidu di HTTP/2 DoS A tecnica CVE-2023-44487 di u 2023

Tutti i cinque moduli d'inundazione piglianu un mira, portu, durata, e linee argumentu - u bot hè un flooder genericu à pagamentu, micca destinatu à alcuna vittima particulare. A lista di vittime di l'operatore si trova nantu à u C2, micca in u pacchettu.

Novità quì - u binariu C2 speditu

A Fase A hè una forma familiare: furtu di credenziali, ganciu d'installazione, C2 tunnellatu da u venditore. A Fase B hè ancu una forma familiare - e botnet DDoS sò state un elementu di i pacchetti npm maliziosi per anni. Ciò chì hè insolitu hè chì l'operatore hà speditu u latu servitore di u kit in u tarball npm:

  • c2 — un binariu Go ELF compilatu di 4 megabyte
  • c2.go — u codice surghjente Go di 426 linee per quellu binariu

Nè l'unu nè l'altru schedariu hè invucatu da alcun hook d'installazione. Ùn facenu parte di u payload di a vittima. Sò situati in u cartulare di u pacchettu in u listessu modu chì un schedariu di documentazione. A lettura più plausibile hè chì l'operatore hà spintu u so arburu di travagliu di sviluppu à npm senza curà a lista di i schedari - un veru lapsus OpSec - è ciò chì hè statu speditu hè u kit cumpletu à duie facce: u cliente chì una vittima esegue, è u servitore chì l'operatore esegue.

Questa hè a parte di a storia chì ghjustifica l'inquadramentu di u "kit di botnet chiavi in ​​manu". Qualchissia chì hà scaricatu axois-utils:1.0.9 prima di a rimozione ùn hà micca solu un campione di vittima - anu un servitore C2 funzionale.

U pivot, in una frase

Stessu editore, stessi nomi di pacchetti, stessa impalcatura à triplu ganciu, stessa marca "fantasma" - ma U payload hà cambiatu u mudellu di monetizazione durante a notte: da "sicreti di a racolta chì possu rivende" à "capacità di inundazione in affittu chì possu affittà". I TTP di u tempu d'installazione chì i difensori devenu surveglià sò guasi identichi in e duie fasi; difese basate nantu à a firma chjave à e stringhe di u percorsu di u portafogliu di a Fase A o à phantom.jsU cullettore di 7,667 linee averia mancatu cumpletamente a Fase B.

Data (UTC) Event
2026-05-15 Prima publicazione: axois-utils:1.0.4 (Custruzzione di prova LAN, piattaforma di sviluppu à 192.168.129.19)
2026-05-15 axois-utils:1.0.6 publicatu - A Fase A C2 hè stata scambiata per 80.200.28.28 via u tunnel Serveo; u cummentariu di a fonte // Change to '80.200.28.28' for public cunfirma u scambiu trà sviluppatori è pruduttori
2026-05-16 chalk-tempalte:1.0.14 e 1.0.16 publicatu — caricatore incatenatu chì dichjara axois-utils:^1.0.7 cum'è una dipendenza di runtime; u sottuduminiu Serveo hè statu rotatu
2026-05-16 Campagna di Fase A scuperta durante a scansione npm di rutina; verdetti cunfirmati-maliziosi applicati
2026-05-17 axois-utils:1.0.9 publicatu — pivot di carica utile: PhantomBot DDoS recrutamentu via tunnel localhost.run; latu operatore c2 binariu è c2.go surghjente speditu in u tarball
2026-05-17 chalk-tempalte:1.0.19 e 1.0.20 publicatu - sempre Fase A (stealer); l'operatore avà esegue i dui moduli in parallelu
2026-05-17 Scuperta di a Fase B durante a scansione di rutina; verdetti applicati in tutti 2026-05-17 versioni
(in corsu) Rapporti di rimozione pendenti; tutti i quattru pacchetti publicati restanu dispunibili in u registru à u mumentu di a scrittura

Indicatori di compromessi

Packages

Ecosistema pacchettu versioni
npm axois-utils (typosquat di axios) 1.0.4, 1.0.6, 1.0.9
npm chalk-tempalte (typosquat di mudellu di gesso) 1.0.14, 1.0.16, 1.0.19, 1.0.20

Identità di l'autore

campu Value
editore npm deadcode09284814
E-mail di l'editore phantomdeadcode@tutamail.com
SCM Verificazione mancunu

Command-and-control

fase Endpoint Trasporti
A f04a273bd84c0622-80-200-28-28.serveousercontent.com:443/collect Tunnel HTTPS Serveo
A 8a3e818ea8f11186-80-200-28-28.serveousercontent.com:443/collect Tunnel HTTPS Serveo (versione precedente)
A 80.200.28.28:443/collect Endpoint VPS sottostante
B b94b6bcfa27554.lhr.life:443/ localhost.run tunnel inversu HTTPS

Digesti di file (SHA-256)

File SHA-256 Fonti
c2 (Andate à ELF, 4 MB) 165fa92d237fd017c227d00da06ab788212a62be94bf61e95df2d22d00377ef2 Servitore C2 da parte di l'operatore, speditu dentru axois-utils:1.0.9
c2.go (426 linee) 7d0ae79fdb1e9968f3323a3712b624643a782ba3efb2cf3a2cb9c4c5513cea30 Andà à a surghjente per u binariu C2
distrube.js 308b15c023088a7188dea4ef609010ac2493eb4c365b103053d7621a9ca5b935 Cliente di bot di Fase B
phantom.js (chalk-tempalte:1.0.19) 9e380ec88d3ccf3929e1a104e3b868d4d7b59ca189a8a431a54e9f3357dfdd81 Cullettore di credenziali / portafogli di Fase A
phantom.js (chalk-tempalte:1.0.20) d1c9e3f296ee9f7d5032f73f9c504cede50334bc14c394055fd5cb9c3a6e08b3 Cullettore di Fase A (variante 1.0.20)
postinstall.js (chalk-tempalte:1.0.19 = 1.0.20) ffba9bdd6793edd5b38e12900252c1813a693f59c25af51c3b658cf3f27b6162 Caricatore di Fase A, identicu à byte in e duie versioni

Attribuzione è Motivazione

Seguitemu sta campagna cum'è PhantomBot, pigliendu a propria marca di l'operatore da u Agente utilizatore: PhantomBot/1.0 intestazione di u battitu cardiacu, u phantom-bot.service unità di sistema, u com.phantom.bot Etichetta LaunchAgent, è u phantomdeadcode@ indirizzu email. L'operatore hè coerente nantu à questu nome in almenu quattru artefatti.

Catalogu di signali

  • Publisher - codice mortu09284814 nantu à npm. Contu unicu, email dispunibule Tutamail, nò SCM verificazione. Nisuna storia di publicazione precedente oltre à sta campagna.
  • Riutilizazione di a marca — «phantom» appare in l'email di l'editore, in u nome di u schedariu di cullezzione di a Fase A (phantom.js), in u nome di u serviziu di persistenza di a Fase B (phantom-bot.service), in l'etichetta LaunchAgent (com.phantom.bot), è in u bot User-Agent (PhantomBot/1.0).
  • Infrastrutture — Un unicu VPS à 80.200.28.28 si trova davanti à a Fase A via a rotazione di u sottuduminiu Serveo; a Fase B si move versu un localhost.run tunnel inversu (b94b6bcfa27554.lhr.life). Tramindui i servizii di i venditori sò gratuiti è richiedenu solu SSH in uscita da parte di l'operatore, coerente cù e cunfigurazioni à bassu budget è low-OpSec.
  • Stile di codice — JavaScript chjaru in tuttu; nisuna offuscazione, nisuna codificazione di stringa, nisun cuntrollu anti-VM. I nomi di e variabili sò descrittivi (arrubà l'infurmazioni di u sistema, eseguisceCumanda, httpFlood). Cummenti in distrube.js indirizzà direttamente un futuru operatore ("Utilizate u vostru URL HTTPS localhost.run"), suggerendu chì u schedariu era destinatu à esse ridistribuitu cum'è un kit, micca adupratu da un unicu attaccante.
  • Slip OpSec — U tarball di a Fase B cuntene sia u cliente bot sia u servitore C2 da u latu di l'operatore (c2 ELF + c2.go surghjente). Questu hè coerente cù un operatore chì hà spintu u so arburu di travagliu à npm senza verificà a lista di fugliali. O l'operatore hè inespertu, o u kit hè significava per esse distribuitu publicamente è u binariu C2 face parte di u pruduttu.
  • Autocunferma - axois-utils:1.0.4 cuntene u cummentariu di a fonte // Cambià à '80.200.28.28' per u publicu à a linea 12, cunfirmendu a progressione di sviluppu / staging / pruduzzione chì l'operatori tipicamente neganu.

Motivazione

U payload di a Fase A hè un furtu finanziariu direttu: credenziali, chjave cloud, gettoni GitHub è portafogli criptografici anu tutti mercati di rivendita liquidi. A Fase B hè ancu finanziaria, ma indiretta: i servizii DDoS-for-hire ("booter") affittanu capacità di inundazione à u minutu, è i bot cum'è quellu speditu quì sò l'inventariu nantu à quale questi servizii funzionanu. U battitu di core di 30 secondi, u genericu mira/portu/durata schema di cummandu, è l'arsenale di inundazione di cinque protokolli sò i standard pruduttu di un operatore di avviatore.

Esecuzione di i dui moduli in parallelu — chalk-template:1.0.19 e 1.0.20 cuntinuà à spedisce u ladru mentre axois-utils:1.0.9 spedisce u bot - suggerisce chì l'operatore copre i flussi di entrate invece di abbandunà a Fase A. U pivot hè un Campu Tondu, micca un rimpiazzamentu.

Ciò chì ùn dichjaremu micca

Ùn simu stati capaci di cunfirmà una identità di u mondu reale daretu à u codice mortu09284814 handle, è ùn attribuemu micca sta campagna à alcun attore di minaccia, gruppu o paese numinatu. A marca "fantasma" hè abbastanza coerente in tutti l'artefatti per suggerisce un unicu operatore, ma a spedizione in stile kit di u binariu C2 lascia aperta a pussibilità chì i pacchetti futuri da handle senza relazione riutilizeranu u listessu codice.

Impact

I bersagli legittimi di squat axios e mudellu di gesso sò largamente dipendenti in l'ecosistema JavaScript; axios solu si trova trà i trenta pacchetti npm più scaricati. I nomi di typosquat sò à una sola pressione di tastu da quelli veri (axoisaxios, templatemudellu), è tramindui sò errori ortografichi linguisticamente plausibili.

Ùn avemu pussutu ottene statistiche di scaricamentu affidabili per e versioni maliziose prima di a rimozione - npm ùn conserva micca i conti di scaricamentu per versione dopu chì un pacchettu hè statu publicatu, è npms.ioI proxy di stile sò rumurosi à sta scala. Ogni urganizazione chì u so schedariu di serratura si risolve in un pacchettu chjamatu axois-utils or gesso-tempalte da l'editore codice mortu09284814 deve esse trattatu cum'è cumprumessu: rotà ogni credenziale prisente in prucessu.ambiente nant'à l'ospite affettatu, verificate i vettori di persistenza per sistema operativu (vede "Ciò chì i difensori devenu fà" quì sottu), è eliminate a dipendenza.

Modelli emergenti

Sta campagna esemplifica un cambiamentu chì avemu vistu in parechji incidenti recenti di npm: L'impalcatura à ganciu d'installazione hè l'attivu durevule; u payload hè scambiabileU listessu editore, u listessu pacchettu, u listessu preinstalla / stallà / postinstallazione triplu, è ancu a listessa cadenza di bump di versione - l'unica cosa chì hè cambiata trà axois-utils:1.0.6 e axois-utils:1.0.9 era u schedariu hooks eseguisce. Rilevazione basata nantu à a firma chjave à u payload di Fase A (stringhe di percorsu di portafogliu, phantom.jsU cullettore di 7,667 linee di , l'ospite Serveo C2) averia segnalatu e prime trè versioni è mancatu cumpletamente a Fase B.

U listessu mudellu hè visibile in altre campagne di u 2026 chì avemu seguitu: un solu operatore cù una impalcatura stabile, chì scambia trà u furtu di credenziali, i clienti chì imbroglianu l'esami, l'espulsione di Telegram-bot, è avà u recrutamentu DDoS. I difensori chì si basanu nantu à e firme di payload continueranu à perde u secondu giru di ogni campagna.

U curullariu hè chì I TTP in tempu d'installazione sò u megliu signaleDichjarazioni triple di install-hook, script d'installazione chì importanu https or prucessu_figliolu, installà scripts chì scrivenu in i cartulari d'avviu di l'utente, è installà scripts chì risolvenu i nomi di host in i servizii di reverse-tunnel gratuiti (Serveo, localhost.run, ngrok, cloudflared) sò tutti rari in i pacchetti legittimi è cumuni in quelli maliziosi.

Ciò chì i difensori devenu fà

  • Audit di u schedariu di serratura. Cerca ogni package-lock.json / filatu.serratura / pnpm-lock.yaml in a vostra urganizazione per e stringhe esatte axois-utils e gesso-tempalteTrattate ogni partita cum'è un compromessu.
  • Rotate i sicreti nantu à l'ospiti affettati. A Fase A hà raccoltu in massa credenziali SSH, cloud, GitHub, npm è wallet. Suppone ogni credenziale mai presente in prucessu.ambiente, ~ / .ssh, ~/.aws, ~/.npmrc, ~ / .config, o qualsiasi .env* U schedariu nant'à l'ospite affettatu hè espostu.
  • Eliminà a persistenza (Fase B). Nant'à Windows, sguassate HKCU\Software\Microsoft\Windows\Versione Attuale\Esegui\Aggiornamentu di u Sistema, sguassà %APPDATA%\Microsoft\Windows\Menu Start\Programmi\Startup\system-update.bat, e schtasks /delete /tn SystemAggiornamentu /fNant'à Linux, crontab -e è caccià @nodu di riavviu …, systemctl –utilizatore disattivatu – avà phantom-bot.service poi sguassà ~/.config/systemd/user/phantom-bot.service, machja .bashrc / .zshrc / /etc/rc.localNant'à macOS, launchctl scarica ~/Library/LaunchAgents/com.phantom.bot.plist dopu sguassate u plist.
  • Bluccà l'ospiti C2. Aghjunghjite i quattru punti finali C2 in a tavula IOC à a vostra lista di blocchi di uscita. *.serveousercontent.com e *.lhr.life pò esse bluccatu à l'ingrossu se u vostru ambiente ùn hà micca un usu legittimu per i servizii di tunnel inversu.
  • Caccia per TTP à u mumentu di l'installazione, micca carica utile. Entrate di u schedariu di serratura di l'inventariu chì package.json dichjaratu preinstalla, stallà, e postinstallazione tutti chì puntanu à u listessu script. Verificate l'età di u pacchettu è u statutu di verificazione di l'editore. Stu mudellu hè raru in i pacchetti legittimi è hè u signale u più affidabile chì PhantomBot riutiliza.
  • Audit per u binariu C2. Qualchissia chì hà scaricatu axois-utils:1.0.9 hà u servitore C2 di l'operatore (c2 ELF, sha256 165fa92d…) nant'à u discu. Scansione di e cache è di i magazzini d'artefatti CI. U binariu hè inattivu da per ellu, ma a so presenza nant'à una stazione di travagliu hè una prova inequivocabile chì u pacchettu hè statu installatu.

Linea di chjusura

U listessu operatore, u listessu pacchettu è u listessu ganciu d'installazione ponu purtà minacce cumpletamente diverse in 48 ore. Fighjate l'impalcatura, micca u payload.

sca-tools-software-strumenti-d'analisi-di-cumpusizione
Priorizà, rimedià è assicurà i vostri risichi di software
Uttene u vostru contu gratuitu.
Nisuna carta di creditu necessaria.

Assicurà u vostru sviluppu è a consegna di software

cù a Suite di Prodotti Xygeni