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

6.2 KiB
Raw Blame History

Chrome Cache to XSS

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

より詳細な詳細はこの解説にあります。

ここで議論されている技術は、2つの主要なキャッシュタイプ、バック/フォワードキャッシュbfcacheディスクキャッシュの動作と相互作用を理解することに関わります。 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のディスクキャッシュに関する設計文書で参照できます。

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