Node inspector/CEF debug abuse
Osnovne informacije
Od dokumentacije: Kada se pokrene sa --inspect
prekidačem, Node.js proces osluškuje za debug klijenta. Podrazumevano, osluškuje na hostu i portu 127.0.0.1:9229
. Svaki proces takođe dobija jedinstveni UUID.
Inspektor klijenti moraju znati i specificirati adresu hosta, port i UUID za povezivanje. Ceo URL će izgledati nešto kao ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e
.
Pošto debuger ima pun pristup Node.js izvršnom okruženju, zlonamerni akter koji može da se poveže na ovaj port može izvršiti proizvoljan kod u ime Node.js procesa (potencijalno eskalacija privilegija).
Postoji nekoliko načina za pokretanje inspektora:
Kada pokrenete proces koji se inspicira, pojaviće se nešto slično ovome:
Procesi zasnovani na CEF (Chromium Embedded Framework) poput potrebe da koriste parametar: --remote-debugging-port=9222
da bi otvorili debugger (zaštite od SSRF ostaju vrlo slične). Međutim, umesto dodeljivanja NodeJS debug sesije, oni će komunicirati sa pregledačem koristeći Chrome DevTools Protocol, ovo je interfejs za kontrolu pregledača, ali nema direktnog RCE.
Kada pokrenete pregledač u režimu za debagovanje, nešto slično ovome će se pojaviti:
Preglednici, WebSockets i politika istog porekla
Veb-sajtovi otvoreni u veb-pregledaču mogu da vrše WebSocket i HTTP zahteve u okviru bezbednosnog modela pregledača. Početna HTTP veza je neophodna da bi se dobio jedinstveni ID sesije za debager. Politika istog porekla sprečava veb-sajtove da mogu da naprave ovu HTTP vezu. Radi dodatne bezbednosti protiv DNS preusmeravanja napada, Node.js proverava da li 'Host' zaglavlja za vezu precizno navode IP adresu ili localhost
ili localhost6
.
Ove bezbednosne mere sprečavaju iskorišćavanje inspektora za izvršavanje koda samo slanjem HTTP zahteva (što bi se moglo uraditi iskorišćavanjem SSRF ranjivosti).
Pokretanje inspektora u pokrenutim procesima
Možete poslati signal SIGUSR1 pokrenutom nodejs procesu da bi se pokrenuo inspektor na podrazumevanom portu. Međutim, imajte na umu da je potrebno imati dovoljno privilegija, pa ovo može omogućiti pristup privilegovanim 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 sa procesom.
Povezivanje sa inspektorom/debugerom
Da biste se povezali sa Chromium-based browserom, možete pristupiti URL-ovima chrome://inspect
ili edge://inspect
za Chrome odnosno Edge. Klikom na dugme Configure, treba se osigurati da su ciljni host i port ispravno navedeni. Slika prikazuje primer Remote Code Execution (RCE):
Korišćenjem komandne linije možete se povezati sa debuggerom/inspektorom pomoću:
Alatka https://github.com/taviso/cefdebug, omogućava pronalaženje inspektora koji se izvršavaju lokalno i ubacivanje koda u njih.
Imajte na umu da NodeJS RCE eksploatacije neće raditi ako ste povezani sa pregledačem putem Chrome DevTools Protocola (treba da proverite API da biste pronašli zanimljive stvari koje možete s njim uraditi).
RCE u NodeJS Debugger/Inspector-u
Ako ste ovde došli tražeći kako da dobijete RCE putem XSS u Electronu, molimo proverite ovu stranicu.](../../network-services-pentesting/pentesting-web/electron-desktop-apps/)
Neke uobičajene metode za dobijanje RCE kada možete povezati se na Node inspektor su korišćenje nečega poput (izgleda da ovo neće raditi u vezi sa Chrome DevTools protokolom):
Chrome DevTools Protocol Payloads
Možete proveriti API ovde: https://chromedevtools.github.io/devtools-protocol/ U odeljku ću samo navesti zanimljive stvari koje sam pronašao da su ljudi koristili za iskorišćavanje ovog protokola.
Ubacivanje parametara putem dubokih veza
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, a zatim pokretao CEF zasnovanu aplikaciju sa konfiguracijom koja je delimično konstruisana iz tog URI-ja.
Otkriveno je da su parametri URI-ja dekodirani URL-om i korišćeni za pokretanje osnovne CEF aplikacije, omogućavajući korisniku da ubaci zastavicu --gpu-launcher
u komandnoj liniji i izvrši proizvoljne radnje.
Dakle, payload poput:
Prepisivanje fajlova
Promenite folder gde će preuzeti fajlovi biti sačuvani i preuzmite fajl da prepiset često korišćeni izvorni kod aplikacije sa vašim zlonamernim kodom.
Webdriver RCE i ekstrakcija podataka
Prema ovom postu: https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148 moguće je dobiti RCE i ekstraktovati interne stranice iz therivera.
Post-Eksploatacija
U stvarnom okruženju i nakon kompromitovanja korisnikovog računara koji koristi Chrome/Chromium bazirani pregledač, mogli biste pokrenuti Chrome proces sa aktiviranim debagovanjem i proslediti port za debagovanje kako biste mu pristupili. Na ovaj način ćete moći inspekcijom pratiti sve što žrtva radi sa Chrome-om i ukrasti osetljive informacije.
Neprimetan način je završiti svaki Chrome proces a zatim pozvati nešto poput
Reference
Last updated