Serangan Typosquatting npm DevTap

Serangan Typosquatting npm DevTap: Enem Paket Jahat Narget Stasiun Kerja Pengembang

TL; DR

Antarane 1 April lan 3 Mei 2026, penerbit npm tunggal, user0001, kadhaftar nganggo alamat Gmail sing durung diverifikasi tanvisoul9@gmail.com, meneng-meneng ngusulake enem paket kanthi jeneng sing sengaja hambar lan kaya infrastruktur: centralogger, dom-utils-lite, node-fetch-lite, connector-agent, node-gyp-runtime, Lan node-env-resolve.

Rong versi paling anyar saka node-env-resolve, 1.0.7 lan 1.0.8, ditandhani dening sistem Peringatan Awal Malware (MEW) Xygeni tanggal 2 Mei lan dikonfirmasi mbebayani tanggal 3 Mei.

Implan iki ora umum kanggo apa sing dudu: ora ana bot Telegram, ora ana callback OAST, ora kebingungan, lan ora ana upaya kanggo njupuk kredensial AWS nalika instalasi. Nanging, postinstall.js nandur entri boot-persistence Windows, nggunakake tombol HKCU Run sing mbukak wscript.exe nglawan stub VBS. Banjur, agen Node.js sing kapisah bakal nggabungke modul kanggo njupuk mikrofon, nyolong riwayat browser, njupuk gambar layar, lan simulasi mouse/keyboard.

Kita nyebut kluster iki DevTap, sawisé kit kasebut, program kasebut bisa mlaku ing mesin pangembang.

Kabeh enem paket wis aktif ing npm nalika iki ditulis. Kita wis ngirim menyang saluran penyalahgunaan registri. Pembela kudu mbatalake instalasi apa wae saka penerbit sing ngenteni penghapusan.

Klaster: Enem Paket, Siji Penerbit

Akun penerbit user0001 durung diverifikasi. Ora ana SCM verifikasi, ora ana email sing kaiket domain, lan ora ana riwayat sadurunge. Gagang Gmail tanvisoul9 ora katon ing cathetan penerbit npm liyane sing bisa ditemokake.

Kabeh enem paket kasebut ndhaptar pangurus sing padha, diterbitake saka akun sing padha, lan nuduhake sing padha package.json boilerplate. Ora ana repository, ora homepage, lan ora description luwih dawa tinimbang siji baris.

Strategi penamaan iku bagean sing menarik. Ora kaya kampanye kebingungan ketergantungan utawa typosquat klasik, ora ana jeneng-jeneng iki sing nargetake perpustakaan hulu tartamtu. Nanging, jeneng-jeneng kasebut dikalibrasi supaya ilang dadi nyata. package.json or npm ls output.

paketPisanan DiterbitakeVersi paling anyarversiPerané ing Klaster
centrallogger2026-04-01 12:46 UTC1.0.95, saka 1.0.5 nganti 1.0.9Sampul "utilitas logging" kluster; publikasi paling awal
dom-utils-lite2026-04-14 07:36 UTC1.0.33Panutup DOM-helper umum
simpul-njupuk-ringan2026-04-19 10:22 UTC1.0.23Niru kulawarga node-fetch
agen konektor2026-04-25 05:12 UTC1.0.01"Agen" jeneng generik
wektu-jalan-node-gyp2026-04-25 05:17 UTC1.0.01Niru piranti pambangunan modul asli
simpul-env-resolve2026-04-25 05:21 UTC1.0.910, saka 1.0.0 nganti 1.0.9Pipet aktif; implan lengkap

Jeneng kaya centralogger, node-fetch-lite, Lan node-gyp-runtime dirancang supaya katon ora kontroversial nalika ditinjau kode. Swara kaya barang-barang sing wis ana ing wit dependensi proyek.

