Web Cache Deception

web hacking

Introducción

El engaño de caché web es una vulnerabilidad que permite a un atacante engañar a una caché web para que almacene contenido sensible y dinámico. Se debe a discrepancias (Diferencia, desigualdad que resulta de la comparación de las cosas entre sí.) entre la forma en que el servidor de caché y el servidor de origen gestionan las solicitudes.

En un ataque de engaño de caché web, un atacante persuade a la víctima para que visite una URL maliciosa, lo que induce a su navegador a realizar una solicitud ambigua de contenido sensible. La caché malinterpreta esto como una solicitud de un recurso estático y almacena la respuesta. El atacante puede entonces solicitar la misma URL para acceder a la respuesta en caché, obteniendo acceso no autorizado a información privada.

Que es la cache web?

¿Alguna vez dejaste un sitio web porque tardó demasiado en cargar? Este es un gran problema para los propietarios de sitios web sin un hosting rápido. Pero no te preocupes, ya que hay muchas formas de optimizar tu sitio web, una de ellas: la caché web. En pocas palabras, la caché web almacena datos en un servidor para su reutilización futura. Cuando abres un sitio, la caché reúne todos los datos del sitio web, lo convierte en un archivo HTML y lo abre en tu navegador. La próxima vez que abras el mismo sitio, la caché cargará una copia. Esto ayuda al servidor a trabajar más rápido y a no sobrecargarse. Por supuesto, si el sitio web es actualizado, el proceso comenzará desde el principio. Dos cosas a tener en cuenta: primero, no todos los sitios web usan caché. En segundo lugar, la caché puede caducar o eliminarse manualmente. Si estás utilizando Google Chrome y deseas borrar la caché, haz clic en los tres puntos en la parte superior derecha de tu página para ir al menú y selecciona Historial (o presiona Ctrl + H). Luego, haz clic en Borrar datos de navegación. Después de eso, marca la opción que desees y presiona Borrar datos.

Es importante distinguir entre el engaño de caché web y el envenenamiento de caché web. Si bien ambos explotan los mecanismos de almacenamiento en caché, lo hacen de diferentes maneras:

El envenenamiento de caché web manipula las claves de caché para inyectar contenido malicioso en una respuesta almacenada en caché, que luego se distribuye a otros usuarios.

El engaño de caché web explota las reglas de caché para engañar a la caché y que almacene contenido confidencial o privado, al que el atacante puede acceder.

Introducción al funcionamiento de la cache web

Una caché web es un sistema que se ubica entre el servidor de origen y el usuario. Cuando un cliente solicita un recurso estático, la solicitud se dirige primero a la caché. Si la caché no contiene una copia del recurso (lo que se conoce como fallo de caché), la solicitud se reenvía al servidor de origen, que la procesa y responde. La respuesta se envía a la caché antes de enviarse al usuario. La caché utiliza un conjunto de reglas preconfiguradas para determinar si se almacena la respuesta.

Cuando se realiza una solicitud del mismo recurso estático en el futuro, la caché envía la copia almacenada de la respuesta directamente al usuario (lo que se conoce como acierto de caché). Resumidamente :

Acierto de cache : Cuando el cache tiene una copia almacenada y lo envía directamente

Fallo del Cache : Cuando la cache no tiene copias del recurso solicitado

El almacenamiento en caché se ha convertido en un aspecto común y crucial de la distribución de contenido web, especialmente con el uso generalizado de las Redes de Entrega de Contenido (CDN), que utilizan el almacenamiento en caché para almacenar copias de contenido en servidores distribuidos por todo el mundo. Las CDN aceleran la distribución al servir el contenido desde el servidor más cercano al usuario, lo que reduce los tiempos de carga al minimizar la distancia recorrida por los datos.

Cache keys / Llaves cache :

Cuando la caché recibe una solicitud HTTP, debe decidir si existe una respuesta almacenada en caché que pueda procesar directamente o si debe reenviarla al servidor de origen. La caché toma esta decisión generando una "clave de caché" a partir de los elementos de la solicitud HTTP. Normalmente, esto incluye la ruta URL y los parámetros de consulta, pero también puede incluir otros elementos como los encabezados y el tipo de contenido.

Si la clave de caché de la solicitud entrante coincide con la de una solicitud anterior, la caché las considera equivalentes y procesa una copia de la respuesta almacenada en caché. Las Claves cache pueden ser vulneradas para inyectar contenido malicioso en la cache, gracias al [[Web cache Poisoning - Envenenamiento de la cache web]]

Las reglas de caché determinan qué se puede almacenar en caché y durante cuánto tiempo. Estas reglas suelen configurarse para almacenar recursos estáticos, que generalmente no cambian con frecuencia y se reutilizan en varias páginas. El contenido dinámico no se almacena en caché, ya que es más probable que contenga información confidencial, lo que garantiza que los usuarios obtengan los datos más recientes directamente del servidor.

Los ataques de engaño de caché web aprovechan la aplicación de las reglas de caché, por lo que es importante conocer los diferentes tipos de reglas, en particular las basadas en cadenas definidas en la ruta URL de la solicitud. Por ejemplo:

