<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
Si vous êtes intéressé par une **carrière dans le hacking** et pirater l'impénétrable - **nous recrutons !** (_polonais courant écrit et parlé requis_).
Lorsqu'un navigateur envoie une requête à un serveur web, le serveur répond avec une réponse contenant à la fois les en-têtes de réponse HTTP et le contenu réel du site web, c'est-à-dire le corps de la réponse. Les en-têtes HTTP et la réponse HTML (le contenu du site web) sont séparés par une combinaison spécifique de caractères spéciaux, à savoir un retour chariot et un saut de ligne. Ils sont également connus sous le nom de CRLF.
Le serveur web utilise le CRLF pour comprendre quand un nouvel en-tête HTTP commence et un autre se termine. Le CRLF peut également indiquer à une application web ou à un utilisateur qu'une nouvelle ligne commence dans un fichier ou dans un bloc de texte. Les caractères CRLF sont un message standard HTTP/1.1, donc utilisés par tout type de serveur web, y compris Apache, Microsoft IIS et tous les autres.\
Dans une attaque exploitant une vulnérabilité d'injection CRLF, l'attaquant insère à la fois les caractères de retour chariot et de saut de ligne dans une entrée utilisateur pour tromper le serveur, l'application web ou l'utilisateur en leur faisant croire qu'un objet est terminé et qu'un autre a commencé. Ainsi, les séquences CRLF ne sont pas des caractères malveillants, mais elles peuvent être utilisées à des fins malveillantes, pour le fractionnement de réponse HTTP, etc.
Dans les applications web, une injection CRLF peut avoir des impacts graves, selon ce que l'application fait avec les éléments individuels. Les impacts peuvent aller de la divulgation d'informations à l'exécution de code, une vulnérabilité directe affectant la sécurité de l'application web. En fait, une attaque par injection CRLF peut avoir des répercussions très sérieuses sur une application web, même si elle n'a jamais été répertoriée dans la liste du Top 10 de l'OWASP. Par exemple, il est également possible de manipuler des fichiers journaux dans un panneau d'administration comme expliqué dans l'exemple ci-dessous.
Si un attaquant peut injecter les caractères CRLF dans la requête HTTP, il peut modifier le flux de sortie et falsifier les entrées de journal. Il peut changer la réponse de l'application web en quelque chose comme ce qui suit :
Les %0d et %0a sont les formes encodées en URL de CR et LF. Par conséquent, les entrées de journal ressembleraient à ceci après que l'attaquant ait inséré ces caractères et que l'application les affiche :
Ainsi, en exploitant une vulnérabilité d'injection CRLF, l'attaquant peut falsifier des entrées dans le fichier de journalisation pour dissimuler ses propres actions malveillantes. L'attaquant procède littéralement à un détournement de page et modifie la réponse. Par exemple, imaginez un scénario où l'attaquant a le mot de passe administrateur et exécute le paramètre restrictedaction, qui ne peut être utilisé que par un administrateur.
Le problème est que si l'administrateur remarque qu'une IP inconnue a utilisé le paramètre restrictedaction, il se rendra compte que quelque chose ne va pas. Cependant, puisqu'il semble maintenant que la commande a été émise par le localhost (et donc probablement par quelqu'un qui a accès au serveur, comme un administrateur), cela ne paraît pas suspect.
Toute la partie de la requête commençant par %0d%0a sera traitée par le serveur comme un seul paramètre. Après cela, il y a un autre & avec le paramètre restricted action qui sera analysé par le serveur comme un autre paramètre. En effet, cela serait la même requête que :
Étant donné que l'en-tête d'une réponse HTTP et son corps sont séparés par des caractères CRLF, un attaquant peut tenter de les injecter. Une combinaison de CRLFCRLF indiquera au navigateur que l'en-tête se termine et que le corps commence. Cela signifie qu'il est maintenant capable d'écrire des données à l'intérieur du corps de la réponse où le code html est stocké. Cela peut conduire à une vulnérabilité de type Cross-site Scripting.
La valeur de l'en-tête est définie via un paramètre get appelé "name". Si aucun encodage d'URL n'est en place et que la valeur est directement reflétée à l'intérieur de l'en-tête, il pourrait être possible pour un attaquant d'insérer la combinaison mentionnée de CRLFCRLF pour indiquer au navigateur que le corps de la requête commence. De cette manière, il peut insérer des données telles qu'une charge utile XSS, par exemple :
En exploitant une injection CRLF, un attaquant peut également insérer des en-têtes HTTP qui pourraient être utilisés pour défaire des mécanismes de sécurité tels que le filtre XSS d'un navigateur ou la politique de même origine (same-origin-policy). Cela permet à l'attaquant d'obtenir des informations sensibles comme des jetons CSRF. Il peut également définir des cookies qui pourraient être exploités en connectant la victime au compte de l'attaquant ou en exploitant des vulnérabilités XSS (cross-site scripting) autrement inexploitables.
Si un attaquant peut injecter les en-têtes HTTP qui activent CORS (Cross Origin Resource Sharing), il peut utiliser JavaScript pour accéder à des ressources qui sont autrement protégées par la SOP (Same Origin Policy), qui empêche les sites de différentes origines d'accéder les uns aux autres.
Un bon exemple peut être réalisé en utilisant le gadget de désérialisation `SoapClient` en PHP. Cette classe est **vulnérable au CRLF** à l'intérieur du paramètre `user_agent` permettant d'**insérer de nouveaux en-têtes et contenu de corps**. Cependant, vous pouvez même être capable d'exploiter cette vulnérabilité pour **injecter une nouvelle requête HTTP :**
Vous pouvez injecter des en-têtes essentiels pour garantir que **le back-end maintient la connexion ouverte** après avoir répondu à la demande initiale :
Ensuite, **spécifiez une deuxième requête**. Ici, vous avez un **smuggling de requête** classique avec des **en-têtes/corps supplémentaires** ajoutés par le serveur après l'injection.\
Ou concevoir notre préfixe pour le combiner avec les déchets suivants et créer une deuxième requête complète afin de déclencher l'empoisonnement de la file d'attente des réponses.
Pour plus d'informations sur cette technique et les problèmes potentiels, [**consultez la source originale**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning).
Si une plateforme prend **des données d'une requête HTTP et les utilise sans les assainir** pour effectuer des **requêtes** vers un serveur **memcache**, un attaquant pourrait abuser de ce comportement pour **injecter de nouvelles commandes memcache**.
Par exemple, dans la vulnérabilité originellement découverte, les clés de cache étaient utilisées pour retourner l'IP et le port auxquels un utilisateur devrait se connecter, et les attaquants ont pu **injecter des commandes memcache** qui allaient **empoisonner le cache pour envoyer les détails des victimes** (noms d'utilisateur et mots de passe inclus) vers les serveurs de l'attaquant :
De plus, les chercheurs ont également découvert qu'ils pouvaient désynchroniser les réponses memcache pour envoyer l'IP et les ports des attaquants aux utilisateurs dont l'email n'était pas connu de l'attaquant :
L'impact des injections CRLF varie et inclut également tous les impacts du Cross-site Scripting jusqu'à la divulgation d'informations. Cela peut également désactiver certaines restrictions de sécurité comme les filtres XSS et la politique de même origine dans les navigateurs des victimes, les laissant vulnérables aux attaques malveillantes.
La meilleure technique de prévention est de ne pas utiliser directement les entrées des utilisateurs à l'intérieur des en-têtes de réponse. Si cela n'est pas possible, vous devriez toujours utiliser une fonction pour encoder les caractères spéciaux CRLF. Une autre bonne pratique de sécurité des applications web est de mettre à jour votre langage de programmation vers une version qui n'autorise pas l'injection de CR et LF dans les fonctions qui définissent les en-têtes HTTP.
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Si vous voulez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez-moi** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).