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
callbackest 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