Serangan Typosquatting npm DevTap

Serangan Typosquatting npm DevTap: Genep Paket Jahat Nargétkeun Workstation Pamekar

TL; DR

Antara 1 April sareng 3 Méi 2026, hiji penerbit npm, user0001, kadaptar nganggo alamat Gmail anu teu acan diverifikasi tanvisoul9@gmail.com, sacara teu langsung ngadorong genep pakét kalayan nami anu ngahaja hambar sareng siga infrastruktur: centralogger, dom-utils-lite, node-fetch-lite, connector-agent, node-gyp-runtime, sarta node-env-resolve.

Dua vérsi panganyarna tina node-env-resolve, 1.0.7 sareng 1.0.8, ditandaan ku sistem Peringatan Awal Malware (MEW) Xygeni dina 2 Méi sareng dikonfirmasi jahat dina 3 Méi.

Implan ieu teu biasa pikeun naon anu sanés: teu aya bot Telegram, teu aya callback OAST, teu aya obfuscation, sareng teu aya usaha pikeun ngarebut kredensial AWS nalika waktos pamasangan. Gantina, postinstall.js melak éntri boot-persistence Windows, nganggo konci HKCU Run anu dijalankeun wscript.exe ngalawan rintisan VBS. Teras éta ngahasilkeun agén Node.js anu misah anu ngahijikeun modul pikeun ngarékam mikropon, maling riwayat browser, nyandak cuplikan layar, sareng simulasi beurit/kibor.

Urang nyebut klaster ieu DevTap, saatos kit éta tiasa dijalankeun dina mesin pamekar.

Sadaya genep pakét masih aya dina npm nalika tulisan ieu dijieun. Kami parantos ngalebetkeunana ka saluran panyalahgunaan pendaptaran. Pambéla kedah narik sadaya pamasangan tina penerbit salami ngantosan panyabutan.

Klasterna: Genep Paket, Hiji Penerbit

Akun penerbit user0001 teu acan diverifikasi. Teu aya SCM verifikasi, teu aya email anu kaiket ku domain, sareng teu aya riwayat sateuacanna. Gagang Gmail tanvisoul9 teu muncul dina rékaman penerbit npm séjén anu kami tiasa mendakan.

Sadaya genep pakét ngadaptarkeun pangurus anu sami, diterbitkeun tina akun anu sami, sareng ngabagi akun anu sami. package.json boilerplate. Teu aya repository, teu homepage, Sarta henteu description leuwih panjang tibatan hiji baris.

Strategi penamaan mangrupikeun bagian anu pikaresepeun. Teu sapertos kampanye dependency-confusion atanapi typosquat klasik, teu aya nami-nami ieu anu narékahan perpustakaan hulu anu khusus. Sabalikna, aranjeunna dikalibrasi pikeun ngaleungit kana anu nyata. package.json or npm ls kaluaran.

paketMimiti diterbitkeunPérsi PangahirnaversiPeran dina Klaster
centrallogger2026-04-01 12:46 UTC1.0.95, ti 1.0.5 nepi ka 1.0.9Sampul "utilitas logging" klaster; publikasi pangheubeulna
dom-utils-lite2026-04-14 07:36 UTC1.0.33Panutup DOM-helper umum
node-fetch-lite2026-04-19 10:22 UTC1.0.23Niru kulawarga node-fetch
agén panyambung2026-04-25 05:12 UTC1.0.01"Agén" ngaran generik
waktos-jalan-node-gyp2026-04-25 05:17 UTC1.0.01Niru parabot ngawangun modul asli
simpul-env-resolve2026-04-25 05:21 UTC1.0.910, ti 1.0.0 nepi ka 1.0.9Pipet aktif; implan lengkep

ngaran kawas centralogger, node-fetch-lite, sarta node-gyp-runtime dirancang supados katingalina teu kontroversial dina ulasan kode. Éta kadéngéna sapertos hal-hal anu parantos aya dina tangkal katergantungan proyék.

Digabungkeun sareng penerbit anu anyar sareng teu acan diverifikasi sareng tautan repositori anu leungit, aranjeunna ngabentuk pola anu tiasa dikenal: aktor anu nyebarkeun nami gesekan rendah kana pendaptaran, teras ngulang gancang kana anu penting. Dina hal ieu, node-env-resolve nampi sapuluh vérsi dina dalapan dinten.

