Aller au contenu

Index

Empoisonnement de l'en-tête HTTP Host

Description

L'en-tête HTTP Host spécifie le nom de domaine auquel le client HTTP souhaite accéder. Il est obligatoire dans le cadre de la norme HTTP/1.1.

Par exemple, pour accéder au domaine www.ostorlab.co, le client HTTP enverrait la requête suivante avec l'en-tête Host :

http request GET / HTTP/1.1 Host: www.ostorlab.co

L'en-tête Host est important pour permettre le routage du trafic vers les hôtes virtuels.

Les applications qui gèrent l'en-tête Host de manière non sécurisée sont vulnérables à plusieurs classes de vulnérabilités, telles que :

  • Falsification de requête côté serveur (SSRF)
  • Empoisonnement du cache web
  • Redirections non sécurisées

L'empoisonnement de l'en-tête Host peut se matérialiser de différentes manières :

  • Réflexion arbitraire de l'en-tête Host
  • Injection d'en-têtes Host en double
  • Injection d'URL absolue et ignorance de la valeur de l'en-tête Host
  • Injection d'en-tête en ajoutant un retour à la ligne
  • Injection d'en-têtes de remplacement Host courants, comme X-Host, X-Forwarded-Server, X-HTTP-Host-Override

Recommandation

La protection contre les attaques de l'en-tête Host nécessitera de multiples vérifications qui dépendent de l'architecture cible de l'application, comme la prise en charge d'un hôte virtuel, l'utilisation d'un proxy inverse (reverse proxy) et la présence dans certains environnements cloud qui prennent en charge des en-têtes de routage supplémentaires.

Les recommandations pour se protéger contre ces attaques sont les suivantes :

  • Éviter d'utiliser la valeur de l'en-tête Host dans la logique de l'application.
  • Implémenter une vérification par liste blanche (whitelist) des valeurs acceptées ; la plupart des frameworks web le prennent couramment en charge.
  • Désactiver les en-têtes de remplacement d'hôte ; cela dépend des composants intermédiaires déployés dans votre architecture. Les endroits courants à vérifier sont les proxys inverses et les contrôleurs Ingress Kubernetes.

Liens

Normes

  • PCI_STANDARDS:
    • REQ_6_2
    • REQ_6_3
    • REQ_6_4
    • REQ_11_3
  • HIPAA_CONTROLS:
    • SECURITY221
    • SECURITY212
    • SECURITY213