Empoisonnement du cache Web via requêtes ambiguës
Web cache poisoning via ambiguous requests
Description du laboratoire
Ce laboratoire est vulnérable à un empoisonnement du cache Web en raison de divergences dans la manière dont le système de cache et le serveur back-end interprètent des requêtes ambiguës. Un utilisateur légitime visite régulièrement la page d’accueil du site.
Objectif :
Empoisonner le cache afin que la page d’accueil exécute alert(document.cookie) dans le navigateur de la victime.
Observation initiale
Les réponses HTTP contiennent un en-tête indiquant un âge du cache de 30 secondes (
Age: 30), confirmant l’utilisation d’un mécanisme de cache.Le comportement du serveur varie selon la structure de la requête, notamment au niveau de l’en-tête
Host.

Test avec un Host invalide
En modifiant l’en-tête Host avec une valeur inexistante :
La réponse renvoyée est une erreur de type Gateway Timeout, indiquant que le serveur tente de résoudre cette valeur :
Cette approche est bloquée et n’est donc pas exploitable directement

Utilisation de deux en-têtes Host
En envoyant deux en-têtes Host dans la même requête :
L’application répond normalement.
La valeur du second Host est reflétée dans la ressource chargée côté client (par exemple dans un attribut
src).

Cela révèle une interprétation incohérente entre le cache et le back-end
Préparation de la charge utile
Sur le serveur d’exploitation, un fichier JavaScript est créé :
/resources/js/tracking.js
Contenu :

Empoisonnement du cache
Une nouvelle requête est envoyée avec deux en-têtes Host, le second pointant vers le serveur d’exploitation :
Le back-end accepte la requête.
Le cache enregistre la réponse empoisonnée.

La page d’accueil référence désormais le script JavaScript hébergé sur le serveur de l’attaquant.

Mis à jour