hacktricks/pentesting-web/xss-cross-site-scripting/chrome-cache-to-xss.md

4.7 KiB
Raw Blame History

Chrome Cache to XSS

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

より詳細な詳細はこの解説をご覧ください。

ここで議論されている技術は、バック/フォワードキャッシュbfcacheディスクキャッシュの2つの主要なキャッシュタイプの動作と相互作用を理解することに関わります。 bfcacheは、JavaScriptヒープを含むページの完全なスナップショットを保存し、より包括的なスナップショットを保存できるため、バック/フォワードナビゲーションにおいてディスクキャッシュよりも優先されます。一方、ディスクキャッシュは、JavaScriptヒープを含まないWebから取得したリソースを保存し、通信コストを削減するためにバック/フォワードナビゲーションに使用されます。ディスクキャッシュの興味深い側面は、fetchを使用して取得されたリソースが含まれていることであり、アクセスされたURLリソースはブラウザによってキャッシュからレンダリングされます。

キーポイント:

  • bfcacheはバック/フォワードナビゲーションにおいてディスクキャッシュよりも優先されます。
  • ページをbfcacheではなくディスクキャッシュに保存するには、後者を無効にする必要があります。

bfcacheの無効化

デフォルトでは、Puppeteerはbfcacheを無効にし、Chromiumのドキュメントに記載されている条件と一致します。bfcacheを無効にする効果的な方法の1つは、RelatedActiveContentsExistを使用することです。これは、window.openerへの参照を保持するwindow.open()を使用してページを開くことで達成されます。

動作の再現:

  1. ウェブページ、例えば https://example.com にアクセスします。
  2. open("http://spanote.seccon.games:3000/api/token") を実行し、500ステータスコードでサーバーレスポンスが返されます。
  3. 新しく開いたタブで、http://spanote.seccon.games:3000/ に移動します。このアクションにより、http://spanote.seccon.games:3000/api/token のレスポンスがディスクキャッシュとしてキャッシュされます。
  4. history.back() を使用して戻ると、キャッシュされたJSONレスポンスがページ上にレンダリングされます。

ディスクキャッシュが利用されたことを確認するためには、Google ChromeのDevToolsを使用して確認できます。

bfcacheとディスクキャッシュに関する詳細については、それぞれweb.devのbfcacheChromiumのディスクキャッシュに関する設計文書で参照できます。