Chrome Cache to XSS
Reading time: 3 minutes
tip
Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a HackTricks y HackTricks Cloud repos de github.
Más detalles en este informe.
La técnica discutida aquí implica entender el comportamiento y la interacción de dos tipos de caché principales: el back/forward cache (bfcache) y el disk cache. El bfcache, que almacena una instantánea completa de una página incluyendo el heap de JavaScript, tiene prioridad sobre el disk cache para las navegaciones hacia atrás/adelante debido a su capacidad para almacenar una instantánea más completa. El disk cache, en contraste, almacena recursos obtenidos de la web sin incluir el heap de JavaScript, y se utiliza para las navegaciones hacia atrás/adelante para reducir los costos de comunicación. Un aspecto interesante del disk cache es su inclusión de recursos obtenidos mediante fetch
, lo que significa que los recursos de URL accedidos serán renderizados por el navegador desde la caché.
Puntos Clave:
- El bfcache tiene precedencia sobre el disk cache en las navegaciones hacia atrás/adelante.
- Para utilizar una página almacenada en el disk cache en lugar de bfcache, este último debe ser deshabilitado.
Deshabilitando bfcache:
Por defecto, Puppeteer deshabilita bfcache, alineándose con las condiciones listadas en la documentación de Chromium. Un método efectivo para deshabilitar bfcache es a través del uso de RelatedActiveContentsExist
, logrado al abrir una página con window.open()
que retiene una referencia a window.opener
.
Reproduciendo el comportamiento:
- Visita una página web, por ejemplo,
https://example.com
. - Ejecuta
open("http://spanote.seccon.games:3000/api/token")
, lo que resulta en una respuesta del servidor con un código de estado 500. - En la nueva pestaña abierta, navega a
http://spanote.seccon.games:3000/
. Esta acción almacena en caché la respuesta dehttp://spanote.seccon.games:3000/api/token
como un disk cache. - Usa
history.back()
para navegar hacia atrás. La acción resulta en la renderización de la respuesta JSON almacenada en caché en la página.
La verificación de que se utilizó el disk cache se puede confirmar a través del uso de DevTools en Google Chrome.
Para más detalles sobre bfcache y disk cache, se pueden encontrar referencias en web.dev sobre bfcache y documentos de diseño de Chromium sobre disk cache, respectivamente.
tip
Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a HackTricks y HackTricks Cloud repos de github.