Node inspector/CEF debug abuse
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
From the docs: Kada se pokrene sa --inspect
preklopnikom, Node.js proces sluša za klijentom za debagovanje. Po defaultu, sluša na adresi i portu 127.0.0.1:9229
. Svakom procesu je takođe dodeljen jedinstveni UUID.
Klijenti inspektora moraju znati i odrediti adresu hosta, port i UUID za povezivanje. Puna URL adresa će izgledati otprilike kao ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e
.
Pošto debugger ima pun pristup Node.js okruženju za izvršavanje, zlonamerna osoba koja može da se poveže na ovaj port može biti u mogućnosti da izvrši proizvoljan kod u ime Node.js procesa (potencijalna eskalacija privilegija).
Postoji nekoliko načina za pokretanje inspektora:
Kada pokrenete inspekcijski proces, nešto poput ovoga će se pojaviti:
Procesi zasnovani na CEF (Chromium Embedded Framework) treba da koriste parametar: --remote-debugging-port=9222
da bi otvorili debugger (zaštite od SSRF ostaju veoma slične). Međutim, oni umesto davanja NodeJS debug sesije će komunicirati sa pregledačem koristeći Chrome DevTools Protocol, ovo je interfejs za kontrolu pregledača, ali ne postoji direktan RCE.
Kada pokrenete debagovani pregledač, nešto poput ovoga će se pojaviti:
Veb-sajtovi otvoreni u veb-pretraživaču mogu da prave WebSocket i HTTP zahteve pod modelom bezbednosti pretraživača. Početna HTTP veza je neophodna da bi se dobio jedinstveni ID sesije debagera. Politika iste porekla sprečava veb-sajtove da mogu da naprave ovu HTTP vezu. Za dodatnu bezbednost protiv DNS rebinding napada, Node.js proverava da li 'Host' zaglavlja za vezu ili specificiraju IP adresu ili localhost
ili localhost6
tačno.
Ove bezbednosne mere sprečavaju korišćenje inspektora za pokretanje koda samo slanjem HTTP zahteva (što bi moglo biti učinjeno iskorišćavanjem SSRF ranjivosti).
Možete poslati signal SIGUSR1 pokrenutom nodejs procesu da bi pokrenuo inspektora na podrazumevanom portu. Međutim, imajte na umu da morate imati dovoljno privilegija, tako da ovo može omogućiti privilegovan pristup informacijama unutar procesa ali ne i direktnu eskalaciju privilegija.
Ovo je korisno u kontejnerima jer gašenje procesa i pokretanje novog sa --inspect
nije opcija jer će kontejner biti ubijen zajedno sa procesom.
Da biste se povezali sa pregledačem zasnovanim na Chromium-u, možete pristupiti URL-ovima chrome://inspect
ili edge://inspect
za Chrome ili Edge, respektivno. Klikom na dugme Konfiguriši, treba osigurati da su ciljni host i port ispravno navedeni. Slika prikazuje primer daljinskog izvršavanja koda (RCE):
Korišćenjem komandne linije možete se povezati sa debuggerom/inspektorom sa:
Alat https://github.com/taviso/cefdebug omogućava pronalazak inspektora koji se izvode lokalno i ubacivanje koda u njih.
Napomena: NodeJS RCE eksploatiacije neće raditi ako je povezan sa pregledačem putem Chrome DevTools Protocol (trebalo bi da proverite API da biste pronašli zanimljive stvari koje možete raditi sa njim).
Ako ste došli ovde tražeći kako da dobijete RCE iz XSS u Electron, molimo proverite ovu stranicu.
Neki uobičajeni načini za dobijanje RCE kada možete povezati sa Node inspektorom su korišćenje nečega poput (izgleda da ovo neće raditi u vezi sa Chrome DevTools protokolom):
Možete proveriti API ovde: https://chromedevtools.github.io/devtools-protocol/ U ovom odeljku ću samo navesti zanimljive stvari koje sam primetio da su ljudi koristili za eksploataciju ovog protokola.
U CVE-2021-38112 Rhino security je otkrio da je aplikacija zasnovana na CEF registrovala prilagođeni URI u sistemu (workspaces://) koji je primao puni URI i zatim pokretao CEF zasnovanu aplikaciju sa konfiguracijom koja je delimično konstruisana iz tog URI-ja.
Otkriveno je da su URI parametri bili URL dekodirani i korišćeni za pokretanje CEF osnovne aplikacije, omogućavajući korisniku da ubaci flag --gpu-launcher
u komandnu liniju i izvrši proizvoljne stvari.
Dakle, payload kao:
Will execute a calc.exe.
Promenite fasciklu u kojoj će preuzeti fajlovi biti sačuvani i preuzmite fajl da prepišete često korišćeni izvorni kod aplikacije sa vašim malicioznim kodom.
Prema ovom postu: https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148 moguće je dobiti RCE i eksfiltrirati interne stranice iz theriver.
U pravom okruženju i nakon kompromitovanja korisničkog računara koji koristi Chrome/Chromium baziran pretraživač, mogli biste pokrenuti Chrome proces sa aktiviranim debagovanjem i preusmeriti debag port kako biste mu pristupili. Na ovaj način ćete moći da inspektujete sve što žrtva radi sa Chrome-om i ukradete osetljive informacije.
Tajni način je da prekinete svaki Chrome proces i zatim pozovete nešto poput
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)