Naon Anu Kalebet dina Kotak Pangembangan Windows

Ranté jahat dina node-env-resolve:1.0.8 pondok, langsung, sareng beunghar fitur anu luar biasa pikeun RAT npm.

Pasca-instal: Persistence sareng Agen Terpisah

package.json nyatakeun hiji hook pamasangan:

{ "scripts": { "postinstall": "node postinstall.js" } }

postinstall.js ngalakukeun tilu hal sacara berurutan.

Mimitina, éta ngaléngkahkeun diréktori pamasangan di luar tangkal npm. Jalurna diitung nalika runtime dina skrip sapertos kieu INSTALL_DIRTeras éta ngajalankeun internal execSync('npm install --production --silent ...') di jerona pikeun narik dependensi runtime implan. Ieu nempatkeun agén dina disk di tempat manual node_modules audit moal mendakan.

Kadua, éta nyerat VBS launcher sareng ngadaptarkeunana pikeun persistensi boot:

reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Run \     /v ${AGENT_NAME} \     /t REG_SZ \     /d "wscript.exe \"${vbsPath}\"" /f

wscript.exe nyaéta Windows Script Host, binér Microsoft anu ditandatanganan anu ngajalankeun .vbs file tanpa jandela konsol. Éta tos ayacisely naha éta dipikaresep pikeun rintisan autorun.

Aya ogé anu cocog reg delete jalan di jero src/index.js, nu nunjukkeun implan dirancang supados tiasa dicabut kalayan bersih dumasar kana paréntah operator.

Katilu, éta ngahasilkeun prosés anak anu misah:

spawn(node, [path.join(INSTALL_DIR, 'src/index.js')], {   detached: true,   env: { ...process.env, SERVER_URL } })

Dua detil penting di dieu.

SERVER_URL dibaca tina lingkungan. Hasilna, titik tungtung C2 tiasa dikonfigurasi per palaksanaan sareng henteu dilebetkeun kana pakét. Pilihan alit tapi disengaja éta ngéléhkeun kaseueuran sapuan IOC statis.

Ogé, anak anu lahir ngawaris lingkungan induk anu lengkep. Ku kituna, naon waé NPM_TOKEN, AWS_*, GITHUB_TOKEN, atanapi soket SSH-agent anu aya dina cangkang pamekar nalika waktos pamasangan ngalangkungan kana mémori agén anu umurna lami.

Naon anu Dikirim ku Agen

Anu dibundel src/ tangkal ngawengku tilu modul anu ngaranna waé nyaritakeun caritana: audioCapture.js, browserHistory.js, sarta systemInfo.js.

Daptar katergantungan runtime, direngsekeun salami tahapan npm install, nguatkeun éta.

Pamarekan ieu ngarobah kajadian anu kacau jadi réspon anu dikontrol.

Tinimbang réaksi sacara lolong, tim beroperasi kalayan prioritas anu jelas sareng remediasi gancang.

GumantungkeunNaon gunana dina kontéks ieu
cuplikan layar-desktopPotret layar périodik
@nut-tree-fork/nut-jsOtomatisasi beurit sareng kibor / simulasi input
leuwih hade-sqlite3Maca langsung database SQLite Riwayat Chrome, Edge, sareng Firefox
adm-zipNgahijikeun artefak anu dikumpulkeun sateuacan diekstraksi
seukeutNgarobah ukuran / ngomprés cuplikan layar sareng artefak gambar
klien-socket.ioSaluran C2 dua arah anu terus-terusan
id-mesin-nodeSidik jari per-host anu stabil pikeun ngalacak korban

systemInfo.js nelepon os.networkInterfaces() pikeun sidik jari tambahan sateuacan suar anu munggaran.

Naha Rekaman Audio Mangrupikeun Sinyal Anu Unggul

Kaseueuran npm RAT anu kami triage di MEW eureun dina maling rahasia waktos pamasangan. Aranjeunna maca ~/.npmrc, maca ~/.aws/credentials, ngerok process.env, POST ka webhook, teras kaluar. Éta cocog sareng modél ékonomi smash-and-grab. Kredensial gaduh umur satengah anu pondok, sareng panyerang kedah gancang monetisasi.

