TL; DR
Hiji penerbit npm, deadcode09284814, parantos ngajalankeun kampanye typosquat ngalawan anu sah axios jeung chalk-template pakét ti saprak pertengahan Méi 2026.
Kampanye ieu dimimitian salaku maling kredensial sareng dompét konvensional, ngaluarkeun data ka a Torowongan HTTPS Serveo.
On 2026-05-17, jeung axois-utils:1.0.9, operator ngaganti payload sagemblengna: scaffold triple install-hook anu sami, penerbit anu sami, nami pakét anu sami.
Tapi skrip pamasangan ayeuna mangrupikeun rekrut botnet DDoS lintas platform.
Muatan éta nyarios ka hiji localhost.run torowongan sareng nampi paréntah banjir, ngarobih lingkungan anu kainféksi janten bagian tina botnet anu mampuh DDoS.
Operatorna malah ngirimkeun Binér server C2 di jero tarball, nunjukkeun éskalasi anu jelas tina maling kredensial ka infrastruktur botnet aktif.
Dua pakét, opat vérsi masih aktip dina registri, sareng hiji operator ayeuna ngajalankeun duanana modul sacara paralel.
Parahna: luhur.
Serangan éta: Kumaha Cara Gawéna
Kampanye ieu diwangun dina perancah pangiriman anu ngahaja pikaboseneun: dua nami pakét typosquat, hiji hurup béda ti pakét kalayan ratusan juta unduhan mingguan (aosos, citakan kapur), sareng pasang tilu kali hooks anu ngajamin palaksanaan. Anu pikaresepeun nyaéta naon perancahna mawa — sareng kanyataan yén operator ngarobih kargo tanpa ngarobih nanaon deui.
Rangka anu dibagi
Unggal vérsi anu diterbitkeun tina dua pakét nyatakeun tilu siklus hirup anu sami hooks in rangkep.json:
"scripts": { "preinstall": "node <payload>.js", "install": "node <payload>.js", "postinstall": "node <payload>.js" } Ngadaptarkeun muatan dina sadaya tilu hooks kaleuleuwihi - saatos dipasang nyalira bakal jalan dina standar npm installPilihan éta penting: npm install –ignore-scripts ngalangkungan skrip, tapi sababaraha alur kerja umum (cache CI mulangkeun siklus hirup anu dijalankeun deui éta hooks selektif, atanapi pamekar anu ngan ukur ngaudit saatos dipasang) ngadamel deklarasi triple-redundant salaku taruhan anu paling aman pikeun panyerang.
tempalte kapur nambihan mékanisme kadua: éta nyatakeun axois-utils:^1.0.7 salaku runtime gumantungna. Masang typosquatted citakan kapur ku kituna narik typosquat dulur ogé, sareng duanana payload dijalankeun. Dua pakét mangrupikeun pasangan anu terkoordinasi, sanés daptar anu mandiri.
Fase A — maling kredensial / dompét (2026-05-15 → ayeuna)
Fase A nyaéta muatan aslina. Loaderna pondok postinstall.js anu nunjuk ka torowongan tibalik 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 ngodekeun IP tujuan (80.200.28.28) langsung dina hostname — konvénsi anu tiasa dikenal pikeun layanan éta. Operator muterkeun awalan subdomain acak antara vérsi pikeun nyingkahan daptar blok domain naif, tapi IP anu aya di handapeunna henteu pernah pindah. (chalk-tempalte:1.0.14 dipaké 8a3e818ea8f11186-80-200-28-28…; 1.0.16 / 1.0.19 / 1.0.20 pamakean f04a273bd84c0622-….)
postinstall.js leungeunna leupas ka phantom.js, modul "kolektor" anu dibundel 7,667 baris. phantom.js ngajalankeun host pikeun:
Konci pribadi SSH (~/.ssh/*) |
.npmrc eusi sareng naon waé npm_* token env |
| File kredensial AWS, GCP, sareng Azure |
Regex token-aksés-pribadi GitHub (ghp_*, gho_*, ghu_*, ghs_*) |
| Artefak dompét kripto pikeun Bitcoin, Exodus, Electrum, Monero, Litecoin, Dogecoin, Zcash, Dash |
Hiji rekursif .env* leumpang ngalangkungan ~/projects, ~/dev, ~/code, ~/workspace, sareng pamasangan cwd |
Riwayat cangkang sareng lengkepna process.env |
Bungkusan éta dikirimkeun ka torowongan Serveo di /ngumpulkeunTeu aya obfuscation, teu aya logika anti-VM, teu aya staging — taruhan operator aya dina volume sareng kecepatan.
Fase B — Rekrutmen DDoS PhantomBot (2026-05-17, axois-utils:1.0.9 hungkul)
Fase B ngaganti phantom.js + postinstall.js ku hiji file anu dingaranan distrube.js (salah ketikna ti operator). Scaffold triple-hook dina package.json teu robah; pakétna tetep nganggo nami, ruang lingkup, sareng pola version-bump anu sami. Ti luar, axois-utils:1.0.9 katingalina sapertos tindak lanjut minor ti 1.0.6. Di jerona, éta mangrupikeun kulawarga malware anu béda.
distrube.js dibuka ku blok konfigurasi anu ngaranan branding operator sorangan:
// 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')}`; |
Koméntar-koméntar éta ditujukeun ka operator anu bakal ngajalankeun kit éta (“Anggo URL HTTPS localhost.run anjeun”). Éta, ditambah naon anu dikirimkeun di gigireun klien bot, nyaéta indikasi yén ieu sanés ngan ukur muatan korban — éta kitna.
Aliranana:
- katekunan jalan heula. Skripna masang sorangan dina tilu cara anu béda pikeun unggal OS (registri lalumpatan + Folder ngamimitian + schtasks dina Windows; crontab + layanan phantom-bot. unit sistem + .bashrc/.zshrc tambahkeun + /etc/rc.local dina Linux; LaunchAgent com.phantom.bot.plist dina macOS). Ngaran layanan persistensi sareng labél LaunchAgent duanana bot hantu / com.phantom.bot, ti dinya ogé asalna ngaran kampanye éta.
- Inpormasi sistem exfil jalan sakali — sidik jari sakali POST ka b94b6bcfa27554.lhr.life:443/collect nu mawa hostname, platform, arch, username, CPU/RAM, network interfaces, process.env, cwd, homedir, node version, jeung public IP. Ieu jauh kurang agrésif tibatan Fase A: teu aya SSH, teu aya dompét, teu aya rekursi .env. Pancén bot nyaéta ngadaptar, lain maok.
- Putaran denyut jantung muka HTTPS POST unggal 30 detik ka b94b6bcfa27554.lhr.life:443/. Agen-Pamakéna nyaéta PhantomBot/1.0. Verifikasi TLS sacara éksplisit ditumpurkeun (rejectUnauthorized: false). Réspon C2 diurai salaku JSON tina bentuk {type, target, port, duration, threads, method} teras dikirim.
- Gudang senjata banjir disambungkeun ka genep paréntah:
| Jenis paréntah | modul | Catetan |
|---|---|---|
| ping | Balasan hirup | Bot ngidentipikasi dirina sorangan |
| http | Banjir HTTP | Banjir pamundut Lapisan-7 |
| HTTPS | Banjir HTTPS | Sarua jeung http, dibungkus ku TLS |
| tcp | Banjir TCP | 65 KB spam muatan acak |
| udp | Banjir UDP | Pakét UDP 65,507-byte |
| gancang | DoS reset gancang HTTP/2 | Téhnik CVE-2023-44487 2023 |
Sadaya lima modul banjir nyandak a tujuan, palabuhan, waktu, sarta benang argumen — bot éta mangrupikeun flooder umum anu disewa, henteu ditujukeun pikeun korban khusus. Daptar korban operator aya dina C2, sanés dina pakét.
Naon Anu Anyar Di Dieu — binér C2 anu dikirimkeun
Fase A nyaéta bentuk anu biasa: maling kredensial, hook pamasangan, C2 anu di-terowongan vendor. Fase B nyaéta oge bentuk anu wawuh — botnet DDoS parantos janten bagian tina pakét npm jahat salami mangtaun-taun. Anu teu biasa nyaéta operator ngirimkeun sisi server tina kit di jero tarball npm:
- c2 — binér Go ELF anu dikompilasi 4-megabyte
- c2.go — sumber Go 426 baris pikeun binér éta
Duanana file teu dipicu ku hook install naon waé. Éta sanés bagian tina payload korban. Éta aya dina diréktori pakét sapertos file dokuméntasi. Bacaan anu paling masuk akal nyaéta operator ngadorong tangkal kerja pamekaranna ka npm tanpa ngatur daptar file — slip OpSec anu asli — sareng anu dikirim nyaéta kit dua sisi lengkep: klien anu dijalankeun ku korban, sareng server anu dijalankeun ku operator.
Ieu bagian tina carita anu menerkeun framing "kit botnet turnkey". Saha waé anu ngaunduh axois-utils:1.0.9 sateuacan takedown teu ngan ukur boga sampel korban — aranjeunna gaduh server C2 anu tiasa dianggo.
Pivot, dina hiji kalimah
Penerbit anu sami, nami pakét anu sami, perancah triple-hook anu sami, branding "phantom" anu sami — tapi modél monetisasi muatan robah sapeuting jeput: ti "rahasia panén anu tiasa kuring jual deui" dugi ka "kapasitas banjir sewa anu tiasa kuring sewa". TTP waktos pamasangan anu kedah diperhatoskeun ku para pembela ampir sami dina dua fase; pertahanan berbasis tanda tangan anu dikonci kana senar jalur dompét Fase A atanapi ka phantom.jsKolektor 7,667 jalur éta pasti bakal sono kana Fase B sagemblengna.
| Tanggal (UTC) | kajadian |
|---|---|
| 2026-05-15 | Publikasi munggaran: axois-utils:1.0.4 (Pangwangunan uji LAN, pamekaran rig di 192.168.129.19) |
| 2026-05-15 | axois-utils:1.0.6 diterbitkeun — Fase A C2 diganti ka 80.200.28.28 via torowongan Serveo; koméntar sumberna // Change to '80.200.28.28' for public mastikeun dev→prod swap |
| 2026-05-16 | chalk-tempalte:1.0.14 jeung 1.0.16 diterbitkeun — loader ranté nyatakeun axois-utils:^1.0.7 salaku gumantungna runtime; subdomain Serveo diputer |
| 2026-05-16 | Kampanye Fase A kapanggih nalika pamindaian npm rutin; vonis anu dikonfirmasi jahat diterapkeun |
| 2026-05-17 | axois-utils:1.0.9 diterbitkeun — payload pivot: PhantomBot DDoS ngarékrut via localhost.run tunnel; sisi operator c2 binér sareng c2.go sumber dikirim dina tarball |
| 2026-05-17 | chalk-tempalte:1.0.19 jeung 1.0.20 diterbitkeun — masih Fase A (maling); operator ayeuna ngajalankeun duanana modul sacara paralel |
| 2026-05-17 | Kapanggihna Fase B nalika scanning rutin; putusan diterapkeun ka sadaya 2026-05-17 versi |
| (lumangsung) | Laporan takedown nuju ngantosan; sadaya opat pakét anu diterbitkeun tetep sayogi dina pendaptaran nalika tulisan ieu ditulis. |
Indikator Kompromi
bungkusan
| ékosistem | paket | versi |
|---|---|---|
| npm | axois-utils (salah ketik tina aksios) | 1.0.4, 1.0.6, 1.0.9 |
| npm | chalk-tempalte (typosquat tina citakan kapur) | 1.0.14, 1.0.16, 1.0.19, 1.0.20 |
Identitas pangarang
| lapang | ajen |
|---|---|
| penerbit npm | deadcode09284814 |
| Surélék penerbit | phantomdeadcode@tutamail.com |
| SCM verifikasi | teu sahiji bae |
Paréntah-jeung-kontrol
| tahap | titik | ngangkut |
|---|---|---|
| A | f04a273bd84c0622-80-200-28-28.serveousercontent.com:443/collect | Torowongan HTTPS Serveo |
| A | 8a3e818ea8f11186-80-200-28-28.serveousercontent.com:443/collect | Torowongan HTTPS Serveo (versi samemehna) |
| A | 80.200.28.28:443/collect | Titik tungtung VPS anu jadi dadasarna |
| B | b94b6bcfa27554.lhr.life:443/ | localhost.jalankeun HTTPS torowongan-balik |
Ringkesan file (SHA-256)
| file | Sha-256 | Catetan |
|---|---|---|
c2 (Go ELF, 4 MB) | 165fa92d237fd017c227d00da06ab788212a62be94bf61e95df2d22d00377ef2 | Server C2 sisi operator, dikirimkeun ka jero axois-utils:1.0.9 |
c2.go (426 baris) | 7d0ae79fdb1e9968f3323a3712b624643a782ba3efb2cf3a2cb9c4c5513cea30 | Sumber pikeun binér C2 |
distrube.js | 308b15c023088a7188dea4ef609010ac2493eb4c365b103053d7621a9ca5b935 | Klien bot Fase B |
phantom.js (chalk-tempalte:1.0.19) | 9e380ec88d3ccf3929e1a104e3b868d4d7b59ca189a8a431a54e9f3357dfdd81 | Pangumpul kredensial / dompét 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, idéntik byte dina dua vérsi |
Atribusi & Motivasi
Kami ngalacak kampanye ieu salaku PhantomBot, nyokot branding operator sorangan ti Agen Pamaké: PhantomBot/1.0 judul denyut jantung, éta layanan phantom-bot. unit sistem, anu com.phantom.bot Labél LaunchAgent, sareng kodeu maot siluman@ gagang surélék. Operatorna konsisten ngeunaan nami ieu dina sahenteuna opat artefak.
Katalog sinyal
- pausahaan nu ngaluarkeun - kodeu maot09284814 dina npm. Akun hiji-tangan, email Tutamail anu tiasa dianggo sakali, henteu SCM verifikasi. Teu aya riwayat publikasi sateuacanna saluareun kampanye ieu.
- Panggunaan deui branding — "phantom" muncul dina email penerbit, dina nami file kolektor Fase A (phantom.js), dina nami layanan persistensi Fase B (layanan phantom-bot.), dina labél LaunchAgent (com.phantom.bot), sareng dina bot Agen-Pamaké (PhantomBot/1.0).
- infrastruktur — Hiji VPS di 80.200.28.28 Fase A ngaliwatan rotasi subdomain Serveo; Fase B pindah ka localhost.jalankeun torowongan mundur (b94b6bcfa27554.lhr.life). Duanana layanan vendor gratis sareng ngan ukur meryogikeun SSH kaluar ti pihak operator, saluyu sareng setelan OpSec anu murah sareng murah.
- Gaya kode — JavaScript polos di sakumna; teu aya obfuscation, teu aya coding string, teu aya cék anti-VM. Ngaran variabel téh deskriptif (maokInfoSistem, ngaéksekusiParéntah, httpBanjir). Koméntar dina distrube.js langsung ngarujuk ka operator ka hareup (“Anggo URL HTTPS localhost.run anjeun”), nunjukkeun yén file éta dimaksudkeun pikeun disebarkeun deui salaku kit, sanés dianggo ku hiji panyerang.
- Slip OpSec — Tarball Fase B ngirimkeun klien bot sareng server C2 sisi operator (c2 ELF + c2.go sumber). Ieu saluyu sareng operator anu ngadorong tangkal kerja na ka npm tanpa ngaudit daptar file. Boh operatorna teu berpengalaman, atanapi kit na dimaksudkan pikeun disebarkeun ka masarakat sareng binér C2 mangrupikeun bagian tina produk éta.
- Konfirmasi diri - axois-utils:1.0.4 ngandung komentar sumber // Robah ka '80.200.28.28' kanggo umum dina baris ka-12, mastikeun kamajuan pamekaran / pementasan / produksi anu biasana ditolak ku operator.
alesan
Muatan Fase A nyaéta maling finansial anu langsung: kredensial, konci awan, token GitHub, sareng dompét crypto sadayana gaduh pasar penjualan deui anu cair. Fase B ogé finansial, tapi teu langsung: layanan DDoS-for-hire ("booter") nyéwa kapasitas banjir unggal menit, sareng bot sapertos anu dikirimkeun di dieu nyaéta inventaris anu dijalankeun ku layanan éta. Detak jantung 30 detik, generik tujuan/palabuhan/waktu skéma paréntah, sareng arsenal banjir lima protokol nyaéta standard produk tina operator booter.
Ngajalankeun dua modul sacara paralel — chalk-tempalte:1.0.19 jeung 1.0.20 terus ngirim maling bari axois-utils:1.0.9 ngirim bot — nunjukkeun yén operator ngajaga aliran pendapatan tinimbang ngantunkeun Fase A. Pivotna nyaéta Sajaba, lain pangganti.
Naon anu teu diklaim ku urang
Kami teu acan tiasa mastikeun identitas dunya nyata di balik éta kodeu maot09284814 handle, sareng kami henteu ngaitkeun kampanye ieu ka aktor ancaman, grup, atanapi nagara anu dingaranan. Branding "phantom" cukup konsisten di sakumna artefak pikeun nunjukkeun hiji operator, tapi pengiriman gaya kit tina binér C2 ninggalkeun kamungkinan yén pakét ka hareup tina handle anu teu aya hubunganana bakal nganggo deui kode anu sami.
Dampak, Tren & Naon Anu Kudu Dilakukan ku Para Pembela
pangaruh
Target jongkok anu sah aosos jeung citakan kapur seueur pisan anu gumantung kana ékosistem JavaScript; aosos nyalira aya di antara tilu puluh pakét npm anu paling sering diunduh. Nami typosquat ngan hiji keystroke ti anu asli (axois ↔ aosos, tempalte ↔ template), sareng duanana mangrupikeun salah éjahan anu masuk akal sacara linguistik.
Kami teu tiasa kéngingkeun statistik unduhan anu tiasa dipercaya pikeun vérsi jahat sateuacan dicabut — npm henteu nahan jumlah unduhan per vérsi saatos pakét teu diterbitkeun, sareng npms.ioproxy gaya-na rame dina skala ieu. Organisasi naon waé anu file konci na ngaréngsékeun kana pakét anu dingaranan axois-utils or tempalte kapur ti penerbit kodeu maot09284814 kedah dianggap salaku anu dikompromikeun: rotasi unggal kredensial anu aya dina prosés.env dina host anu kapangaruhan, audit véktor persistensi per OS (tingali "Naon anu kedah dilakukeun ku pembela" di handap), teras hapus katergantunganna.
Pola anu muncul
Kampanye ieu conto parobahan anu urang tingali dina sababaraha insiden npm anyar: Perancah hook-install mangrupikeun aset anu awét; muatanna tiasa ditukeurkeunPenerbit anu sami, pakét anu sami, sami pra-instal / masang / saatos dipasang rangkep tilu, komo deui irama versi-bump anu sami — hiji-hijina hal anu robih antara axois-utils:1.0.6 jeung axois-utils:1.0.9 éta file anu hooks jalan. Deteksi dumasar tanda tangan anu dikonci kana muatan Fase A (string jalur dompét, phantom.jsKolektor 7,667 baris 's, host Serveo C2) pasti bakal nandaan tilu vérsi munggaran sareng sono kana Fase B sagemblengna.
Pola anu sami katingali dina kampanye 2026 anu sanés anu parantos kami lacak: hiji operator kalayan perancah anu stabil, silih genti antara maling kredensial, klien anu nyontek ujian, exfil Telegram-bot, sareng ayeuna rekrutmen DDoS. Pembela anu ngandelkeun tanda tangan payload bakal teras éléh dina babak kadua unggal kampanye.
Akibatna nyaéta TTP waktos pamasangan mangrupikeun sinyal anu langkung saéDéklarasi install-hook tilu kali, skrip install anu diimpor HTTPS or prosés_anak, masang skrip anu nyerat kana polder ngamimitian pangguna, sareng masang skrip anu ngarengsekeun nami host dina layanan torowongan terbalik gratis (Serveo, localhost.jalankeun, ngrok, cloudflared) sadayana jarang aya dina pakét anu sah sareng umum dina pakét anu jahat.
Naon anu kedah dilakukeun ku para pembela
- Audit file konci. Pilarian unggal package-lock.json / konci benang / pnpm-lock.yaml dina organisasi anjeun pikeun senar anu pasti axois-utils jeung tempalte kapurAnggap waé cocokan naon waé salaku kompromi.
- Rotasikeun rusiah kana host anu kapangaruhan. Fase A ngumpulkeun kredensial SSH, cloud, GitHub, npm, sareng dompét sacara massal. Anggap unggal kredensial anu aya dina prosés.env, ~ / .shsh, ~/.aws, ~/.npmrc, ~/.config, atanapi naon waé .env* file dina host anu kapangaruhan kakeunaan.
- Cabut kegigihan (Fase B). Dina Windows, hapus HKCU\Software\Microsoft\Windows\CurrentVersion\Run\SystemUpdate, cabut %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\system-update.bat, sarta schtasks /delete /tn SystemUpdate /f. Dina Linux, -e crontab sareng cabut @reboot node …, systemctl –pamaké mareuman –ayeuna phantom-bot.service teras hapus ~/.config/systemd/user/phantom-bot.service, ngagosok .bashrc / .zshrc / /etc/rc.localDina macOS, launchctl unload ~/Library/LaunchAgents/com.phantom.bot.plist teras hapus plist-na.
- Blokir host C2. Tambahkeun opat titik tungtung C2 dina tabel IOC kana daptar blokir kaluar anjeun. *.serveousercontent.com jeung *.lhr.kahirupan bisa diblokir sacara borongan upami lingkungan anjeun teu aya panggunaan anu sah pikeun layanan torowongan terbalik.
- Pilarian dumasar kana TTP waktos pamasangan, lain muatan. Éntri file konci inventaris anu rangkep.json nyatakeun pra-instal, masang, sarta saatos dipasang sadayana nunjuk kana skrip anu sami. Pariksa silang antara umur pakét sareng status verifikasi penerbit. Pola ieu jarang aya dina pakét anu sah sareng mangrupikeun sinyal anu paling dipercaya anu dianggo deui ku PhantomBot.
- Audit pikeun binér C2. Saha waé anu ngadownload axois-utils:1.0.9 ngagaduhan server C2 operator (c2 ELF, sha256 165fa92d…) dina disk. Scan cache sareng panyimpenan artefak CI. Binérna teu aktip ku sorangan, tapi ayana dina workstation mangrupikeun bukti anu jelas yén pakét parantos dipasang.
Garis panutup
Operator anu sami, pakét anu sami, sareng hook pamasangan anu sami tiasa nganteurkeun ancaman anu béda pisan dina 48 jam. Perhatikeun perancahna, sanés muatanna.




