Chrome Cache to XSS

Support HackTricks

More in depth details in this writeup.

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

Key Points:

  • bfcacheはバック/フォワードナビゲーションにおいてディスクキャッシュよりも優先されます。

  • bfcacheの代わりにディスクキャッシュに保存されたページを利用するには、bfcacheを無効にする必要があります。

Disabling bfcache:

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

Reproducing the behavior:

  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 on bfcacheおよびChromiumのディスクキャッシュに関する設計文書で参照できます。

Support HackTricks

Last updated