node-env-resolve béda bentukna.

Persistensi ieu diatur pikeun salamet nalika di-reboot. Agén ieu jalan sacara mandiri sareng awét dina kaayaan sapertos kitu. wscript.exePakakas anu dibawana nyaéta pikeun aya dina mesin pamekar, sanés pikeun dicandak teras dicabut: perekam mikropon, driver keyboard/mouse, panyerepan riwayat browser lengkep, tangkapan layar, sareng saluran Socket.IO interaktif deui ka C2 anu tiasa dikonfigurasi.

Utamana panangkepan mikropon mangrupikeun wates anu dilewati ku kampanye ieu anu henteu dilewati ku kalolobaan malware npm.

Workstation pamekar, beuki lila, ogé jadi workstation tempat pamekar ngayakeun stand-up, nelepon konsumén, diskusi desain, sareng on-call bridge. Implan anu ngarékam mikropon sanés saatos token npm pamekar. Éta saatos naon anu diomongkeun ku pamekar di payuneun laptop.

Set kamampuan éta, ditambah kurangna obfuscation sareng henteuna exfiltration waktos pamasangan anu mencolok, kabaca salaku pre-positioning pikeun aksés anu dituju tinimbang maling kredensial oportunistik.

Kami henteu ngan ukur negeskeun atribusi tina ieu. Kami nyatet profil operasionalna.

serangan typosquatting npm - DevTab

Irama iterasi dalapan dinten dina node-env-resolve mangrupa detil anu paling operasional dina garis waktu.

Ieu sanés drop anu ngan saukur "fire-and-forget". Penerbit sacara aktif ngajaga dropper, anu biasana hartosna salah sahiji tina dua hal. Boh aranjeunna nuju nyetelna kana lingkungan uji sateuacan palaksanaan anu langkung lega, atanapi aranjeunna parantos gaduh telemetri pamasangan anu bakal uih deui sareng ngaréspon kana éta.

Lima pakét séjénna teu ngalaman churn saatos publikasi awalna. Éta cocog sareng pola "stage once, leave named" pikeun klaster pendukung sedengkeun usaha rékayasa museur kana pakét anu ngalakukeun padamelan éta.

Atribusi: Petunjuk Leutik, Teu Aya Putusan Anu Tegas

masarakat OSINT Sinyalna ipis, sareng urang moal manjangkeunana. Anu tiasa dititénan:

Gagang Gmail tanvisoul9 sabagian mirip sareng nami anu dipasihkeun ka Asia Kidul, "Tanvi." Ieu sinyal anu lemah. Gagang Gmail sanés idéntitas, sareng anu di tukangeunana soul9 téh umum. Teu aman pikeun nyimpulkeun géografi tina bagian lokal email waé.

Gaya kodeu Node.js teu pati penting: standard telepon perpustakaan sapertos os, child_process, spawn, sarta reg addTeu aya obfuscation, teu aya rotasi string, sareng teu aya logika anti-debug. Pangarangna nyaman sareng primitif pendaptaran Windows sareng orkestrasi prosés anak-detached, tapi sigana henteu ngahontal karajinan anu langkung siluman anu aranjeunna tiasa anggo.

Gumantungna sagemblengna teu aya dina rak sareng dipikanyaho: screenshot-desktop, nut-js, better-sqlite3, sarta socket.io-clientTeu aya protokol khusus, teu aya tumpukan C2 anu digulung ti mimiti, sareng teu aya trik persistensi anyar anu teu aya dina buku ajar. Konci Jalankeun HKCUIeu integrator anu kompeten, sanés pangarang alat.

Kami henteu mendakan string non-Inggris, koméntar anu disematkeun, data lokal, atanapi sidik jari zona waktos kaluaran kompiler di jero artefak anu diterbitkeun.

