# 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