Chrome Cache to XSS

ゼロからヒーローまでのAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)

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

ここで議論されている技術は、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のディスクキャッシュに関する設計文書で参照できます。

ゼロからヒーローまでのAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)

Last updated