Chrome Cache to XSS

Reading time: 5 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

詳細はこのレポートで確認できます。

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

主なポイント:

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

bfcacheの無効化:

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

動作の再現:

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

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする