Empoisonnement du cache avec un en-tête non indexé
Web cache poisoning with an unkeyed header
Cette application est vulnérable à un empoisonnement du cache Web car elle traite de manière dangereuse une entrée provenant d’un en-tête non indexé (unkeyed header). Un utilisateur légitime visite régulièrement la page d’accueil du site.
Objectif :
Empoisonner le cache afin que la page d’accueil serve une réponse qui exécute alert(document.cookie) dans le navigateur de la victime.


Analyse du comportement du cache
En interceptant la requête vers la page principale, on observe dans la réponse un paramètre
Age, indiquant que la ressource est mise en cache pendant 30 secondes.

En ajoutant un paramètre arbitraire à l’URL, par exemple
?test=1, on constate que :La clé de cache est régénérée.
Le contenu mis en cache peut être modifié et servi aux autres utilisateurs pendant la durée du cache.

Si l’on parvient à empoisonner la réponse à la racine (/), tout visiteur verra ce contenu malveillant durant ces 30 secondes
Recherche d’en-têtes exploitables
À l’aide de Param Miner dans Burp Suite :

Depuis le Repeater, on utilise la fonction Guess headers.


L’extension détecte un comportement d’empoisonnement du cache lié à l’en-tête X-Forwarded-Host.

Exploitation de l’en-tête non indexé
On ajoute l’en-tête suivant à la requête :
La réponse inclut alors un chargement de ressource JavaScript depuis ce domaine.

Lors du rechargement, l’application tente toujours de récupérer ce script, ce qui confirme que la réponse est bien mise en cache.

Redirection vers le serveur d’exploitation
On remplace la valeur de l’en-tête par le domaine du serveur d’exploitation :
L’application cherche alors à charger la ressource suivante :
Injection du payload malveillant
Sur le serveur d’exploitation, on crée le fichier :

Contenu du fichier :
Ce script est désormais inclus dans la réponse mise en cache.

Résultat
Lorsqu’un utilisateur visite la page d’accueil pendant la durée de validité du cache :
Le navigateur charge le script empoisonné.
Une boîte de dialogue s’affiche avec
document.cookie.

Mis à jour