Reglas de extensión de archivo estáticas: Estas reglas coinciden con la extensión del archivo del recurso solicitado; por ejemplo, .css para hojas de estilo o .js para archivos JavaScript.

Reglas de directorio estáticas: Estas reglas coinciden con todas las rutas URL que comienzan con un prefijo específico. Se suelen utilizar para directorios específicos que contienen solo recursos estáticos, por ejemplo, /static o /assets.

Reglas de nombre de archivo: Estas reglas coinciden con nombres de archivo específicos para archivos que son universalmente necesarios para las operaciones web y que cambian con poca frecuencia, como robots.txt y favicon.ico. Los cachés también pueden implementar reglas personalizadas basadas en otros criterios, como parámetros de URL o análisis dinámico.

references here

Enumeración-Explotación

vamos a armar un ataque de engaño de chache web básico, el cual necesita los siguientes requisitos :

  • identificar un endpoint de destino que devuelva una respuesta dinámica con información confidencial. Revise sus respuestas en burpsuite, ya que es posible que parte de la información confidencial no sea visible en la pagina renderizada. Céntrese en endpoints que admitan GET, HEAD y OPTIONS ya que las solicitudes que alteran el estado del servidor de origen generalmente no se almacenan en el cache

  • identifica una desigualdad en como la cache y el servidor de origen analizan la ruta de la URL, esto podría ser una discrepancia en como : - asignar URL a recursos - Procesar caracteres delimitadores - Normalizar rutas

  • debemos crear una URL maliciosa que haga la discrepancia para engañar a la cache y almacene una respuesta dinámica. Cuando la victima accede a la URL su respuesta es almacenada en la cache. Podemos interceptar la respuesta en la cache de la misma URL para obtener la respuesta cache con los datos de la victima. Evítelo hacerlo en el navegador ya que algunas aplicaciones web redirigen a los usuarios sin inicio de sesión o invalidan datos locales, lo que podría ocultar la vulnerabilidad.

Ejemplo de explotación

https://example.com/secrets # url objetivo

https://example.com/secrets/wcd.css # al agregar esto el proxy cache podria pensar que es un contenido estatico, entonces el navegador nos mastraria la informacion que esta en secrets

# por lo tanto, la siguiente request que se haga a ese PATH devolvera la informacion de la persona que lo clickeo anteriormente

Practica Portswigger labs

https://0a65000904df4746825714fe002800ed.web-security-academy.net/my-account # URL objetivo
  • interceptamos la petición por burpsuite y la mandamos al repeater para que nos de un 200 OK

despues de eso modificamos la URL como se debe (antes de eso debemos mandar un string arbitrario, puede ser un string cualquiera despeus de my account y nos debe responder, si no nos responde (404) no significa que no podamos hacer algo, veremos como hacerle en la siguiente explotacion)

  • damos a send y deberíamos ver el parámetro X-cache nos dirá miss, pero si volvemos a enviar la request nos debe decir HIT por lo que si enviamos el link a la victima y hace click tenemos tiempo limitado para revisar denuevo desde el repeater y conseguir su información

también podemos utilizar extensiones como js pero debe detectarlo como estático

podemos crear un servidor web para que la victima entre y se ejecute este JS el cual dará lugar al web cache deception

<script>document.location="https://exploit-0aec006904b7a39c80f5ed9601e600c1.exploit-server.net/my-account/wcd.css"</script> # codigo que se ejecutara al entrar a nuestro servidor

recordemos no acceder al link malicioso con la información hasta que la victima haya accedido. hay veces que no nos da informacion como el X-Cache por lo que debemos hacer prueba y error desde otro navegador

Explotacion con delimitadores

lista de delimitadores

! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~ %21 %22 %23 %24 %25 %26 %27 %28 %29 %2A %2B %2C %2D %2E %2F %3A %3B %3C %3D %3E %3F %40 %5B %5C %5D %5E %5F %60 %7B %7C %7D %7E

depende de las tecnologías del servidor como funciona cada uno

  • interceptamos la solicitud en el lugar donde hay información confidencial y vemos que no nos responde el string arbitrario, por lo que lo mandamos del repeater al intruder para probar los delimitadores

en el intruder seleccionamos la barra y damos a add para posteriormente agregar nuestra lista de posibles delimitadores, luego de eso vamos hasta abajo y quitamos el URL encode characters, los 200 significan que hubo éxito

entonces ahora agregamos el "estatico" para el ataque

https://0a65000904df4746825714fe002800ed.web-security-academy.net/my-account?wcd.css

en este ejemplo, al usar el delimitador valido de ? puede que aun asi no nos de la respuesta del X-CACHE por lo que debemos probar con cada delimitador que fue valido

en las extensiones como css o js tambien podemos usar ico o jpg por ejemplo, busca que extensiones se usan para los elementos estaticos y prueba con el intruder

consejos :

  • si el navegador nos dice un 404, debemos revisar el codigo porque puede haber datos sensibles en el cache

  • si te redirecciona automaticamente revisa en burpsuite si antes de la redireccion carga una respuesta desde el proxy cache

  • si la response no contiene headers de X-Cache elimina las cookies de sesion u otras que esten.

  • si queremos revisar si esta funcionando el ataque es preferible hacerlo desde una IP diferente porque tu IP podria estar cacheada

Last updated