Description
HTTP response splitting e produit quand :
- Les données entrent dans une application web par une source non fiable, le plus souvent par une requête HTTP.
- Les données sont incluses dans un en-tête de réponse HTTP envoyé à un utilisateur du web sans savoir qu'il contient des caractères malicieux.
HTTP response splitting est un moyen d'aller à une fin, pas une fin en soi. À la base, l'attaque est directe : un attaquant passe des données malicieuses à une application vulnérable, et l'application inclut les données dans un en-tête de réponse HTTP. Pour monter un exploit réussi, l'application doit autoriser en entrée en caractères d'en-tête CR (retour chariot, aussi codé %0d ou \r) et LF (saut de ligne, aussi codé %0a ou \n). Ces caractères ne donnent pas seulement aux attaquants le contrôle des en-têtes restantes et du corps de la réponse que l'application a l'intention d'envoyer, mais aussi leur permet de créer des réponses supplémentaires entièrement sous leur contrôle.
Exemples
Le segment de code suivant lit le nom de l'auteur d'une entrée de log de web, l'auteur, depuis une requête HTTP et le met dans l'en-tête d'un cookie d'une réponse HTTP.
String author = request.getParameter(AUTHOR_PARAM);
...
Cookie cookie = new Cookie("author", author);
cookie.setMaxAge(cookieExpiration);
response.addCookie(cookie);
La supposition d'un string consistué de caractères alphanumériques standards, comme “ Jane Smith ”, est soumise dans la réponse d'une requête HTTP en incluant ce cookie qui pourrait prendre la forme suivante :
HTTP/1.1 200 OK
...
Set-Cookie: author=Jane Smith
...
Pourtant, parce que la valeur du cookie est formée d'une entrée utilisateur non validée, la réponse maintiendra cette forme seulement si la valeur soumise pour AUTHOR_PARAM ne contient pas de caractères CR et LF. Si un attaquant soumet un string malicieux comme “Wiley Hacker\r\nHTTP/1.1 200 OK\r\n …”, alors la réponse HTTP serait découpée en deux réponses de la forme suivante :
HTTP/1.1 200 OK
...
Set-Cookie: author=Wiley Hacker
HTTP/1.1 200 OK
...
Clairement, la deuxième réponse est complètement contrôlée par l'attaquant et peut être construite avec n'importe quelle contenu d'en-tête et de corps désiré. La capacité de l'attaquant pour construire des réponses HTTP arbitraires permet une variété d'attaques s'ensuivant, en incluant : Cross-User Defacement, Cache Poisoning, Cross-site Scripting (XSS) et Page Hijacking.
References
- http://www.infosecwriters.com/text_resources/pdf/HTTP_Response.pdf - HTTP Response Spliting
- http://www.securiteam.com/securityreviews/5WP0E2KFGK.html - Introdution to HTTP Response Spliting
