4 - Targeted web cache poisoning using an unknown header
- Para que una solicitud (request) obtenga una respuesta cacheada cuando se utiliza la cabecera
Vary, es necesario que los valores de los encabezados especificados enVarycoincidan exactamente con los valores de la solicitud que generó la respuesta cacheada. En este caso User-Agent - Buscamos una forma de robarle el User-Agent al objetivo (keyed input) y la enviamos en la request junto con un xss en la cabecera X-Host (unkeyed inpt)
onerror="alert(document.cookie)"
La cabecera Vary en HTTP es utilizada para optimizar el almacenamiento en caché de las respuestas en servidores intermedios, como proxies y CDNs, y también en el propio navegador del usuario. Su función principal es indicar qué encabezados de la solicitud deben ser tenidos en cuenta para determinar si una respuesta almacenada en caché es válida para una solicitud particular. Esto permite que el almacenamiento en caché sea más específico y contextual.
¿Cómo Funciona la Cabecera Vary?
La cabecera Vary le dice al sistema de caché qué encabezados de la solicitud original son relevantes para generar una respuesta específica. Si una solicitud posterior tiene los mismos valores en los encabezados indicados en Vary, la respuesta en caché se reutiliza. Si no, se omite la caché y se envía una nueva solicitud al servidor.
Ejemplos de Uso de Vary
-
Controlar Caché en Función del Idioma:
- Si tienes un sitio web que responde en distintos idiomas, puedes utilizar la cabecera
Vary: Accept-Languagepara que las respuestas en caché se adapten según el encabezadoAccept-Languagede la solicitud. - Ejemplo:
Vary: Accept-Language - Esto significa que si un usuario solicita el recurso en
es-ESy otro enen-US, cada uno tendrá una respuesta cacheada según el idioma.
- Si tienes un sitio web que responde en distintos idiomas, puedes utilizar la cabecera
-
Adaptar Respuesta Según el Tipo de Contenido:
- Puedes usar
Vary: Accept-Encodingpara ofrecer respuestas comprimidas o sin comprimir, según lo que acepte el cliente en su encabezadoAccept-Encoding. - Ejemplo:
Vary: Accept-Encoding - Esto es útil si el servidor admite tanto respuestas comprimidas con
gzipcomo sin compresión, y permite que la caché almacene ambas versiones.
- Puedes usar
-
Uso Combinado de Encabezados:
- Puedes combinar varios encabezados en
Varypara lograr un control más fino. - Ejemplo:
Vary: Accept-Encoding, User-Agent - Aquí, el sistema de caché considera tanto la compresión (
Accept-Encoding) como el tipo de cliente (User-Agent), útil si tienes que ajustar el contenido para diferentes navegadores.
- Puedes combinar varios encabezados en
Ejemplo Completo
Supón que tienes una respuesta de imagen adaptada para dispositivos móviles y de escritorio. Para eso, podrías usar:
Vary: User-Agent
De esta manera, el sistema de caché almacena una versión para móviles y otra para escritorio, asegurando que cada dispositivo obtenga la versión óptima sin reconsultar el servidor.
Beneficios de la Cabecera Vary
- Optimización del Caché: Permite que las respuestas en caché sean más específicas, evitando respuestas inadecuadas.
- Reducción de la Carga en el Servidor: Mejora la eficiencia del sistema de caché al reducir las solicitudes innecesarias al servidor.
- Mejora de la Experiencia del Usuario: Permite una entrega de contenido más rápida y específica según las preferencias del usuario (idioma, compresión, etc.).