hacktricks/pentesting-web/xss-cross-site-scripting/chrome-cache-to-xss.md
2024-02-10 17:52:19 +00:00

3.8 KiB

Chrome Cache to XSS

htARTE (HackTricks AWS Red Team Expert) tlhIngan Hol!
  • Do you work in a cybersecurity company? Do you want to see your company advertised in HackTricks? or do you want to have access to the latest version of the PEASS or download HackTricks in PDF? Check the SUBSCRIPTION PLANS!
  • Discover The PEASS Family, our collection of exclusive NFTs
  • Get the official PEASS & HackTricks swag
  • Join the 💬 Discord group or the telegram group or follow me on Twitter 🐦@carlospolopm.
  • Share your hacking tricks by submitting PRs to the hacktricks repo and hacktricks-cloud repo.

More in depth details in this writeup.

The technique discussed here involves understanding the behavior and interaction of two primary cache types: the back/forward cache (bfcache) and the disk cache. The bfcache, which stores a complete snapshot of a page including the JavaScript heap, is prioritized over the disk cache for back/forward navigations due to its ability to store a more comprehensive snapshot. The disk cache, in contrast, stores resources fetched from the web without including the JavaScript heap, and is utilized for back/forward navigations to reduce communication costs. An interesting aspect of the disk cache is its inclusion of resources fetched using fetch, meaning accessed URL resources will be rendered by the browser from the cache.

Key Points:

  • The bfcache has precedence over the disk cache in back/forward navigations.
  • To utilize a page stored in disk cache instead of bfcache, the latter must be disabled.

Disabling bfcache:

By default, Puppeteer disables bfcache, aligning with conditions listed in Chromium's documentation. One effective method to disable bfcache is through the use of RelatedActiveContentsExist, achieved by opening a page with window.open() that retains a reference to window.opener.

Reproducing the behavior:

  1. Visit a webpage, e.g., https://example.com.
  2. Execute open("http://spanote.seccon.games:3000/api/token"), which results in a server response with a 500 status code.
  3. In the newly opened tab, navigate to http://spanote.seccon.games:3000/. This action caches the response of http://spanote.seccon.games:3000/api/token as a disk cache.
  4. Use history.back() to navigate back. The action results in the rendering of the cached JSON response on the page.

Verification that the disk cache was utilized can be confirmed through the use of DevTools in Google Chrome.

For further details on bfcache and disk cache, references can be found at web.dev on bfcache and Chromium's design documents on disk cache, respectively.

htARTE (HackTricks AWS Red Team Expert) tlhIngan Hol!
  • Do you work in a cybersecurity company? Do you want to see your company advertised in HackTricks? or do you want to have access to the latest version of the PEASS or download HackTricks in PDF? Check the SUBSCRIPTION PLANS!
  • Discover The PEASS Family, our collection of exclusive NFTs
  • Get the official PEASS & HackTricks swag
  • Join the 💬 Discord group or the telegram group or follow me on Twitter 🐦@carlospolopm.
  • Share your hacking tricks by submitting PRs to the hacktricks repo and hacktricks-cloud repo.