Chrome Cache to XSS
Детальніші відомості у цьому описі.
Техніка, яка обговорюється тут, передбачає розуміння поведінки та взаємодії двох основних типів кешу: кешування back/forward (bfcache) та дискового кешу. Кеш bfcache, який зберігає повний знімок сторінки, включаючи купу JavaScript, має пріоритет перед дисковим кешем для навігації back/forward через здатність зберігати більш повний знімок. Дисковий кеш, навпаки, зберігає ресурси, отримані з мережі, без включення купи JavaScript і використовується для навігації back/forward для зменшення витрат на зв'язок. Цікавою особливістю дискового кешу є включення ресурсів, отриманих за допомогою fetch
, що означає, що доступні ресурси URL будуть відображені браузером з кешу.
Ключові моменти:
Bfcache має пріоритет перед дисковим кешем у навігації back/forward.
Щоб скористатися сторінкою, збереженою в дисковому кеші замість bfcache, останній повинен бути вимкнений.
Вимкнення bfcache:
За замовчуванням Puppeteer вимикає bfcache, відповідно до умов, вказаних у документації Chromium. Один з ефективних методів вимкнення bfcache - використання RelatedActiveContentsExist
, досягнуте відкриттям сторінки за допомогою window.open()
, яка зберігає посилання на window.opener
.
Відтворення поведінки:
Відвідайте веб-сторінку, наприклад,
https://example.com
.Виконайте
open("http://spanote.seccon.games:3000/api/token")
, що призводить до відповіді сервера зі статусом 500.У відкритій вкладці перейдіть на
http://spanote.seccon.games:3000/
. Ця дія кешує відповідьhttp://spanote.seccon.games:3000/api/token
як дисковий кеш.Використовуйте
history.back()
, щоб повернутися назад. Ця дія призводить до відображення кешованої відповіді JSON на сторінці.
Підтвердження використання дискового кешу можна підтвердити за допомогою DevTools у Google Chrome.
Для отримання додаткових відомостей про bfcache та дисковий кеш, див. посилання на web.dev про bfcache та документи про дизайн дискового кешу Chromium відповідно.
Last updated