Parameter Cloaking

Parameter cloaking

Ce laboratoire est vulnérable au web cache poisoning car un paramètre spécifique est exclu de la clé de cache. De plus, il existe une incohérence dans l’interprétation des paramètres entre le système de cache et le back-end. Un utilisateur visite régulièrement la page d’accueil du site avec Google Chrome.

Objectif : Empoisonner le cache à l’aide de la technique de parameter cloaking afin d’exécuter alert(1) dans le navigateur de la victime.

Observation initiale

On remarque la présence du cookie suivant dans la requête :

Dans la réponse du serveur, un script geolocate est chargé. Ce script utilise la valeur du cookie pour définir le pays de l’utilisateur côté client.

Identification du paramètre vulnérable

À l’aide de Param Miner (Guess query params), on détecte un comportement de parameter cloaking.

Le paramètre découvert est :

Si l’on accède à l’URL suivante :

On constate que :

  • La valeur du paramètre peut être modifiée librement

  • Le cache n’est pas invalidé

  • La réponse reste identique pour les utilisateurs suivants

Cela confirme que utm_content est exclu de la clé de cache.

Exploitation via le script geolocate

Le script chargé par la page est :

En ajoutant le paramètre ignoré par le cache :

On observe que :

  • La valeur test est reflétée dans la réponse

  • Le cache reste inchangé

Cela indique que le back-end interprète les paramètres différemment du cache.

Injection par parameter cloaking

On exploite cette différence de parsing en injectant un second paramètre callback masqué par utm_content :

Résultat :

  • Le cache considère toujours la requête comme identique

Le back-end interprète callback=alert(1) comme un nouveau paramètre valide

Le JavaScript généré exécute alert(1)

Mis à jour