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