Digabungake karo penerbit anyar sing durung diverifikasi lan pranala repositori sing ilang, dheweke mbentuk pola sing bisa dikenali: aktor sing nyebarake jeneng gesekan rendah menyang registri, banjur cepet-cepet ngulang jeneng sing penting. Ing kasus iki, node-env-resolve nampa sepuluh versi sajrone wolung dina.

Apa sing ana ing Windows Dev Box

Rantai jahat ing node-env-resolve:1.0.8 cendhak, langsung, lan sugih fitur sing luar biasa kanggo RAT npm.

Pasca-instal: Persistensi lan Agen sing Ora Dipisahake

package.json nyatakake siji hook instalasi:

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

postinstall.js nindakake telung perkara kanthi urut.

Kapisan, iki nggawe direktori instalasi ing njaba wit npm. Path diitung nalika runtime ing skrip minangka INSTALL_DIRBanjur nglakokake internal execSync('npm install --production --silent ...') ing njero kanggo narik dependensi runtime implan. Iki nyelehake agen ing disk ing endi wae manual node_modules audit ora bakal nemokake.

Kapindho, iki nulis peluncur VBS lan ndhaftar kanggo persistensi boot:

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

wscript.exe yaiku Windows Script Host, binar Microsoft sing ditandatangani sing mlaku .vbs file tanpa jendela konsol. Kuwi wis dadicispancen kenapa iki disenengi kanggo rintisan autorun.

Ana uga sing cocog reg delete dalan ing njero src/index.js, sing nuduhake implan dirancang supaya bisa dicopot kanthi resik miturut prentah operator.

Katelu, iki ngasilake proses anak sing kapisah:

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

Ana rong rincian sing penting ing kene.

SERVER_URL diwaca saka lingkungan. Akibate, titik pungkasan C2 bisa dikonfigurasi saben penyebaran lan ora dilebokake ing paket. Pilihan cilik nanging disengaja kuwi ngalahake umume sapuan IOC statis.

Uga, anak sing lair bakal ndarbeni lingkungan induk sing lengkap. Mulane, apa wae NPM_TOKEN, AWS_*, GITHUB_TOKEN, utawa soket SSH-agent sing ana ing shell pangembang nalika wektu instalasi mlebu ing memori agen sing wis suwe digunakake.

Apa sing Dikirim Agen

Sing dibundel src/ wit kalebu telung modul sing jenenge wae wis nyritakake critane: audioCapture.js, browserHistory.js, Lan systemInfo.js.

Dhaptar katergantungan runtime, sing wis dirampungake sajrone tahapan npm install, ndhukung dheweke.

Pendekatan iki ngowahi kedadeyan sing semrawut dadi respon sing dikontrol.

Tinimbang nanggepi kanthi wuta, tim-tim kasebut beroperasi kanthi prioritas sing jelas lan remediasi sing cepet.

ketergantunganKanggo Apa Ing Konteks Iki
gambar layar desktopJepretan layar berkala
@garpu-wit-kacang/kacang-jsOtomatisasi/simulasi input mouse lan keyboard
luwih apik-sqlite3Maca langsung riwayat basis data SQLite Chrome, Edge, lan Firefox
adm-zipNgumpulake artefak sing wis dikumpulake sadurunge diekstraksi
cethaNgowahi ukuran / kompres gambar lan artefak gambar
klien socket.ioSaluran C2 bidirectional sing terus-terusan
ID-mesin-nodeSidik jari saben host sing stabil kanggo pelacakan korban

systemInfo.js Telpon os.networkInterfaces() kanggo sidik jari tambahan sadurunge suar pisanan.

Apa Sebabe Rekaman Audio Iku Sinyal Sing Paling Utama

Umume RAT npm sing ditriase ing MEW mandheg nalika nyolong rahasia wektu instalasi. Dheweke maca ~/.npmrc, maca ~/.aws/credentials, ngeruk process.env, POST menyang webhook, lan metu. Iku cocog karo model ekonomi smash-and-grab. Kredensial duwe umur paruh sing cendhak, lan penyerang kudu cepet monetisasi.

