Node inspector/CEF debug abuse
Basiese Inligting
Van die dokumente: Wanneer dit begin word met die --inspect
skakelaar, luister 'n Node.js-proses vir 'n foutopsporingsklient. Standaard sal dit luister by gasheer en poort 127.0.0.1:9229
. Elke proses word ook 'n unieke UUID toegewys.
Inspekteerkliente moet die gasheeradres, poort en UUID ken en spesifiseer om te kan koppel. 'n Volledige URL sal iets lyk soos ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e
.
Aangesien die foutopsporer volle toegang tot die Node.js-uitvoeringsomgewing het, mag 'n skadelike aktor wat in staat is om met hierdie poort te koppel, arbitrêre kode kan uitvoer namens die Node.js-proses (potensiële voorreg-escalasie).
Daar is verskeie maniere om 'n inspekteerder te begin:
Wanneer jy 'n nagevorsde proses begin sal iets soos hierdie verskyn:
Prosesse gebaseer op CEF (Chromium Embedded Framework) soos benodig om die param: --remote-debugging-port=9222
te gebruik om die debugger oop te maak (die SSRF-beskermings bly baie soortgelyk). Tog, hulle in plaas daarvan om 'n NodeJS debug sessie toe te staan, sal kommunikeer met die blaaier deur die Chrome DevTools Protocol, dit is 'n koppelvlak om die blaaier te beheer, maar daar is nie 'n direkte RCE nie.
Wanneer jy 'n gedebugde blaaier begin sal iets soos hierdie verskyn:
Webblaaier, WebSockets en selfde-oorsprong beleid
Webwerwe wat in 'n webblaaier oopgemaak word, kan WebSocket- en HTTP-versoeke doen onder die blaaier se sekuriteitsmodel. 'n Aanvanklike HTTP-verbinding is nodig om 'n unieke aflyn-ontleder-sessie-id te verkry. Die selfde-oorsprong-beleid voorkom dat webwerwe in staat is om hierdie HTTP-verbinding te maak. Vir addisionele sekuriteit teen DNS-herbindingsaanvalle, verifieer Node.js dat die 'Host'-koppe vir die verbinding óf 'n IP-adres óf localhost
óf localhost6
presies spesifiseer.
Hierdie sekuriteitsmaatreëls voorkom die uitbuiting van die inspekteur om kode uit te voer deur net 'n HTTP-versoek te stuur (wat gedoen kon word deur 'n SSRF-vuln uit te buit).
Inspekteur begin in lopende prosesse
Jy kan die sein SIGUSR1 stuur na 'n lopende nodejs-proses om dit die inspekteur te begin op die verstekpoort. Let egter daarop dat jy genoeg voorregte moet hê, sodat dit jou moontlik bevoorregte toegang tot inligting binne die proses kan gee, maar nie 'n direkte voorreg-opgradering nie.
Dit is nuttig in houers omdat die proses afsluit en 'n nuwe een begin met --inspect
nie 'n opsie is nie omdat die houer met die proses gedood sal word.
Verbind met inspekteur/debugger
Om met 'n Chromium-gebaseerde webblaaier te verbind, kan die chrome://inspect
of edge://inspect
URL's vir Chrome of Edge ontsluit word. Deur op die Stel in knoppie te klik, moet verseker word dat die teiken gasheer en poort korrek gelys is. Die beeld wys 'n Voorbeeld van 'n Verre Kode-uitvoering (RCE):
Deur die opdraglyn te gebruik, kan jy met 'n debugger/inspekteur verbind met:
Die gereedskap https://github.com/taviso/cefdebug, maak dit moontlik om inspekteurs wat plaaslik loop te vind en kode in te spuit daarin.
Let wel dat NodeJS RCE-uitbuitings nie sal werk as dit aan 'n webblaaier verbind is via Chrome DevTools Protocol (jy moet die API nagaan om interessante dinge daarmee te doen).
RCE in NodeJS Debugger/Inspector
As jy hier gekom het om uit te vind hoe om RCE vanaf 'n XSS in Electron te kry, kyk asseblief na hierdie bladsy.
Sommige algemene maniere om RCE te verkry wanneer jy kan verbind met 'n Node inspector is deur iets soos (lyk dit dat dit nie sal werk in 'n verbinding met die Chrome DevTools-protokol):
Chrome DevTools Protokol Aanvalle
Jy kan die API hier nagaan: https://chromedevtools.github.io/devtools-protocol/ In hierdie afdeling sal ek net interessante dinge lys wat ek vind mense het gebruik om hierdie protokol te misbruik.
Parameter Injeksie via Diep Skakels
In die CVE-2021-38112 het Rhino Security ontdek dat 'n toepassing gebaseer op CEF 'n aangepaste URI in die stelsel geregistreer het (workspaces://) wat die volledige URI ontvang het en toe die CEF-gebaseerde toepassing **gelaai het met 'n konfigurasie wat gedeeltelik van daardie URI saamgestel was.
Daar is ontdek dat die URI-parameters URL-dekodeer is en gebruik is om die CEF-basis toepassing te begin, wat 'n gebruiker toegelaat het om die vlag --gpu-launcher
in die opdraglyn in te spuit en arbitrêre dinge uit te voer.
Dus, 'n aanval soos:
Oorskryf Lêers
Verander die vouer waar afgelaaide lêers gestoor gaan word en laai 'n lêer af om gereeld gebruikte bronkode van die program met jou skadelike kode te oorwrite.
Webdriver RCE en uitlekking
Volgens hierdie pos: https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148 is dit moontlik om RCE te verkry en interne bladsye uit te lek vanaf theriver.
Post-Exploitation
In 'n werklike omgewing en nadat 'n gebruiker se rekenaar gekompromitteer is wat 'n Chrome/Chromium-gebaseerde blaaier gebruik, kan jy 'n Chrome-proses begin met die afdeling geaktiveer en die afdelingspoort deurgegee sodat jy daartoe toegang kan verkry. Op hierdie manier sal jy in staat wees om alles wat die slagoffer met Chrome doen te ondersoek en sensitiewe inligting te steel.
Die sluipende manier is om elke Chrome-proses te beëindig en dan iets soos te roep
Verwysings
Last updated