Chrome Cache to XSS
Więcej szczegółów w tym opracowaniu.
Omawiana tutaj technika polega na zrozumieniu zachowania i interakcji dwóch podstawowych typów pamięci podręcznej: pamięci podręcznej wstecz/przód (bfcache) i pamięci podręcznej dysku. Pamięć podręczna bfcache, która przechowuje kompletny zrzut strony, włącznie z stosem JavaScript, ma pierwszeństwo przed pamięcią podręczną dysku podczas nawigacji wstecz/przód ze względu na możliwość przechowywania bardziej kompleksowego zrzutu. Pamięć podręczna dysku natomiast przechowuje zasoby pobrane z sieci bez uwzględniania stosu JavaScript i jest wykorzystywana podczas nawigacji wstecz/przód w celu zmniejszenia kosztów komunikacji. Ciekawym aspektem pamięci podręcznej dysku jest uwzględnienie zasobów pobranych za pomocą fetch
, co oznacza, że przeglądarka renderuje zasoby URL dostępne w pamięci podręcznej.
Kluczowe punkty:
Pamięć podręczna bfcache ma pierwszeństwo przed pamięcią podręczną dysku podczas nawigacji wstecz/przód.
Aby skorzystać z strony przechowywanej w pamięci podręcznej dysku zamiast bfcache, należy wyłączyć ten ostatni.
Wyłączanie pamięci podręcznej bfcache:
Domyślnie Puppeteer wyłącza pamięć podręczną bfcache, zgodnie z warunkami wymienionymi w dokumentacji Chromium. Skuteczną metodą wyłączenia pamięci podręcznej bfcache jest użycie RelatedActiveContentsExist
, osiągnięte poprzez otwarcie strony za pomocą window.open()
, która zachowuje odwołanie do window.opener
.
Reprodukcja zachowania:
Odwiedź stronę internetową, np.
https://example.com
.Wykonaj polecenie
open("http://spanote.seccon.games:3000/api/token")
, co skutkuje odpowiedzią serwera z kodem stanu 500.W nowo otwartej karcie przejdź do
http://spanote.seccon.games:3000/
. Ta czynność spowoduje zapisanie odpowiedzi zhttp://spanote.seccon.games:3000/api/token
w pamięci podręcznej dysku.Użyj
history.back()
, aby przejść do poprzedniej strony. Spowoduje to wyrenderowanie zapisanej odpowiedzi JSON na stronie.
Potwierdzenie wykorzystania pamięci podręcznej dysku można sprawdzić za pomocą narzędzi DevTools w Google Chrome.
Aby uzyskać dalsze szczegóły na temat pamięci podręcznej bfcache i dysku, można odnaleźć odnośniki na stronach web.dev na temat bfcache i dokumentacji Chromium na temat pamięci podręcznej dysku.
Last updated