TL; DR
Penerbit npm tunggal, deadcode09284814, wis nglakokake kampanye typosquat nglawan sing sah axios lan chalk-template paket wiwit pertengahan Mei 2026.
Kampanye iki diwiwiti minangka maling kredensial lan dompet konvensional, sing nyulik data menyang Terowongan HTTPS Serveo.
On 2026-05-17, karo axois-utils:1.0.9, operator ngganti muatan kabeh: scaffold triple install-hook sing padha, penerbit sing padha, jeneng paket sing padha.
Nanging skrip instalasi saiki dadi rekrut botnet DDoS lintas platform.
Muatan kasebut ngomong karo localhost.run trowongan lan nampa printah banjir, ngowahi lingkungan sing kena infeksi dadi bagean saka botnet sing nduweni kemampuan DDoS.
Operator malah ngirim barang Binar server C2 ing njero tarball, nuduhake eskalasi sing jelas saka pencurian kredensial menyang infrastruktur botnet aktif.
Rong paket, papat versi isih aktif ing registri, lan siji operator saiki mbukak loro modul kasebut kanthi paralel.
Keruwetan: dhuwur.
Serangan: Cara Kerjane
Kampanye iki dibangun ing perancah pangiriman sing sengaja mboseni: rong jeneng paket typosquat, siji huruf sing ilang saka paket kanthi atusan yuta unduhan saben minggu (aksioma, cithakan kapur), lan instalasi kaping telu hooks sing njamin eksekusi. Sing menarik yaiku apa perancah kasebut nglampahi — lan kasunyatan manawa operator ngganti kargo tanpa ngganti apa-apa maneh.
Perancah sing dienggo bareng
Saben versi sing diterbitake saka loro paket kasebut nyatakake telung siklus urip sing padha hooks in paket.json:
"scripts": { "preinstall": "node <payload>.js", "install": "node <payload>.js", "postinstall": "node <payload>.js" } Ndhaptar muatan ing kabeh telu hooks iku berlebihan - sawise instalasi dhewekan bakal mlaku kanthi standar npm nginstalPilihan iku penting: npm nginstal –ignore-scripts nglewati skrip, nanging ana sawetara alur kerja umum (cache CI mulihake siklus urip sing mlaku maneh hooks selektif, utawa pangembang sing mung ngaudit sawise instalasi) nggawe deklarasi triple-redundant minangka taruhan paling aman kanggo penyerang.
tempalte kapur nambahake mekanisme kapindho: iki nyatakake axois-utils:^1.0.7 minangka wektu mlaku ketergantunganNginstal typosquatted cithakan kapur mulane narik typosquat sedulur uga, lan kaloro muatan kasebut mlaku. Kaloro paket kasebut minangka pasangan sing terkoordinasi, dudu dhaptar independen.
Fase A — maling kredensial / dompet (2026-05-15 → saiki)
Fase A minangka muatan asli. Loader kasebut cendhak postinstall.js sing nuduhake terowongan terbalik Serveo HTTPS:
// chalk-tempalte/postinstall.js:11-13 const C2_HOST = "f04a273bd84c0622-80-200-28-28.serveousercontent.com"; const C2_PORT = 443; const C2_PATH = '/collect'; Subdomain Serveo ngode IP tujuan (80.200.28.28) langsung ing jeneng host — konvensi sing bisa dikenali kanggo layanan kasebut. Operator muter awalan subdomain acak antarane versi kanggo ngindhari dhaptar blokir domain naif, nanging IP sing ndasari ora tau obah. (chalk-tempalte:1.0.14 used 8a3e818ea8f11186-80-200-28-28…; 1.0.16 / 1.0.19 / 1.0.20 panggunaan f04a273bd84c0622-….)
postinstall.js tangane ora kanggo phantom.js, modul "kolektor" sing dibundel 7,667 baris. phantom.js mlaku-mlaku karo tuan rumah kanggo:
Kunci pribadi SSH (~/.ssh/*) |
.npmrc isi lan apa wae npm_* token lingkungan |
| File kredensial AWS, GCP, lan Azure |
Regex token akses pribadi GitHub (ghp_*, gho_*, ghu_*, ghs_*) |
| Artefak dompet kripto kanggo Bitcoin, Exodus, Electrum, Monero, Litecoin, Dogecoin, Zcash, Dash |
Rekursif .env* mlaku liwat ~/projects, ~/dev, ~/code, ~/workspace, lan instalasi cwd |
Sejarah Shell lan lengkap process.env |
Bundel kasebut dikirim menyang trowongan Serveo ing / ngumpulakeOra ana obfuskasi, ora ana logika anti-VM, ora ana pementasan — taruhan operator ana ing volume lan kecepatan.
Fase B — Rekrutmen DDoS PhantomBot (2026-05-17, axois-utils:1.0.9 wae)
Fase B ngganti phantom.js + postinstall.js nganggo siji file jenenge distrube.js (salah ketik kuwi saka operator). Scaffold triple-hook ing package.json ora owah; paket tetep nganggo jeneng, ruang lingkup, lan pola version-bump sing padha. Saka njaba, axois-utils:1.0.9 katon kaya tindak lanjut cilik saka 1.0.6. Ing njero, iki minangka kulawarga malware sing beda.
distrube.js dibukak nganggo blok konfigurasi sing menehi jeneng merek operator dhewe:
// 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')}`; |
Komentar-komentar kasebut ditujokake kanggo operator sing bakal mbukak kit kasebut (“Gunakake URL HTTPS localhost.run sampeyan”). Iku, ditambah apa sing dikirim ing jejere klien bot, minangka pratandha yen iki dudu mung muatan korban — nanging kit kasebut.
Alirane:
- Kegiyatan mlaku dhisik. Skrip kasebut nginstal dhewe kanthi telung cara sing beda saben OS (registri Run + Folder pambuka + schtasks ing Windows; crontab + layanan phantom-bot. unit sistem + .bashrc/.zshrc nambahake + /etc/rc.local ing Linux; LaunchAgent com.phantom.bot.plist ing macOS). Jeneng layanan persistensi lan label LaunchAgent loro-lorone bot-hantu / com.phantom.bot, saka kono uga asale jeneng kampanye kasebut.
- Informasi sistem exfil mlaku sapisan — POST sidik jari siji-sijine menyang b94b6bcfa27554.lhr.life:443/collect sing nggawa jeneng host, platform, arch, jeneng panganggo, CPU/RAM, antarmuka jaringan, process.env, cwd, homedir, versi node, lan IP publik. Iki kurang agresif tinimbang Fase A: ora ana SSH, ora ana dompet, ora ana rekursi .env. Pakaryane bot yaiku ndhaptar, ora nyolong.
- Putaran denyut jantung mbukak HTTPS POST saben 30 detik menyang b94b6bcfa27554.lhr.life:443/. Agen Panganggo yaiku PhantomBot/1.0. Verifikasi TLS dipateni kanthi eksplisit (rejectUnauthorized: false). Respon C2 diurai minangka JSON kanthi bentuk {type, target, port, duration, threads, method} lan dikirim.
- Gudang senjata banjir disambungake menyang enem prentah:
| Jinis printah | modul | Cathetan |
|---|---|---|
| ping | Wangsulan urip | Bot ngenali awake dhewe |
| http | Banjir HTTP | Panjaluk banjir lapisan-7 |
| https | Banjir HTTPS | Padha karo http, dibungkus TLS |
| tcp | Banjir TCP | 65 KB spam muatan acak |
| udp | Banjir UDP | Paket UDP 65,507-byte |
| cepet | DoS reset cepet HTTP/2 | Teknik CVE-2023-44487 2023 |
Kabeh limang modul banjir njupuk target, port, dadi, Lan Utas argumen — bot iki minangka flooder umum sing disewa, ora ditujokake kanggo korban tartamtu. Dhaptar korban operator ana ing C2, ora ana ing paket kasebut.
Apa sing Anyar Ing Kene — binar C2 sing dikirim
Fase A kuwi wujud sing wis biasa: nyolong kredensial, nggandheng instalasi, C2 sing di-tunnel vendor. Fase B kuwi uga wujud sing wis dikenal — botnet DDoS wis dadi piranti kanggo paket npm sing mbebayani sajrone pirang-pirang taun. Sing ora umum yaiku operator ngirim sisih server saka kit ing njero tarball npm:
- c2 — binar Go ELF sing dikompilasi 4-megabyte
- c2.go — sumber Go 426 baris kanggo binar kasebut
Ora ana file sing dipanggil dening hook instalasi apa wae. File kasebut dudu bagean saka payload korban. File kasebut ana ing direktori paket kaya file dokumentasi. Wacan sing paling masuk akal yaiku operator ngunggah wit kerja pangembangan menyang npm tanpa ngatur dhaptar file — slip OpSec sing nyata — lan sing dikirim yaiku kit rong sisi lengkap: klien sing dilakokake korban, lan server sing dilakokake operator.
Iki bagéan saka crita sing mbeneraké framing "kit botnet turnkey". Sapa waé sing ndownload axois-utils:1.0.9 sadurunge takedown ora mung duwe sampel korban — dheweke uga duwe server C2 sing bisa digunakake.
Poros, ing siji ukara
Penerbit sing padha, jeneng paket sing padha, perancah triple-hook sing padha, branding "phantom" sing padha — nanging Payload ngganti model monetisasi sajrone sewengisaka "rahasia panen sing bisa dakdol maneh" nganti "nyewa kapasitas banjir sing bisa daksewa". TTP wektu instalasi sing kudu dideleng para pembela meh padha ing loro fase kasebut; pertahanan adhedhasar tanda tangan sing dikunci ing senar jalur dompet Fase A utawa phantom.jsKolektor 7,667 baris saka perusahaan iki mesthi ora bakal weruh Fase B babar pisan.
| Tanggal (UTC) | Event |
|---|---|
| 2026-05-15 | Publikasi pisanan: axois-utils:1.0.4 (Pambangunan uji coba LAN, perangkat pengembangan ing 192.168.129.19) |
| 2026-05-15 | axois-utils:1.0.6 diterbitake — Fase A C2 diganti dadi 80.200.28.28 liwat trowongan Serveo; komentar sumber // Change to '80.200.28.28' for public ngonfirmasi pertukaran dev→prod |
| 2026-05-16 | chalk-tempalte:1.0.14 lan 1.0.16 diterbitake — loader rantai ngumumake axois-utils:^1.0.7 minangka dependensi runtime; subdomain Serveo diputer |
| 2026-05-16 | Kampanye Fase A ditemokake sajrone pemindaian npm rutin; putusan sing wis dikonfirmasi minangka kejahatan ditrapake |
| 2026-05-17 | axois-utils:1.0.9 diterbitake — pivot muatan: PhantomBot DDoS ngrekrut liwat trowongan localhost.run; sisih operator c2 biner lan c2.go sumber dikirim ing tarball |
| 2026-05-17 | chalk-tempalte:1.0.19 lan 1.0.20 diterbitake — isih Fase A (nyolong); operator saiki mbukak loro modul kanthi paralel |
| 2026-05-17 | Panemon Fase B sajrone pemindaian rutin; putusan ditrapake ing kabeh 2026-05-17 versi |
| (aktif) | Laporan penghapusan lagi ditundha; kabeh papat paket sing diterbitake isih kasedhiya ing registri nalika iki ditulis |
Indikator Kompromi
Packages
| Ekosistem | paket | versi |
|---|---|---|
| npm | axois-utils (salah ketik saka aksios) | 1.0.4, 1.0.6, 1.0.9 |
| npm | chalk-tempalte (salah ketik saka template kapur) | 1.0.14, 1.0.16, 1.0.19, 1.0.20 |
Identitas panganggit
| Field | Value |
|---|---|
| penerbit npm | deadcode09284814 |
| Email penerbit | phantomdeadcode@tutamail.com |
| SCM verifikasi | ora ana |
Command-lan-kontrol
| Phase | Endpoint | transportasi |
|---|---|---|
| A | f04a273bd84c0622-80-200-28-28.serveousercontent.com:443/collect | Terowongan HTTPS Serveo |
| A | 8a3e818ea8f11186-80-200-28-28.serveousercontent.com:443/collect | Terowongan HTTPS Serveo (versi sadurungé) |
| A | 80.200.28.28:443/collect | Titik pungkasan VPS sing ndasari |
| B | b94b6bcfa27554.lhr.life:443/ | localhost.jalanake HTTPS reverse-tunnel |
Ringkesan berkas (SHA-256)
| file | SHA-256 | Cathetan |
|---|---|---|
c2 (Go ELF, 4 MB) | 165fa92d237fd017c227d00da06ab788212a62be94bf61e95df2d22d00377ef2 | Server C2 sisih operator, dikirim ing njero axois-utils:1.0.9 |
c2.go (426 baris) | 7d0ae79fdb1e9968f3323a3712b624643a782ba3efb2cf3a2cb9c4c5513cea30 | Golek sumber kanggo binar C2 |
distrube.js | 308b15c023088a7188dea4ef609010ac2493eb4c365b103053d7621a9ca5b935 | Klien bot Fase B |
phantom.js (chalk-tempalte:1.0.19) | 9e380ec88d3ccf3929e1a104e3b868d4d7b59ca189a8a431a54e9f3357dfdd81 | Pengumpul kredensial / dompet Fase A |
phantom.js (chalk-tempalte:1.0.20) | d1c9e3f296ee9f7d5032f73f9c504cede50334bc14c394055fd5cb9c3a6e08b3 | Kolektor Fase A (varian 1.0.20) |
postinstall.js (chalk-tempalte:1.0.19 = 1.0.20) | ffba9bdd6793edd5b38e12900252c1813a693f59c25af51c3b658cf3f27b6162 | Loader Fase A, identik byte ing loro versi kasebut |
Atribusi & Motivasi
Kita nglacak kampanye iki minangka PhantomBot, njupuk branding operator dhewe saka Agen Panganggo: PhantomBot/1.0 judul deg-degan, layanan phantom-bot. unit sistem, ing com.phantom.bot Label LaunchAgent, lan kode mati bayangan@ Gagang email. Operator kasebut konsisten babagan jeneng iki ing paling ora patang artefak.
Katalog sinyal
- Publisher - kode mati09284814 ing npm. Akun siji-tangan, email Tutamail sing bisa dibuwang, ora SCM verifikasi. Ora ana riwayat publikasi sadurunge ngluwihi kampanye iki.
- Panggunaan maneh merek — "phantom" katon ing email penerbit, ing jeneng file kolektor Fase A (phantom.js), ing jeneng layanan persistensi Fase B (layanan phantom-bot.), ing label LaunchAgent (com.phantom.bot), lan ing bot Agen Panganggo (PhantomBot/1.0).
- infrastructure — VPS tunggal ing 80.200.28.28 ngarep Fase A liwat rotasi subdomain Serveo; Fase B pindhah menyang a localhost.jalan trowongan mundur (b94b6bcfa27554.lhr.life). Kaloro layanan vendor kasebut gratis lan mung mbutuhake SSH metu saka pihak operator, selaras karo persiyapan OpSec kanthi anggaran murah lan murah.
- Gaya kode — JavaScript polos ing sakabèhé; ora ana obfuscation, ora ana encoding string, ora ana pamriksan anti-VM. Jeneng variabel iku deskriptif (nyolongInfoSistem, nglakokake Perintah, httpBanjirKomentar ing distrube.js langsung ngarahake operator ing mangsa ngarep (“Gunakake URL HTTPS localhost.run sampeyan”), sing nuduhake yen file kasebut dimaksudake kanggo disebarake maneh minangka kit, ora digunakake dening siji penyerang.
- Slip OpSec — Tarball Fase B ngirim klien bot lan server C2 sisih operator (c2 ELF + c2.go (sumber). Iki konsisten karo operator sing ngunggah wit kerjane menyang npm tanpa ngaudit dhaptar file. Operator kasebut ora duwe pengalaman, utawa kit kasebut tegese kanggo disebarake menyang publik lan binar C2 minangka bagean saka produk kasebut.
- Konfirmasi dhiri - axois-utils:1.0.4 isine komentar sumber // Ganti dadi '80.200.28.28' kanggo umum ing baris 12, ngonfirmasi kemajuan dev / staging / produksi sing biasane ditolak operator.
motivasi
Payload Fase A iku gampang banget dicolong saka segi finansial: kredensial, kunci maya, token GitHub, lan dompet kripto kabeh duwe pasar penjualan maneh sing cair. Fase B uga finansial, nanging ora langsung: layanan DDoS-for-hire ("booter") nyewa kapasitas banjir saben menit, lan bot kaya sing dikirim ing kene minangka inventaris layanan kasebut. Detak jantung 30 detik, generik target/port/dadi skema komando, lan arsenal banjir limang protokol minangka standard produk saka operator booter.
Nglakokake loro modul kanthi paralel — chalk-tempalte:1.0.19 lan 1.0.20 terus ngirim maling nalika axois-utils:1.0.9 ngirim bot — nuduhake yen operator lagi njaga aliran pendapatan tinimbang ninggalake Fase A. Poros kasebut minangka Saliyane, dudu pengganti.
Apa sing ora kita klaim
Kita durung bisa ngonfirmasi identitas nyata ing mburine kode mati09284814 handle, lan kita ora nggandhengake kampanye iki karo aktor ancaman, klompok, utawa negara sing dijenengi. Branding "phantom" cukup konsisten ing antarane artefak kanggo nuduhake operator tunggal, nanging pengiriman gaya kit saka biner C2 mbukak kemungkinan yen paket ing mangsa ngarep saka handle sing ora ana hubungane bakal nggunakake maneh kode sing padha.
Dampak, Tren & Apa sing Kudune Ditindakake Para Pembela
impact
Target jongkok sing sah aksioma lan cithakan kapur akeh gumantung ing ekosistem JavaScript; aksioma mung ana ing antarane telung puluh paket npm sing paling akeh diunduh. Jeneng typosquat mung sak keystroke saka sing asli (aksis ↔ aksioma, tempalte ↔ cithakan), lan kalorone minangka salah ejaan sing masuk akal sacara linguistik.
Kita ora bisa entuk statistik unduhan sing bisa dipercaya kanggo versi angkoro sadurunge dicopot — npm ora nyimpen cacah unduhan saben versi sawise paket ora diterbitake, lan npms.ioProxy gaya-- rame banget ing skala iki. Sembarang organisasi sing file kuncine diowahi dadi paket sing jenenge axois-utils or tempalte kapur saka penerbit kode mati09284814 kudu dianggep minangka kompromi: rotasi saben kredensial sing ana ing proses.env ing host sing kena pengaruh, audit vektor persistensi saben OS (waca "Apa sing kudu ditindakake dening para pembela" ing ngisor iki), lan mbusak katergantungan kasebut.
Pola sing muncul
Kampanye iki minangka conto owah-owahan sing wis dideleng ing sawetara kedadeyan npm anyar: Perancah pengait instalasi minangka aset sing awet; muatan bisa digantiPenerbit sing padha, paket sing padha, padha prainstal / masang / sawise instalasi telu, lan malah irama versi-bump sing padha — siji-sijine sing owah antarane axois-utils:1.0.6 lan axois-utils:1.0.9 berkas kuwi apa hooks mlaku. Deteksi adhedhasar tandha tangan sing dikunci menyang muatan Fase A (string jalur dompet, phantom.jsKolektor 7,667 baris, host Serveo C2) mesthi bakal nandhani telung versi pisanan lan ora kejawab Fase B kabeh.
Pola sing padha katon ing kampanye 2026 liyane sing wis dilacak: operator tunggal kanthi perancah sing stabil, ijol-ijolan antarane nyolong kredensial, klien sing nyolong ujian, exfil Telegram-bot, lan saiki rekrutmen DDoS. Para pembela sing ngandelake tandha tangan payload bakal terus kalah ing babak kapindho saben kampanye.
Akibate yaiku TTP wektu instalasi minangka sinyal sing luwih apikDeklarasi install-hook telu, skrip instal sing diimpor https or proses_anak, nginstal skrip sing nulis menyang folder wiwitan pangguna, lan nginstal skrip sing ngrampungake jeneng host ing layanan terowongan mbalikke gratis (Serveo, localhost.jalan, ngrok, cloudflared) kabeh langka ing paket sing sah lan umum ing paket sing mbebayani.
Apa sing kudu ditindakake para pembela
- Audit berkas kunci. Telusuri saben package-lock.json / kunci benang / pnpm-lock.yaml ing organisasi sampeyan kanggo senar sing tepat axois-utils lan tempalte kapurAnggep wae jodho minangka kompromi.
- Puter rahasia ing host sing kena pengaruh. Fase A ngumpulake kredensial SSH, cloud, GitHub, npm, lan wallet kanthi akeh. Anggep saben kredensial sing ana ing proses.env, ~/.ssh, ~/.aws, ~/.npmrc, ~/.config, utawa liya-liyane .env* file ing host sing kena pengaruh bakal katon.
- Copot kegigihan (Fase B). Ing Windows, busak HKCU\Software\Microsoft\Windows\CurrentVersion\Run\SystemUpdate, copot %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\system-update.bat, Lan schtasks /delete /tn SystemUpdate /fIng Linux, crontab -e lan nyopot @reboot simpul …, systemctl –pangguna nonaktifake –saiki phantom-bot.service banjur busak ~/.config/systemd/panganggo/phantom-bot.layanan, nggosok .bashrc / .zshrc / /etc/rc.localIng macOS, launchctl mbongkar ~/Library/LaunchAgents/com.phantom.bot.plist banjur busak plist kasebut.
- Blokir host C2. Tambahake papat titik pungkasan C2 ing tabel IOC menyang dhaptar blokir egress sampeyan. *.serveousercontent.com lan *.lhr.urip bisa diblokir kanthi borongan yen lingkungan sampeyan ora duwe panggunaan sing sah kanggo layanan trowongan terbalik.
- Mburu miturut TTP wektu instalasi, dudu muatan. Entri file kunci inventaris sing paket.json nyatakake prainstal, masang, Lan sawise instalasi kabeh nuduhake skrip sing padha. Priksa maneh umur paket lan status verifikasi penerbit. Pola iki arang ditemokake ing paket sing sah lan minangka sinyal paling dipercaya sing digunakake maneh dening PhantomBot.
- Audit kanggo biner C2. Sapa wae sing ndownload axois-utils:1.0.9 nduweni server C2 operator (c2 ELF, sha256 165fa92d…) ing disk. Pindai cache lan panyimpenan artefak CI. Binary kasebut ora aktif dhewe, nanging anane ing workstation minangka bukti sing jelas yen paket kasebut wis diinstal.
Garis penutup
Operator sing padha, paket sing padha, lan hook instalasi sing padha bisa ngirim ancaman sing beda banget sajrone 48 jam. Gatèkna perancahé, dudu muatané.