node-env-resolve wujudé béda.

Persistensi disetel supaya bisa tahan nalika di-reboot. Agen kasebut mlaku kanthi ora kaiket lan tahan suwe ing sangisore wscript.exePiranti sing digawa iku kanggo ana ing mesin pangembang, dudu kanggo njupuk lan ninggalake: perekam mikrofon, driver keyboard/mouse, panyerepan riwayat browser lengkap, tangkapan layar, lan saluran Socket.IO interaktif bali menyang C2 sing bisa dikonfigurasi.

Penangkapan mikrofon utamane minangka wates sing ora dilewati kampanye iki sing ora ditindakake dening malware npm.

Stasiun kerja pangembang, saya suwe saya tambah, uga dadi stasiun kerja ing ngendi para pangembang njupuk stand-up, nelpon pelanggan, diskusi desain, lan jembatan panggilan. Implan sing ngrekam mikrofon sejatine ora ngetutake token npm pangembang. Nanging ngetutake apa sing diomongake pangembang ing ngarep laptop.

Kapabilitas kasebut, ditambah karo ora ana obfuskasi lan ora ana eksfiltrasi wektu instalasi sing mencolok, diwaca minangka pra-posisi kanggo akses sing ditargetake tinimbang nyolong kredensial oportunistik.

Kita ora mung negesake atribusi saka iki wae. Kita nyathet profil operasional.

serangan typo npm - DevTab

Irama iterasi wolung dina ing node-env-resolve minangka rincian sing paling jelas sacara operasional ing garis wektu.

Iki dudu drop sing mung kanggo nglalekake. Penerbit lagi aktif njaga dropper, sing biasane tegese salah siji saka rong perkara. Dheweke lagi nyetel karo lingkungan uji coba sadurunge penyebaran sing luwih jembar, utawa dheweke wis duwe telemetri instalasi sing bali lan nanggapi.

Lima paket liyane ora ngalami churn sawise publikasi awal. Iki cocog karo pola "stage once, leave named" kanggo kluster pendukung nalika upaya teknik fokus ing paket sing nindakake pakaryan kasebut.

Atribusi: Petunjuk Cilik, Ora Ana Putusan sing Tegas

Public OSINT Sinyal-sinyal kuwi tipis, lan kita ora bakal ngulur-ulur. Apa sing bisa diamati:

Pegangan Gmail tanvisoul9 sebagian meh padha karo jeneng Asia Kidul, "Tanvi." Iki sinyal sing ringkih. Gagang Gmail dudu identitas, lan sing ana ing mburine soul9 iku umum. Ora aman kanggo nyimpulake geografi saka bagean lokal email wae.

Gaya kode Node.js ora pati penting: standard telpon perpustakaan kaya os, child_process, spawn, Lan reg addOra ana obfuskasi, ora ana rotasi string, lan ora ana logika anti-debug. Penulis iki wis nyaman karo primitif registri Windows lan orkestrasi proses anak sing ora kaiket, nanging katon ora ngupaya kerajinan sing luwih siluman sing bisa digunakake.

Ketergantungan wis ora ana maneh lan wis dikenal: screenshot-desktop, nut-js, better-sqlite3, Lan socket.io-clientOra ana protokol khusus, ora ana tumpukan C2 sing digawe saka awal, lan ora ana trik persistensi anyar sing ora mung ana ing buku teks. Tombol Run HKCUIki integrator sing kompeten, dudu penulis alat.

Kita ora nemokake string non-Inggris, komentar sing disematkan, data lokal, utawa sidik jari zona wektu output kompiler ing njero artefak sing diterbitake.

Kita mriksa tumpang tindih kode karo kampanye sadurunge sing wis kita lacak, kalebu Shai-Hulud, Manuk hantu, Buildkite, lan heibai anyar / claude-code-best Kulawarga klon Anthropic-CLI. Kita ora nemokake apa-apa: ora ana pola C2 sing dienggo bareng, ora ana tata letak file sing dienggo bareng, lan ora ana idiom sing dienggo bareng.

