Chrome Cache to XSS

htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!

더 자세한 내용은 이 writeup에서 확인할 수 있습니다.

여기에서 논의되는 기술은 두 가지 주요 캐시 유형인 **뒤로/앞으로 캐시 (bfcache)**와 디스크 캐시의 동작과 상호작용을 이해하는 것입니다. bfcache는 JavaScript 힙을 포함한 페이지의 완전한 스냅샷을 저장하며, 더 포괄적인 스냅샷을 저장할 수 있는 능력으로 인해 뒤로/앞으로 탐색에 대해 디스크 캐시보다 우선시됩니다. 반면, 디스크 캐시는 JavaScript 힙을 포함하지 않고 웹에서 가져온 리소스를 저장하며, 통신 비용을 줄이기 위해 뒤로/앞으로 탐색에 사용됩니다. 디스크 캐시의 흥미로운 측면은 fetch를 사용하여 가져온 리소스를 포함한다는 것입니다. 즉, 액세스한 URL 리소스는 브라우저에서 캐시로부터 렌더링됩니다.

주요 포인트:

  • bfcache는 뒤로/앞으로 탐색에서 디스크 캐시보다 우선합니다.

  • bfcache 대신 디스크 캐시에 저장된 페이지를 활용하려면, bfcache를 비활성화해야 합니다.

bfcache 비활성화:

기본적으로 Puppeteer는 Chromium의 문서에 나열된 조건과 일치하도록 bfcache를 비활성화합니다. bfcache를 비활성화하는 효과적인 방법 중 하나는 RelatedActiveContentsExist를 사용하는 것입니다. 이는 window.open()을 사용하여 window.opener에 대한 참조를 유지하는 페이지를 열어서 달성할 수 있습니다.

동작 재현:

  1. 웹페이지(e.g., 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의 디스크 캐시 설계 문서에서 찾을 수 있습니다.

htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!

Last updated