Empoisonnement du cache via une query string non indexée

Web cache poisoning via an unkeyed query string

Ce laboratoire présente une vulnérabilité d’empoisonnement du cache web due au fait que la query string n’est pas prise en compte dans la clé de cache. Un utilisateur légitime visite régulièrement la page d’accueil du site à l’aide de Google Chrome.

L’objectif est d’empoisonner la page d’accueil afin qu’elle renvoie une réponse contenant un JavaScript exécutant alert(1) dans le navigateur de la victime.


Étape 1 : Interception de la page d’accueil

On intercepte la requête vers la racine du site (/). Dans la réponse, on observe la présence d’un lien canonical, ce qui indique que certains éléments de l’URL peuvent être reflétés dans le HTML.


Étape 2 : Test de la query string

On ajoute une query string arbitraire à l’URL :

La valeur est bien reprise dans la réponse, ce qui confirme que la query string influence le contenu retourné.

Étape 3 : Injection HTML

On modifie ensuite la query string afin d’injecter du HTML :

La balise <h1> est interprétée correctement par le navigateur, ce qui démontre une injection HTML exploitable.

Étape 4 : Injection JavaScript (empoisonnement du cache)

On remplace l’injection HTML par un script JavaScript :

La réponse contient désormais le script, qui est exécuté par le navigateur.

Résultat

Comme la query string n’est pas incluse dans la clé de cache, la réponse empoisonnée est stockée et servie aux autres utilisateurs visitant la page d’accueil. La victime déclenche alors automatiquement l’exécution de alert(1) lors de sa visite, ce qui valide l’exploitation du laboratoire.

Mis à jour