30 lines
2.5 KiB
Markdown

# Chrome Cache to XSS
{{#include ../../banners/hacktricks-training.md}}
More in depth details [**in this writeup**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-spanote).
Technika omówiona tutaj polega na zrozumieniu zachowania i interakcji dwóch głównych typów pamięci podręcznej: **back/forward cache (bfcache)** i **disk cache**. bfcache, który przechowuje pełny zrzut strony, w tym stos JavaScript, ma pierwszeństwo przed pamięcią podręczną dysku w przypadku nawigacji wstecz/naprzód z powodu swojej zdolności do przechowywania bardziej kompleksowego zrzutu. Pamięć podręczna dysku, w przeciwieństwie do tego, przechowuje zasoby pobrane z sieci bez uwzględnienia stosu JavaScript i jest wykorzystywana do nawigacji wstecz/naprzód w celu zmniejszenia kosztów komunikacji. Interesującym aspektem pamięci podręcznej dysku jest jej uwzględnienie zasobów pobranych za pomocą `fetch`, co oznacza, że zasoby URL będą renderowane przez przeglądarkę z pamięci podręcznej.
### Key Points:
- **bfcache** ma pierwszeństwo przed pamięcią podręczną dysku w nawigacji wstecz/naprzód.
- Aby wykorzystać stronę przechowywaną w pamięci podręcznej dysku zamiast bfcache, to ostatnie musi być wyłączone.
### Disabling bfcache:
Domyślnie Puppeteer wyłącza bfcache, zgodnie z warunkami wymienionymi w dokumentacji Chromium. Jedną z efektywnych metod wyłączenia bfcache jest użycie `RelatedActiveContentsExist`, osiągnięte poprzez otwarcie strony za pomocą `window.open()`, która zachowuje odniesienie do `window.opener`.
### Reproducing the behavior:
1. Odwiedź stronę internetową, np. `https://example.com`.
2. Wykonaj `open("http://spanote.seccon.games:3000/api/token")`, co skutkuje odpowiedzią serwera z kodem statusu 500.
3. W nowo otwartej karcie przejdź do `http://spanote.seccon.games:3000/`. Ta akcja buforuje odpowiedź `http://spanote.seccon.games:3000/api/token` jako pamięć podręczną dysku.
4. Użyj `history.back()`, aby wrócić. Akcja ta skutkuje renderowaniem buforowanej odpowiedzi JSON na stronie.
Weryfikację, że pamięć podręczna dysku została wykorzystana, można potwierdzić za pomocą DevTools w Google Chrome.
Aby uzyskać więcej informacji na temat bfcache i pamięci podręcznej dysku, odniesienia można znaleźć na [web.dev on bfcache](https://web.dev/i18n/en/bfcache/) oraz [dokumentach projektowych Chromium na temat pamięci podręcznej dysku](https://www.chromium.org/developers/design-documents/network-stack/disk-cache/), odpowiednio.
{{#include ../../banners/hacktricks-training.md}}