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.
| paket | Mimiti diterbitkeun | Pérsi Pangahirna | versi | Peran dina Klaster |
|---|---|---|---|---|
| centrallogger | 2026-04-01 12:46 UTC | 1.0.9 | 5, ti 1.0.5 nepi ka 1.0.9 | Sampul "utilitas logging" klaster; publikasi pangheubeulna |
| dom-utils-lite | 2026-04-14 07:36 UTC | 1.0.3 | 3 | Panutup DOM-helper umum |
| node-fetch-lite | 2026-04-19 10:22 UTC | 1.0.2 | 3 | Niru kulawarga node-fetch |
| agén panyambung | 2026-04-25 05:12 UTC | 1.0.0 | 1 | "Agén" ngaran generik |
| waktos-jalan-node-gyp | 2026-04-25 05:17 UTC | 1.0.0 | 1 | Niru parabot ngawangun modul asli |
| simpul-env-resolve | 2026-04-25 05:21 UTC | 1.0.9 | 10, ti 1.0.0 nepi ka 1.0.9 | Pipet 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}\"" /fwscript.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.
| Gumantungkeun | Naon gunana dina kontéks ieu |
|---|---|
| cuplikan layar-desktop | Potret layar périodik |
| @nut-tree-fork/nut-js | Otomatisasi beurit sareng kibor / simulasi input |
| leuwih hade-sqlite3 | Maca langsung database SQLite Riwayat Chrome, Edge, sareng Firefox |
| adm-zip | Ngahijikeun artefak anu dikumpulkeun sateuacan diekstraksi |
| seukeut | Ngarobah ukuran / ngomprés cuplikan layar sareng artefak gambar |
| klien-socket.io | Saluran C2 dua arah anu terus-terusan |
| id-mesin-node | Sidik 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.

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 | |
|---|---|
| lapang | ajen |
| penerbit npm | user0001 |
| Surélék penerbit | tanvisoul9@gmail.com, teu acan diverifikasi |
| bungkusan | centralogger, dom-utils-lite, node-fetch-lite, connector-agent, node-gyp-runtime, node-env-resolve |
| Dikonfirmasi jahat | node-env-resolve@1.0.7, node-env-resolve@1.0.8 |
| Artefak Host | |
|---|---|
| ngetik | ajen |
| Konci kegigihan | HKCU\Software\Microsoft\Windows\CurrentVersion\Run |
| Nilai kegigihan | Ngaran variabel; data tina bentuk wscript.exe " \\ .vbs" |
| Pasangkeun kait | postinstall: simpul postinstall.js dina manifes pakét |
| Modul implan | src/audioCapture.js, src/browserHistory.js, src/systemInfo.js |
| Diréktori pementasan | INSTALL_DIR direngsekeun di luar node_modules proyék; lokasi disetel ku postinstall.js nalika waktos pamasangan |
| Network | |
|---|---|
| ngetik | ajen |
| Angkutan C2 | socket.io-klien, saluran dua arah anu terus-terusan |
| Titik tungtung C2 | Disayogikeun 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.






