Chrome Cache to XSS
Više detalja u ovom izveštaju.
Tehnika koja se ovde razmatra uključuje razumevanje ponašanja i interakcije dva osnovna tipa keša: back/forward cache (bfcache) i disk cache. Bfcache, koji čuva potpunu sliku stranice uključujući JavaScript heap, ima prioritet nad disk kešom za navigacije napred/nazad zbog svoje sposobnosti da čuva sveobuhvatniju sliku. Disk keš, s druge strane, čuva resurse preuzete sa interneta bez uključivanja JavaScript heap-a, i koristi se za navigacije napred/nazad kako bi se smanjili troškovi komunikacije. Zanimljiv aspekt disk keša je njegovo uključivanje resursa preuzetih korišćenjem fetch
, što znači da će resursi sa URL-a biti prikazani od strane pregledača iz keša.
Ključne tačke:
Bfcache ima prioritet nad disk kešom u navigacijama napred/nazad.
Da bi se iskoristila stranica smeštena u disk kešu umesto bfcache, potonji mora biti onemogućen.
Onemogućavanje bfcache:
Podrazumevano, Puppeteer onemogućava bfcache, u skladu sa uslovima navedenim u dokumentaciji Chromium-a. Jedna efikasna metoda za onemogućavanje bfcache je korišćenje RelatedActiveContentsExist
, postignuto otvaranjem stranice sa window.open()
koja zadržava referencu na window.opener
.
Reprodukcija ponašanja:
Posetite veb stranicu, npr.,
https://example.com
.Izvršite
open("http://spanote.seccon.games:3000/api/token")
, što rezultira odgovorom servera sa status kodom 500.U novootvorenoj kartici, idite 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 nazad. Ova akcija rezultira prikazivanjem keširanog JSON odgovora na stranici.
Provera da li je disk keš korišćen može se potvrditi korišćenjem DevTools u Google Chrome-u.
Za dalja objašnjenja o bfcache i disk kešu, reference se mogu naći na web.dev o bfcache i Chromium-ovim dizajnerskim dokumentima o disk kešu, redom.
Last updated