Bypassing SOP with Iframes - 1
Iframes katika SOP-1
Katika changamoto iliyoandaliwa na NDevTK na Terjanq unahitaji kudukua XSS katika nambari iliyoundwa
Tatizo kuu ni kwamba ukurasa mkuu hutumia DomPurify kutuma data.body
, kwa hivyo ili kutuma data yako ya html kwenye nambari hiyo unahitaji kupitisha e.origin !== window.origin
.
Hebu tuangalie suluhisho wanayopendekeza.
Kupitisha SOP 1 (e.origin === null)
Wakati //example.org
inaingizwa kwenye iframe iliyofungwa, basi asili ya ukurasa itakuwa null
, yaani window.origin === null
. Kwa hivyo tu kwa kuingiza iframe kupitia <iframe sandbox="allow-scripts" src="https://so-xss.terjanq.me/iframe.php">
tunaweza kulazimisha asili kuwa null
.
Ikiwa ukurasa huo ulikuwa unaweza kuingizwa ungeweza kuzunguka kinga hiyo kwa njia hiyo (vidakuzi pia vinaweza kuhitaji kuwekwa kama SameSite=None
).
Kupitisha SOP 2 (window.origin === null)
Ukweli usiojulikana sana ni kwamba wakati thamani ya sandbox allow-popups
inawekwa, basi popup iliyofunguliwa itapokea sifa zote zilizofungwa isipokuwa allow-popups-to-escape-sandbox
imefungwa.
Kwa hivyo, kufungua popup kutoka kwa asili ya null kutafanya window.origin
ndani ya popup pia iwe null
.
Suluhisho la Changamoto
Kwa hivyo, kwa changamoto hii, mtu anaweza kuunda iframe, kufungua popup kwenye ukurasa na kifaa cha XSS kinachoweza kudhuru (/iframe.php
), kwa kuwa window.origin === e.origin
kwa sababu zote mbili ni null
inawezekana kutuma mzigo ambao utatumia XSS.
Mzigo huo utapata kitambulisho na kutuma XSS kurudi kwenye ukurasa wa juu (ukurasa ambao ulifungua popup), ambao utabadilisha eneo kwenda kwenye hatari /iframe.php
. Kwa sababu kitambulisho kinajulikana, haifai kwamba hali window.origin === e.origin
haijatimizwa (kumbuka, asili ni popup kutoka kwenye iframe ambayo ina asili null
) kwa sababu data.identifier === identifier
. Kisha, XSS itasababisha tena, wakati huu kwenye asili sahihi.
Last updated