Blocking main page to steal postmessage
Kushinda RCs na Iframes
Kulingana na hii Terjanq writeup nyaraka za blob zilizoundwa kutoka asili ya null zimefungwa kwa faida ya usalama, ambayo inamaanisha kuwa ikiwa unashughulikia ukurasa mkuu, ukurasa wa iframe utatekelezwa.
Kimsingi katika changamoto hiyo, iframe iliyofungwa inatekelezwa na baada ya kupakia, ukurasa mzazi utatuma ujumbe wa post na bendera. Walakini, mawasiliano ya postmessage yanaweza kuwa hatarishi kwa XSS (iframe inaweza kutekeleza nambari ya JS).
Kwa hivyo, lengo la mshambuliaji ni kuwezesha ukurasa mzazi kuunda iframe, lakini kabla ya kuruhusu ukurasa mzazi kutuma data nyeti (bendera), kuweka ukurasa mzazi kuwa na shughuli na kutuma mzigo kwa iframe. Wakati ukurasa mzazi uko na shughuli, iframe inatekeleza mzigo ambao utakuwa nambari ya JS itakayosikiliza ujumbe wa postmessage wa mzazi na kuvuja bendera. Hatimaye, iframe imefanya mzigo na ukurasa mzazi hauna shughuli tena, kwa hivyo inatuma bendera na mzigo unavuja.
Lakini vipi unaweza kufanya ukurasa mzazi uwe na shughuli mara tu baada ya kuunda iframe na wakati huo huo unasubiri iframe iwe tayari kutuma data nyeti? Kimsingi, unahitaji kupata hatua ya kutekelezwa kwa njia ya async ambayo ukurasa mzazi unaweza kutekeleza. Kwa mfano, katika changamoto hiyo, ukurasa mzazi ulikuwa ukisikiliza ujumbe wa postmessage kama hivi:
hivyo ilikuwa inawezekana kutuma namba kubwa katika ujumbe wa postmessage ambao utabadilishwa kuwa herufi katika ulinganisho huo, ambao utachukua muda fulani:
Na ili kuwa sahihi na tuma hiyo postmessage tu baada ya iframe kuundwa lakini kabla haijawa tayari kupokea data kutoka kwa mzazi, utahitaji kucheza na milisekunde za setTimeout
.
Last updated