Kami mariksa tumpang tindih kode sareng kampanye sateuacana anu parantos kami lacak, kalebet Shai Hulud, Manuk Hantu, Buildkite, sareng heibai anu nembe / claude-code-best Kulawarga klon Anthropic-CLI. Kami teu mendakan nanaon: teu aya pola C2 anu dibagikeun, teu aya tata letak file anu dibagikeun, sareng teu aya idiom anu dibagikeun.

Anu moal urang carioskeun: ieu mangrupikeun aktor nagara, kelompok anu dipikanyaho, atanapi sacara geografis aya kaitanna sareng nagara khusus mana waé.

Profil operasionalna saluyu sareng tim alit anu rada terampil anu ngalakukeun panjagaan stasiun kerja pamekar. Éta sigana dimotivasi sacara finansial ngalangkungan panggunaan aksés hilir, tapi kamungkinan ogé pangintipan-salaku-layanan pikeun pembeli anu misah.

Dua poin teu langsung ngadukung anu kieu: nyingkahan mékanika éksfiltrasi anu narik perhatian anu bakal ngaduruk klaster gancang, sapertos bot Telegram, oastify.com, atanapi canarytokens, sareng nami pakét anu ngahaja hambar, anu langkung milih pamasangan buntut panjang anu sepi tibatan lonjakan volume anu luhur anu singget.

Indikator Kompromi sareng Deteksi

Paket sareng Penerbit
lapangajen
penerbit npmuser0001
Surélék penerbittanvisoul9@gmail.com, teu acan diverifikasi
bungkusancentralogger, dom-utils-lite, node-fetch-lite, connector-agent, node-gyp-runtime, node-env-resolve
Dikonfirmasi jahatnode-env-resolve@1.0.7, node-env-resolve@1.0.8
Artefak Host
ngetikajen
Konci kegigihanHKCU\Software\Microsoft\Windows\CurrentVersion\Run
Nilai kegigihanNgaran variabel; data tina bentuk wscript.exe " \\ .vbs"
Pasangkeun kaitpostinstall: simpul postinstall.js dina manifes pakét
Modul implansrc/audioCapture.js, src/browserHistory.js, src/systemInfo.js
Diréktori pementasanINSTALL_DIR direngsekeun di luar node_modules proyék; lokasi disetel ku postinstall.js nalika waktos pamasangan
Network
ngetikajen
Angkutan C2socket.io-klien, saluran dua arah anu terus-terusan
Titik tungtung C2Disayogikeun ka agén ngalangkungan variabel lingkungan SERVER_URL; henteu dikodekeun sacara fisik kana artefak anu diterbitkeun

Catetan Deteksi

Dua aturan nangkep kulawarga ieu tanpa peryogi titik tungtung C2.

Mimitina, tandai skrip pasca-instalasi anu ngalaksanakeun operasi internal npm install kana jalur di luar diréktori pakét sorangan. Sagala pangunduh prebuild anu sah, sapertos node-gyp ngawangun deui atanapi pangunduh binér anu tos diwangun, nyerat di jero pakét atanapi kana platform-standard jalur cache kalayan hash anu diverifikasi. Éta henteu nyerat kana anu nembé didamel INSTALL_DIR di tempat séjén dina disk.

Kadua, tandai skrip pasca-instalasi anu ngaluarkeun reg add HKCU\…\Run jeung wscript.exe salaku paluncurna. Ieu dasarna henteu pernah sah tina pakét npm. Tandaan sareng karantina.

Heuristik katilu mangpaat pikeun ningali pakét dulur salajengna sateuacan dikonfirmasi: penerbit npm anyar tanpa SCM verifikasi, email Gmail, henteu repository lapangan, sareng sababaraha nami pakét pondok, umum, sareng siga infrastruktur anu diterbitkeun dina sababaraha dinten, ku nyalira, cekap pikeun ngajamin tinjauan manual.

Dilaporkeun ka pendaptaran npm. Kami bakal ngapdet postingan ieu nalika akun penerbit dihapus.

alat-alat-sca-parangkat lunak-analisis-komposisi
Prioritaskeun, remediasi, sareng amankeun résiko parangkat lunak anjeun
Kéngingkeun Akun Gratis anjeun.
Henteu kedah kartu kiridit.

Amankeun Pangwangunan sareng Pangiriman Parangkat Lunak Anjeun

sareng Xygeni Product Suite