Chrome Cache to XSS
Detaljnije informacije u ovom writeup-u.
Tehnika koja se ovde razmatra uključuje razumevanje ponašanja i interakcije dve osnovne vrste keša: back/forward keš (bfcache) i disk keš. Bfcache, koji čuva potpunu snimku stranice uključujući JavaScript hip, ima prioritet u odnosu na disk keš za back/forward navigacije zbog svoje sposobnosti da čuva sveobuhvatniju snimku. Disk keš, s druge strane, čuva resurse preuzete sa weba bez uključivanja JavaScript hipa i koristi se za back/forward navigacije radi smanjenja troškova komunikacije. Interesantan aspekt disk keša je uključivanje resursa preuzetih korišćenjem fetch
, što znači da će pristupljeni URL resursi biti prikazani od strane pregledača iz keša.
Ključne tačke:
Bfcache ima prednost u odnosu na disk keš u back/forward navigacijama.
Da bi se koristio keš stranice sa diska umesto bfcache-a, potrebno je onemogućiti bfcache.
Onemogućavanje bfcache-a:
Podrazumevano, Puppeteer onemogućava bfcache, u skladu sa uslovima navedenim u dokumentaciji Chromium-a. Jedan efikasan način da se onemogući bfcache je korišćenje RelatedActiveContentsExist
, postignuto otvaranjem stranice sa window.open()
koja zadržava referencu na window.opener
.
Reprodukcija ponašanja:
Posetite veb stranicu, na primer
https://example.com
.Izvršite
open("http://spanote.seccon.games:3000/api/token")
, što rezultira serverskim odgovorom sa status kodom 500.U novootvorenoj kartici, navigirajte na
http://spanote.seccon.games:3000/
. Ova akcija kešira odgovorhttp://spanote.seccon.games:3000/api/token
kao disk keš.Koristite
history.back()
da se vratite unazad. Ova akcija rezultira prikazivanjem keširanog JSON odgovora na stranici.
Potvrdu da je disk keš korišćen možete potvrditi korišćenjem DevTools-a u Google Chrome-u.
Za dodatne detalje o bfcache-u i disk kešu, reference se mogu pronaći na web.dev o bfcache-u i Chromium-ovim dizajnerskim dokumentima o disk kešu, redom.
Last updated