Injection d’en-têtes HTTP
Qu’est-ce que l’injection d’en-têtes HTTP ?
L’injection d’en-têtes HTTP est une méthode d’attaque qui exploite les vulnérabilités des applications web. En insérant des chaînes malveillantes, notamment des caractères de retour chariot et de saut de ligne (CRLF), dans les requêtes HTTP envoyées au serveur web, les attaquants peuvent manipuler les réponses HTTP. Les applications web qui insèrent directement les paramètres fournis par les utilisateurs dans les en-têtes de réponse HTTP sans les assainir sont particulièrement vulnérables à ce type d’attaque.
Par exemple, imaginons qu’un navigateur envoie la requête suivante avec un paramètre :
http://f5.com/index.html?status=1
Si l’application web souhaite utiliser le paramètre status=1 pour la gestion des sessions, elle peut renvoyer une réponse HTTP comme celle-ci :
HTTP/1.1 200 OK
...
Set-Cookie:status=1
Supposons maintenant que la requête soit modifiée avec l’entrée spécialement conçue suivante :
http://f5.com/index.html?status=1<CRLF><CRLF><html><body><script>~</script></body></html>
La réponse HTTP de l’application web serait modifiée comme suit :
HTTP/1.1 200 OK
...
Set-Cookie:status=1
<ligne vide>
<html><body><script>~</script></body></html>
Dans les réponses HTTP, tout contenu situé après deux séquences CRLF (ligne vide) est considéré comme le corps de la réponse et affiché par le navigateur. Si le corps de la réponse contient du code JavaScript malveillant, le navigateur l’exécutera, ce qui peut entraîner des failles de sécurité. En outre, des attaquants peuvent concevoir des données d’entrée permettant d’injecter du contenu dans les en-têtes, par exemple :
<CRLF>Set-Cookie:PHPSESSID=abc
Cela définirait un identifiant de session spécifique dans le navigateur et permettrait des attaques par fixation de session.
Comment prévenir l’injection d’en-têtes HTTP :
- Assainissement : validez et assainissez les paramètres reçus dans les en-têtes des requêtes HTTP afin de neutraliser les chaînes malveillantes.
- Pare-feu d’applications web (WAF) : comme il est difficile d’assainir systématiquement toutes les applications web, le déploiement d’un WAF constitue une solution efficace. Un WAF surveille le trafic de la couche applicative et peut bloquer les requêtes considérées comme des attaques, réduisant ainsi les risques d’injection d’en-têtes HTTP.