Sing ora bakal kita kandhakake: iki minangka aktor negara, klompok sing dikenal, utawa sacara geografis kaiket karo negara tartamtu.

Profil operasional iki konsisten karo tim cilik sing trampil lan cukup trampil sing nindakake pengawasan stasiun kerja pangembang. Iki kemungkinan dimotivasi sacara finansial liwat panggunaan akses hilir, nanging bisa uga pengintaian-minangka-layanan kanggo panuku sing kapisah.

Rong poin ora langsung ndhukung sing unine: nyegah mekanika eksfiltrasi sing narik kawigaten sing bakal ngobong kluster kanthi cepet, kayata bot Telegram, oastify.com, utawa canarytokens, lan jeneng paket sing sengaja ora pati penting, sing luwih seneng instalasi buntut dawa sing sepi tinimbang lonjakan volume dhuwur sing cendhak.

Indikator Kompromi lan Deteksi

Paket lan Penerbit
FieldValue
penerbit npmuser0001
Email penerbittanvisoul9@gmail.com, durung diverifikasi
Packagescentrallogger, dom-utils-lite, node-fetch-lite, konektor-agen, node-gyp-runtime, node-env-resolve
Dikonfirmasi mbebayanisimpul-env-resolve@1.0.7, simpul-env-resolve@1.0.8
Artefak Host
KoleksiValue
Kunci kegigihanHKCU\Piranti Lunak\Microsoft\Windows\Versi Saiki\Run
Nilai ketekunanJeneng variabel; data saka formulir wscript.exe " \\ .vbs"
Pasang pengaitpostinstall: simpul postinstall.js ing manifes paket
Modul implansrc/audioCapture.js, src/browserHistory.js, src/systemInfo.js
Direktori pementasanINSTALL_DIR dirampungake ing njaba node_modules proyek; lokasi disetel dening postinstall.js nalika instalasi
Network
KoleksiValue
Transportasi C2socket.io-klien, saluran bidirectional persisten
Titik pungkasan C2Diwenehake marang agen liwat variabel lingkungan SERVER_URL; ora dikodekake kanthi keras menyang artefak sing wis diterbitake

Cathetan Deteksi

Rong aturan nyekel kulawarga iki tanpa mbutuhake titik pungkasan C2.

Kapisan, tandhani skrip pascainstal sing nindakake operasi internal npm install menyang jalur ing njaba direktori paket kasebut dhewe. Pengunduh prebuild sing sah, kayata node-gyp mbangun maneh utawa pengunduh binar sing wis dibangun, nulis ing njero paket utawa menyang platform-standard jalur cache nganggo hash sing wis diverifikasi. Ora nulis menyang file sing nembe digawe INSTALL_DIR ing papan liya ing disk.

Kapindho, tandhani skrip pascainstalasi sing ngetokake reg add HKCU\…\Run karo wscript.exe minangka peluncur. Iki sejatine ora tau sah saka paket npm. Tandhani lan karantina.

Heuristik katelu migunani kanggo nemokake paket sedulur sabanjure sadurunge dikonfirmasi: penerbit npm anyar tanpa SCM verifikasi, email Gmail, ora repository lapangan, lan pirang-pirang jeneng paket cendhak, umum, lan kaya infrastruktur sing diterbitake sajrone sawetara dina siji liyane, dhewe, wis cukup kanggo njamin tinjauan manual.

Wis dilapurake menyang registri npm. Kita bakal nganyari kiriman iki nalika akun penerbit dibusak.

piranti lunak-piranti-sca-piranti-analisis-komposisi
Prioritasake, ndandani, lan amanake risiko piranti lunak sampeyan
Entuk Akun Gratismu.
Ora ana kertu kredit.

Amanake Pangembangan lan Pangiriman Piranti Lunak Sampeyan

karo Suite Produk Xygeni