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