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: Wakati inapoanzishwa na swichi --inspect
, mchakato wa Node.js unasikiliza mteja wa ufuatiliaji. Kwa kawaida, itasikiliza kwenye mwenyeji na bandari 127.0.0.1:9229
. Kila mchakato pia umepewa UUID maalum.
Wateja wa mfuatiliaji lazima wajue na kubainisha anwani ya mwenyeji, bandari, na UUID ili kuungana. URL kamili itakuwa na muonekano kama ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e
.
Kwa sababu mfuatiliaji ana ufikiaji kamili wa mazingira ya utekelezaji wa Node.js, mhusika mbaya anayeweza kuungana na bandari hii anaweza kuwa na uwezo wa kutekeleza msimbo wowote kwa niaba ya mchakato wa Node.js (kuinua hadhi inayoweza kutokea).
Kuna njia kadhaa za kuanzisha mfuatiliaji:
Wakati unapoanza mchakato ulioangaliwa kitu kama hiki kitaonekana:
Mchakato unaotegemea CEF (Chromium Embedded Framework) kama unahitaji kutumia param: --remote-debugging-port=9222
kufungua debugger (ulinzi wa SSRF unabaki kuwa sawa). Hata hivyo, wao badala yake ya kutoa kikao cha NodeJS debug kitawasiliana na kivinjari kwa kutumia Chrome DevTools Protocol, hii ni kiolesura cha kudhibiti kivinjari, lakini hakuna RCE ya moja kwa moja.
Unapoanzisha kivinjari kilichosahihishwa kitu kama hiki kitaonekana:
Tovuti zinazofunguliwa kwenye kivinjari cha wavuti zinaweza kufanya maombi ya WebSocket na HTTP chini ya mfano wa usalama wa kivinjari. Muunganisho wa awali wa HTTP unahitajika ili kupata kitambulisho cha kipekee cha kikao cha debugger. Sera ya asili sawa inazuia tovuti kuwa na uwezo wa kufanya muunganisho huu wa HTTP. Kwa usalama wa ziada dhidi ya shambulio la DNS rebinding, Node.js inathibitisha kwamba 'Headers za Host' za muunganisho zinabainisha anwani ya IP au localhost
au localhost6
kwa usahihi.
Hizi mbinu za usalama zinazuia kutumia mpelelezi kuendesha msimbo kwa kutuma tu ombi la HTTP (ambalo linaweza kufanywa kwa kutumia udhaifu wa SSRF).
Unaweza kutuma ishara SIGUSR1 kwa mchakato wa nodejs unaotembea ili kuufanya uanze mpelelezi katika bandari ya kawaida. Hata hivyo, kumbuka kwamba unahitaji kuwa na ruhusa za kutosha, hivyo hii inaweza kukupa ufikiaji wa ruhusa kwa habari ndani ya mchakato lakini si kupanda kwa moja kwa moja kwa ruhusa.
Hii ni muhimu katika kontena kwa sababu kuzima mchakato na kuanzisha mpya na --inspect
si chaguo kwa sababu konteina itakuwa imeuawa pamoja na mchakato.
Ili kuungana na browa ya msingi wa Chromium, URLs chrome://inspect
au edge://inspect
zinaweza kufikiwa kwa Chrome au Edge, mtawalia. Kwa kubonyeza kitufe cha Configure, inapaswa kuhakikisha kuwa mwenyeji wa lengo na bandari zimeorodheshwa kwa usahihi. Picha inaonyesha mfano wa Remote Code Execution (RCE):
Kwa kutumia command line unaweza kuungana na debugger/inspector kwa:
Chombo https://github.com/taviso/cefdebug, kinaruhusu kupata wakaguzi wanaotembea kwa ndani na kuiingiza msimbo ndani yao.
Kumbuka kwamba NodeJS RCE exploits hazitafanya kazi ikiwa umeunganishwa na kivinjari kupitia Chrome DevTools Protocol (unahitaji kuangalia API ili kupata mambo ya kuvutia ya kufanya nayo).
Ikiwa umekuja hapa kutafuta jinsi ya kupata RCE kutoka kwa XSS katika Electron tafadhali angalia ukurasa huu.
Njia kadhaa za kawaida za kupata RCE unapoweza kuunganisha na Node inspector ni kutumia kitu kama (inaonekana kwamba hii haitafanya kazi katika muunganisho wa Chrome DevTools protocol):
You can check the API here: https://chromedevtools.github.io/devtools-protocol/ In this section I will just list interesting things I find people have used to exploit this protocol.
In the CVE-2021-38112 Rhino security discovered that an application based on CEF ilirekodi URI maalum katika mfumo (workspaces://) ambayo ilipokea URI kamili na kisha kuanzisha programu ya msingi ya CEF na usanidi ambao ulikuwa unajengwa kwa sehemu kutoka URI hiyo.
Iligundulika kwamba vigezo vya URI vilikuwa vimepandishwa URL na kutumika kuanzisha programu ya msingi ya CEF, ikiruhusu mtumiaji kuingiza bendera --gpu-launcher
katika mstari wa amri na kutekeleza mambo yasiyo ya kawaida.
So, a payload like:
Itatekeleza calc.exe.
Badilisha folda ambapo faili zilizopakuliwa zitahifadhiwa na upakue faili ili kuandika upya kanuni ya chanzo inayotumika mara kwa mara ya programu kwa kanuni yako mbaya.
Kulingana na chapisho hili: https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148 inawezekana kupata RCE na exfiltrate kurasa za ndani kutoka theriver.
Katika mazingira halisi na baada ya kuathiri PC ya mtumiaji anaye tumia kivinjari kinachotegemea Chrome/Chromium unaweza kuzindua mchakato wa Chrome na kuanzisha ufuatiliaji wa makosa na kupeleka bandari ya ufuatiliaji ili uweze kuifikia. Kwa njia hii utaweza kukagua kila kitu ambacho mwathirika anafanya na Chrome na kuiba taarifa nyeti.
Njia ya siri ni kuondoa kila mchakato wa Chrome na kisha kuita kitu kama
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)