cpdos

CPDoS, nouvelle attaque d’empoisonnement de cache cible les CDN

Des chercheurs en sécurité allemand ont découvert une nouvelle attaque d’empoisonnement de cache nommée CPDoS. Cette attaque vise les systèmes de cache web qui peuvent être utilisé par un pirate pour forcer un site ciblé à afficher des pages d’erreur à la plupart des visiteurs au lieu de contenu.

Le problème affecterait les sites s’exécutant derrière des systèmes de cache de proxy inverse comme Varnish et d’autres services Content Distribution Networks (CDNs), ainsi que Amazon CloudFront, Cloudflare, Fastly, Akamai, et CDN77.

Un Content Distribution Network (CDN) est un groupe de serveurs distribué géographiquement qui se situe entre le serveur d’origine d’un site et les visiteurs pour optimiser les performances du site.

Un CDN stocke les fichiers statiques—y compris les pages HTML, les fichiers JavaScript, les feuilles de style, les images, et les vidéos— et les délivrent aux visiteurs plus rapidement sans avoir à envoyer plusieurs requêtes au serveur d’origine.

Chaque serveur CDN partage ensuite la copie exacte des fichiers caches et les envoient ensuite aux visiteurs en fonction de leur localisation.

En général, après un temps fixé ou quand ils sont purgés manuellement, les serveurs CDN rafraîchissent le cache en récupérant une nouvelle copie mise à jour de chaque page web depuis le serveur d’origine et les stocke pour des futurs requêtes.

Comment l’attaque CPDoS fonctionne conte les CDN?

cdn cache poisoning denial-of-service

Nommé CPDoS, Cache Poisoned Denial of Service, l’attaque réside dans la configuration incorrecte des serveurs CDN intermédiaires pour mettre en cache les ressources Web ou les pages avec des réponses d’erreur renvoyées par le serveur d’origine.

L’attaque CPDoS menace la disponibilité des ressources web d’un site en envoyant une simple requête HTTP contenant une en-tête mal-formé, selon trois chercheurs Allemands, Hoai Viet Nguyen, Luigi Lo Iacono et Hannes Federrath.

“Le problème se pose quand un pirate peut générer une requête HTTP pour une ressource qui peut être mise en cache mais la requête contient des champs inexacts qui sont ignorés par le système de cache mais déclenche une erreur quand elle est traité par le serveur d’origine.”

Voici comment fonctionne l’attaque CPDoS:

  • Un pirate distant demande une page web d’un site ciblé en envoyant une requête HTTP contenant une en-tête a mal-formé.
  • Si le serveur CDN n’a pas de copie de la ressource demandé, il transfère la requête au serveur web d’origine, qui va crasher à cause de l’en-tête mal-formé.
  • En conséquence, le serveur d’origine répond avec une page d’erreur, qui est éventuellement stocké par le serveur de cache à la place de la ressource demandé.
  • A partir de ce moment là, à chaque fois qu’un visiteur essayera d’accéder à la ressource ciblée, il recevra la page d’erreur à la place du contenu original.
  • Le serveur CDN partagera aussi cette page d’erreur avec d’autres nœuds du réseau CDN. Les ressources du site de la victime deviennent donc quasiment indisponibles.

“Il faut préciser qu’une simple requête est suffisante pour remplacer le bon contenu dans le cache par une page d’erreur. Cela veut donc dire qu’une telle requête est indétectable par les pare-feux d’applications web (WAF) et les protections de déni de service car ces solutions ont tendance à se concentrer sur les grandes quantités d’irrégularités sur le réseau.”

“De plus, CPDoS peut être exploité pour bloquer les patchs ou les mises à jour de firmware distribués avec les caches, ce qui empêche la réparation des vulnérabilités dans les appareils et les logiciels. Les pirates peuvent aussi désactiver d’importantes alertes de sécurité ou d’importants messages sur des sites critiques comme les sites de banque en ligne ou les sites gouvernementaux.”

3 façons de lancer des attaques CPDoS

Pour lancer ce type d’attaques contre des CDN, la requête HTTP peut être de trois types:

  • HTTP Header Oversize (HHO) — Une requête HTTP contenant une en-tête surdimensionnée qui fonctionne dans des scénarios où une application web utilise un cache qui accepte une taille d’en-tête plus grande que celle du serveur d’origine .
  • HTTP Meta Character (HMC) — Au lieu d’envoyer une en-tête surdimensionnée, cette attaque essaye de contourner un cache avec une en-tête de requête contenant un caractère méta nuisible, comme un retour à la ligne (\n) ou saut de ligne (\r).
  • HTTP Method Override (HMO) — En utilisant l’en-tête de remplacement d’HTTP pour contourner la politique de sécurité qui interdit les requêtes DELETE.

Les services CDN vulnérables aux attaques CPDoS

Les chercheurs ont mené trois attaques différentes contre différents systèmes de cache et implémentations HTTP et ont découvert que le CDN Cloudfront d’Amazon est le plus vulnérable aux attaques CPDoS.

” Nous avons analysé le comportement de mise en cache des pages d’erreur de quinze solutions de mise en cache Web et les avons comparé aux spécifications HTTP. Nous avons identifié un produit de cache proxy et cinq services CDN vulnérables à CPDoS.”

Voici les résultats complets des tests:

cdn security

Il faut précisé que les sites s’exécutant derrière certains de ces services CDN sont vulnérables à cause de leur mauvaise configuration qui n’empêche pas aux serveurs de mise en cache de stocker les pages d’erreur et des faiblesses dans leur service CDN.

“Les sites utilisant CDN77 peuvent être vulnérable à CPDoS si le serveur d’origine est mal configuré ou fournit un moyen de provoquer des pages d’erreur pouvant être cachées. Ceci est en dehors de la sphère de contrôle du service de mise en cache et repose sur la responsabilité du propriétaire du service.”

L’équipe a partagé ses trouvailles avec les fabricants d’implémentations HTTP et les fournisseurs de cache le 19 Février 2019. L’équipe d’Amazon Web Services (AWS) a confirmé les vulnérabilités sur CloudFront et a adressé le problème en interdisant la mise en cache des pages d’erreur avec le code de statut 400 Bad Request par défaut.

Microsoft a aussi pris connaissance des problèmes rapportés et a distribué une mise à jour pour mitiger la vulnérabilité, CVE-2019-0941, dans leur mise à jour de sécurité de Juin 2019.

Play Framework a aussi confirmé le problème et a patché leur produit contre l’attaque CPDoS en limitant l’impact de l’en-tête X-HTTP-Method-Override dans les versions Play Framework 1.5.3 et 1.4.6.

Les autres fabricants affectés, y compris Flask, ont été contacté plusieurs fois, mais les chercheurs n’ont pas reçu de réponse de leur part.

Pour plus de détails sur cette nouvelle attaque d’empoisonnement de cache web et ses variantes, vous pouvez aller jeté un œil au papier de recherche[PDF] intitulé “Your Cache Has Fallen: Cache-Poisoned Denial-of-Service Attack.”