Iframes in XSS, CSP and SOP
Iframes in XSS
Daar is 3 maniere om die inhoud van 'n geïframeerde bladsy aan te dui:
Via
src
wat 'n URL aandui (die URL kan kruis-oorsprong of selfde oorsprong wees)Via
src
wat die inhoud aandui deur diedata:
protokol te gebruikVia
srcdoc
wat die inhoud aandui
Toegang tot ouer- en kindervariante
Indien jy die vorige html via 'n http-bediener (soos python3 -m http.server
) toegang, sal jy agterkom dat al die skripte uitgevoer sal word (aangesien daar geen CSP is wat dit voorkom). Die ouer sal nie die geheime
var binne enige iframe kan bereik nie en slegs die iframes if2 & if3 (wat as dieselfde webwerf beskou word) kan die geheim in die oorspronklike venster bereik.
Merk op hoe if4 as 'n null
oorsprong beskou word.
Iframes met CSP
Let asseblief daarop hoe in die volgende omseilings die reaksie op die geïnframeerde bladsy geen CSP-kop bevat wat JS-uitvoering voorkom nie.
Die self
waarde van script-src
sal nie die uitvoering van die JS-kode met die data:
protokol of die srcdoc
eienskap toelaat nie.
Nietemin sal selfs die none
waarde van die CSP die uitvoering van die iframes toelaat wat 'n URL (volledig of net die pad) in die src
eienskap plaas.
Daarom is dit moontlik om die CSP van 'n bladsy te omseil met:
Merk op hoe die vorige CSP slegs die uitvoering van die inline skrip toelaat.
Egter, slegs if1
en if2
skripte gaan uitgevoer word, maar slegs if1
sal in staat wees om die ouer geheim te benader.
Daarom is dit moontlik om 'n CSP te omseil as jy 'n JS-lêer na die bediener kan oplaai en dit via 'n iframe kan laai selfs met script-src 'none'
. Dit kan moontlik ook gedoen word deur 'n selfde-site JSONP eindpunt te misbruik.
Jy kan dit toets met die volgende scenario waar 'n koekie selfs met script-src 'none'
gesteel word. Hardloop net die aansoek en besoek dit met jou webblaaier:
Ander Lading wat in die wild aangetref is
Iframe sandput
Die inhoud binne 'n iframe kan onderwerp word aan addisionele beperkings deur die gebruik van die sandbox
eienskap. Standaard word hierdie eienskap nie toegepas nie, wat beteken dat daar geen beperkings van toepassing is nie.
Wanneer dit gebruik word, plaas die sandbox
eienskap verskeie beperkings op:
Die inhoud word hanteer asof dit afkomstig is van 'n unieke bron.
Enige poging om vorms in te dien word geblokkeer.
Uitvoering van skripte is verbode.
Toegang tot sekere API's is gedeaktiveer.
Dit voorkom dat skakels met ander blaai-kontekste interaksie het.
Die gebruik van plugins via
<embed>
,<object>
,<applet>
, of soortgelyke etikette is nie toegelaat nie.Navigasie van die inhoud se top-vlak blaai-konteks deur die inhoud self word voorkom.
Funksies wat outomaties geaktiveer word, soos video-afspeel of outomatiese fokus van vormkontroles, word geblokkeer.
Die waarde van die eienskap kan leeg gelaat word (sandbox=""
) om al die genoemde beperkings toe te pas. Alternatiewelik kan dit ingestel word op 'n spasie-geskeide lys van spesifieke waardes wat die iframe vrystel van sekere beperkings.
Iframes in SOP
Kyk na die volgende bladsye:
pageBypassing SOP with Iframes - 1pageBypassing SOP with Iframes - 2pageBlocking main page to steal postmessagepageSteal postmessage modifying iframe locationLast updated