Chrome Cache to XSS
Maggiore dettaglio in questo writeup.
La tecnica discussa qui coinvolge la comprensione del comportamento e dell'interazione di due tipi principali di cache: la back/forward cache (bfcache) e la disk cache. La bfcache, che memorizza un'istantanea completa di una pagina inclusa la heap di JavaScript, è prioritizzata rispetto alla disk cache per le navigazioni avanti/indietro grazie alla sua capacità di memorizzare un'istantanea più completa. La disk cache, al contrario, memorizza risorse recuperate dal web senza includere la heap di JavaScript, ed è utilizzata per le navigazioni avanti/indietro per ridurre i costi di comunicazione. Un aspetto interessante della disk cache è la sua inclusione di risorse recuperate utilizzando fetch
, il che significa che le risorse URL accessibili saranno renderizzate dal browser dalla cache.
Punti Chiave:
La bfcache ha precedenza sulla disk cache nelle navigazioni avanti/indietro.
Per utilizzare una pagina memorizzata nella disk cache invece della bfcache, quest'ultima deve essere disabilitata.
Disabilitare bfcache:
Per impostazione predefinita, Puppeteer disabilita la bfcache, allineandosi alle condizioni elencate nella documentazione di Chromium. Un metodo efficace per disabilitare la bfcache è attraverso l'uso di RelatedActiveContentsExist
, ottenuto aprendo una pagina con window.open()
che mantiene un riferimento a window.opener
.
Riprodurre il comportamento:
Visita una pagina web, ad esempio,
https://example.com
.Esegui
open("http://spanote.seccon.games:3000/api/token")
, il che risulta in una risposta del server con un codice di stato 500.Nella scheda appena aperta, naviga a
http://spanote.seccon.games:3000/
. Questa azione memorizza la risposta dihttp://spanote.seccon.games:3000/api/token
come una disk cache.Usa
history.back()
per tornare indietro. L'azione risulta nella renderizzazione della risposta JSON memorizzata nella pagina.
La verifica che la disk cache sia stata utilizzata può essere confermata attraverso l'uso di DevTools in Google Chrome.
Per ulteriori dettagli su bfcache e disk cache, i riferimenti possono essere trovati su web.dev su bfcache e documenti di design di Chromium sulla disk cache, rispettivamente.
Last updated