Chrome Cache to XSS
Більш детальна інформація в цьому звіті.
Техніка, обговорювана тут, включає розуміння поведінки та взаємодії двох основних типів кешу: back/forward cache (bfcache) та disk cache. Bfcache, який зберігає повну знімок сторінки, включаючи JavaScript heap, має пріоритет над disk cache для навігацій назад/вперед через свою здатність зберігати більш комплексний знімок. Disk cache, навпаки, зберігає ресурси, отримані з вебу, не включаючи JavaScript heap, і використовується для навігацій назад/вперед, щоб зменшити витрати на зв'язок. Цікавим аспектом disk cache є його включення ресурсів, отриманих за допомогою fetch
, що означає, що ресурси URL, до яких було отримано доступ, будуть відображені браузером з кешу.
Ключові моменти:
Bfcache має пріоритет над disk cache у навігаціях назад/вперед.
Щоб використовувати сторінку, збережену в disk cache, замість 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
як disk cache.Використовуйте
history.back()
, щоб повернутися назад. Ця дія призводить до відображення кешованої JSON-відповіді на сторінці.
Перевірка того, що disk cache був використаний, може бути підтверджена за допомогою DevTools у Google Chrome.
Для отримання додаткової інформації про bfcache та disk cache посилання можна знайти на web.dev про bfcache та документах дизайну Chromium про disk cache, відповідно.
Last updated