Empoisonnement du cache via une requête GET anormale

Web cache poisoning via a fat GET request

Ce laboratoire est vulnérable à l’empoisonnement du cache web car il accepte des requêtes GET avec un corps (body), mais le corps n’est pas inclus dans la clé de cache. Un utilisateur visite régulièrement la page d’accueil du site avec Chrome. L’objectif est d’empoisonner le cache afin que la réponse exécute alert(1) dans le navigateur de la victime.

Analyse initiale

En interceptant la requête vers la page d’accueil, on observe la présence du cookie suivant

Ce cookie est généré à partir du fichier JavaScript chargé par la page :

Analyse du fichier geolocate.js

En accédant directement à : /js/geolocate.js?callback=setCountryCookie

On obtient le code suivant :

On constate que :

  • Le paramètre callback est utilisé pour définir la fonction appelée.

  • La valeur passée est ensuite exécutée côté client.

Exploitation de la vulnérabilité

Lors du chargement de la page d’accueil, le site appelle automatiquement : /js/geolocate.js?callback=setCountryCookie

En exploitant le fait que :

  • Le serveur accepte les requêtes GET avec un body.

  • Le body n’est pas pris en compte dans la clé de cache.

On force un nouveau paramètre callback dans le corps de la requête GET, en lui donnant la valeur suivante :

La réponse mise en cache contient désormais l’appel à alert(1).

Mis à jour