PostMessage Vulnerabilities
PostMessage Vulnerabilities
Jifunze & fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Jifunze & fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Tuma PostMessage
PostMessage inatumia kazi ifuatayo kutuma ujumbe:
Note that targetOrigin inaweza kuwa '*' au URL kama https://company.com. Katika hali ya pili, ujumbe unaweza kutumwa tu kwa ile domain (hata kama asili ya kitu cha dirisha ni tofauti). Ikiwa wildcard inatumika, ujumbe unaweza kutumwa kwa domain yoyote, na utatumwa kwa asili ya kitu cha Dirisha.
Kushambulia iframe & wildcard katika targetOrigin
Kama ilivyoelezwa katika ripoti hii ikiwa unapata ukurasa ambao unaweza iframed (hakuna ulinzi wa X-Frame-Header
) na ambao unatumia ujumbe wa nyeti kupitia postMessage kwa kutumia wildcard (*), unaweza kubadilisha asili ya iframe na leak ujumbe wa nyeti kwa domain inayodhibitiwa na wewe.
Kumbuka kwamba ikiwa ukurasa unaweza kuiframed lakini targetOrigin imewekwa kwa URL na sio kwa wildcard, hila hii haitafanya kazi.
addEventListener exploitation
addEventListener
ni kazi inayotumiwa na JS kutangaza kazi ambayo inatarajia postMessages
.
Kodi kama ifuatavyo itatumika:
Note katika kesi hii jinsi kitu cha kwanza ambacho msimbo unafanya ni kuangalia asili. Hii ni muhimu sana hasa ikiwa ukurasa utafanya kitu chochote nyeti na taarifa iliyopokelewa (kama kubadilisha nenosiri). Ikiwa haikangalii asili, washambuliaji wanaweza kuwafanya waathirika kutuma data isiyo na mipaka kwa hizi endpoints na kubadilisha nenosiri za waathirika (katika mfano huu).
Enumeration
Ili kupata wasikilizaji wa matukio katika ukurasa wa sasa unaweza:
Tafuta msimbo wa JS kwa
window.addEventListener
na$(window).on
(toleo la JQuery)Teua katika console ya zana za maendeleo:
getEventListeners(window)
Nenda kwa Elements --> Event Listeners katika zana za maendeleo za kivinjari
Tumia nyongeza ya kivinjari kama https://github.com/benso-io/posta au https://github.com/fransr/postMessage-tracker. Nyongeza hizi za kivinjari zitachukua ujumbe wote na kukuonyesha.
Origin check bypasses
event.isTrusted
sifa inachukuliwa kuwa salama kwani inarudishaTrue
tu kwa matukio ambayo yanatokana na vitendo halisi vya mtumiaji. Ingawa ni vigumu kupita ikiwa imewekwa vizuri, umuhimu wake katika ukaguzi wa usalama ni wa kutia maanani.Matumizi ya
indexOf()
kwa uthibitisho wa asili katika matukio ya PostMessage yanaweza kuwa na uwezekano wa kupita. Mfano unaoonyesha udhaifu huu ni:
Njia ya
search()
kutokaString.prototype.search()
inakusudia kwa matumizi ya kawaida, si nyuzi. Kupitisha chochote kisichokuwa regexp kunasababisha kubadilishwa kwa kimya kuwa regex, na kufanya njia hiyo kuwa hatari. Hii ni kwa sababu katika regex, nukta (.) inafanya kazi kama wildcard, ikiruhusu kupita uthibitisho na maeneo yaliyoundwa kwa njia maalum. Kwa mfano:
Kazi ya
match()
, kamasearch()
, inashughulikia regex. Ikiwa regex imejengwa vibaya, inaweza kuwa na uwezekano wa kupita.Kazi ya
escapeHtml
inakusudia kusafisha ingizo kwa kukwepa wahusika. Hata hivyo, haizalishi kitu kipya kilichokwepwa bali inabadilisha mali za kitu kilichopo. Tabia hii inaweza kutumika. Haswa, ikiwa kitu kinaweza kubadilishwa kwa njia ambayo mali yake inayodhibitiwa haikubalihasOwnProperty
,escapeHtml
haitafanya kazi kama inavyotarajiwa. Hii inaonyeshwa katika mifano hapa chini:Kushindwa Kutarajiwa:
Kupita kukwepa:
Katika muktadha wa udhaifu huu, kitu cha File
kinapatikana kwa urahisi kutokana na mali yake ya kusoma tu name
. Mali hii, inapokuwa katika templeti, haijasafishwa na kazi ya escapeHtml
, ikisababisha hatari za usalama.
Mali ya
document.domain
katika JavaScript inaweza kuwekwa na skripti ili kupunguza eneo, ikiruhusu utekelezaji wa sera ya asili sawa kuwa rahisi zaidi ndani ya eneo moja la mzazi.
e.origin == window.origin bypass
Wakati wa kuingiza ukurasa wa wavuti ndani ya sandboxed iframe kwa kutumia %%%%%%, ni muhimu kuelewa kwamba asili ya iframe itakuwa imewekwa kuwa null. Hii ni muhimu hasa wakati wa kushughulikia sifa za sandbox na athari zao kwenye usalama na utendaji.
Kwa kubainisha allow-popups
katika sifa ya sandbox, dirisha lolote la popup lililofunguliwa kutoka ndani ya iframe linapata vizuizi vya sandbox vya mzazi wake. Hii inamaanisha kwamba isipokuwa sifa ya allow-popups-to-escape-sandbox
pia imejumuishwa, asili ya dirisha la popup pia imewekwa kuwa null
, ikilingana na asili ya iframe.
Kwa hivyo, wakati popup inafunguliwa chini ya hali hizi na ujumbe unatumwa kutoka iframe hadi popup kwa kutumia postMessage
, pande zote za kutuma na kupokea zina asili zao zimewekwa kuwa null
. Hali hii inasababisha hali ambapo e.origin == window.origin
inathibitishwa kuwa kweli (null == null
), kwa sababu iframe na popup zinashiriki thamani sawa ya asili ya null
.
Kwa maelezo zaidi soma:
Bypassing SOP with Iframes - 1Bypassing e.source
Inawezekana kuangalia ikiwa ujumbe ulitoka kwenye dirisha sawa ambalo skripti inasikiliza (hasa ya kuvutia kwa Content Scripts kutoka nyongeza za kivinjari kuangalia ikiwa ujumbe ulitumwa kutoka ukurasa sawa):
You can force e.source
of a message to be null by creating an iframe that sends the postMessage and is immediately deleted.
For more information read:
Bypassing SOP with Iframes - 2X-Frame-Header bypass
Ili kutekeleza mashambulizi haya, kwa kawaida utakuwa na uwezo wa kueka ukurasa wa mtandao wa mwathirika ndani ya iframe
. Lakini vichwa vingine kama X-Frame-Header
vinaweza kuzuia hiyo tabia.
Katika hali hizo, bado unaweza kutumia shambulizi ambalo halijafichwa sana. Unaweza kufungua kichupo kipya kwa programu ya wavuti iliyo hatarini na kuwasiliana nayo:
Kuiba ujumbe uliopelekwa kwa mtoto kwa kuzuia ukurasa mkuu
Katika ukurasa ufuatao unaweza kuona jinsi unavyoweza kuiba data nyeti za postmessage zilizotumwa kwa iframe ya mtoto kwa kuzuia ukurasa mkuu kabla ya kutuma data na kutumia XSS katika mtoto ili kuvuja data kabla haijapokelewa:
Blocking main page to steal postmessageKuiba ujumbe kwa kubadilisha eneo la iframe
Ikiwa unaweza iframe ukurasa wa wavuti bila X-Frame-Header ambao una iframe nyingine, unaweza kubadilisha eneo la iframe hiyo ya mtoto, hivyo ikiwa inapata postmessage iliyotumwa kwa kutumia wildcard, mshambuliaji anaweza kubadilisha asilimia ya iframe hiyo kuwa ukurasa unaodhibitiwa na yeye na kuiba ujumbe:
Steal postmessage modifying iframe locationpostMessage kwa Uchafuzi wa Prototype na/au XSS
Katika hali ambapo data iliyotumwa kupitia postMessage
inatekelezwa na JS, unaweza iframe ukurasa na kutumia uchafuzi wa prototype/XSS ukituma exploit kupitia postMessage
.
Mfano kadhaa wa XSS nzuri sana kupitia postMessage
yanaweza kupatikana katika https://jlajara.gitlab.io/web/2020/07/17/Dom_XSS_PostMessage_2.html
Mfano wa exploit ya kutumia Uchafuzi wa Prototype na kisha XSS kupitia postMessage
kwa iframe
:
Kwa maelezo zaidi:
Kiungo cha ukurasa kuhusu prototype pollution
Kiungo cha ukurasa kuhusu XSS
Kiungo cha ukurasa kuhusu client side prototype pollution to XSS
Marejeleo
Kufanya mazoezi: https://github.com/yavolo/eventlistener-xss-recon
Jifunze & fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Jifunze & fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Last updated