# HTTP Response Smuggling / Desync {% hint style="success" %} Apprenez et pratiquez le hacking AWS :[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Apprenez et pratiquez le hacking GCP : [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) ! * **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez-nous sur** **Twitter** 🐩 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Partagez des astuces de hacking en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dĂ©pĂŽts github.
{% endhint %} **La technique de ce post a Ă©tĂ© tirĂ©e de la vidĂ©o :** [**https://www.youtube.com/watch?v=suxDcYViwao\&t=1343s**](https://www.youtube.com/watch?v=suxDcYViwao\&t=1343s) ## DĂ©synchronisation de la file d'attente des requĂȘtes HTTP Tout d'abord, cette technique **abuse d'une vulnĂ©rabilitĂ© de HTTP Request Smuggling**, donc vous devez savoir ce que c'est : La **principale** **diffĂ©rence** entre cette technique et un smuggling HTTP Request commun est que **au lieu** de **cibler** la **requĂȘte** de la **victime** **en ajoutant un prĂ©fixe**, nous allons **fuiter ou modifier la rĂ©ponse que la victime reçoit**. Cela se fait en, au lieu d'envoyer 1 requĂȘte et demie pour abuser du HTTP Request smuggling, **envoyer 2 requĂȘtes complĂštes pour dĂ©synchroniser la file d'attente des rĂ©ponses des proxies**. C'est parce que nous allons pouvoir **dĂ©synchroniser la file d'attente des rĂ©ponses** afin que la **rĂ©ponse** de la **requĂȘte** **lĂ©gitime** de la **victime soit envoyĂ©e Ă  l'attaquant**, ou en **injectant du contenu contrĂŽlĂ© par l'attaquant dans la rĂ©ponse Ă  la victime**. ### DĂ©synchronisation du pipeline HTTP HTTP/1.1 permet de demander des **ressources diffĂ©rentes sans avoir besoin d'attendre les prĂ©cĂ©dentes**. Par consĂ©quent, s'il y a un **proxy** au **milieu**, c'est la tĂąche des proxies de **maintenir une correspondance synchronisĂ©e des requĂȘtes envoyĂ©es au backend et des rĂ©ponses provenant de celui-ci**. Cependant, il y a un problĂšme de dĂ©synchronisation de la file d'attente des rĂ©ponses. Si un attaquant envoie une attaque de HTTP Response smuggling et que les rĂ©ponses Ă  la **requĂȘte initiale et Ă  celle smuggled sont rĂ©pondues immĂ©diatement**, la rĂ©ponse smuggled ne sera pas insĂ©rĂ©e dans la file d'attente de la rĂ©ponse de la victime mais sera **juste rejetĂ©e comme une erreur**. ![](<../.gitbook/assets/image (633).png>) Par consĂ©quent, il est nĂ©cessaire que la **requĂȘte smuggled** **prenne plus de temps Ă  ĂȘtre traitĂ©e** Ă  l'intĂ©rieur du serveur backend. Ainsi, au moment oĂč la requĂȘte smuggled est traitĂ©e, la communication avec l'attaquant sera terminĂ©e. Si dans cette situation spĂ©cifique une **victime a envoyĂ© une requĂȘte** et que la **requĂȘte smuggled est rĂ©pondue avant** la requĂȘte lĂ©gitime, la **rĂ©ponse smuggled sera envoyĂ©e Ă  la victime**. Par consĂ©quent, l'attaquant va **contrĂŽler la requĂȘte "effectuĂ©e" par la victime**. De plus, si l'**attaquant effectue ensuite une requĂȘte** et que la **rĂ©ponse lĂ©gitime** Ă  la **requĂȘte** de la **victime** est **rĂ©pondue** **avant** la requĂȘte de l'attaquant. La **rĂ©ponse Ă  la victime va ĂȘtre envoyĂ©e Ă  l'attaquant**, **volant** la rĂ©ponse Ă  la victime (qui peut contenir par exemple l'en-tĂȘte **Set-Cookie**). ![](<../.gitbook/assets/image (1020).png>) ![](<../.gitbook/assets/image (719).png>) ### Injections imbriquĂ©es multiples Une autre **diffĂ©rence intĂ©ressante** avec le **HTTP Request Smuggling** commun est que, dans une attaque de smuggling commune, le **but** est de **modifier le dĂ©but de la requĂȘte de la victime** afin qu'elle effectue une action inattendue. Dans une **attaque de HTTP Response smuggling**, comme vous **envoyez des requĂȘtes complĂštes**, vous pouvez **injecter dans une charge utile des dizaines de rĂ©ponses** qui vont **dĂ©synchroniser des dizaines d'utilisateurs** qui vont **recevoir** les **rĂ©ponses injectĂ©es**. En plus de pouvoir **distribuer plus facilement des dizaines d'exploits** parmi des utilisateurs lĂ©gitimes, cela pourrait Ă©galement ĂȘtre utilisĂ© pour provoquer un **DoS** sur le serveur. ### Organisation de l'exploit Comme expliquĂ© prĂ©cĂ©demment, pour abuser de cette technique, il est nĂ©cessaire que le **premier message smuggled** dans le serveur **prenne beaucoup de temps Ă  ĂȘtre traitĂ©**. Cette **requĂȘte consommatrice de temps est suffisante** si nous voulons juste **essayer de voler la rĂ©ponse de la victime.** Mais si vous voulez effectuer un exploit plus complexe, cela sera une structure commune pour l'exploit. Tout d'abord la **requĂȘte initiale** abusant du **HTTP** **Request** **smuggling**, puis la **requĂȘte consommatrice de temps** et ensuite **1 ou plusieurs requĂȘtes de charge utile** dont les rĂ©ponses seront envoyĂ©es aux victimes. ## Abus de la dĂ©synchronisation de la file d'attente des rĂ©ponses HTTP ### Capturer les requĂȘtes d'autres utilisateurs Comme avec les charges utiles connues de HTTP Request Smuggling, vous pouvez **voler la requĂȘte de la victime** avec une diffĂ©rence importante : Dans ce cas, vous avez juste besoin que le **contenu envoyĂ© soit reflĂ©tĂ© dans la rĂ©ponse**, **aucun stockage persistant** n'est nĂ©cessaire. Tout d'abord, l'attaquant envoie une charge utile contenant une **requĂȘte POST finale avec le paramĂštre rĂ©flĂ©chi** Ă  la fin et une grande Content-Length. ![](<../.gitbook/assets/image (1053).png>) Ensuite, une fois que la **requĂȘte initiale** (bleue) a Ă©tĂ© **traitĂ©e** et **pendant** que la **requĂȘte lente** est en cours de traitement (jaune), la **prochaine requĂȘte qui arrive d'une victime** va ĂȘtre **ajoutĂ©e dans la file d'attente juste aprĂšs le paramĂštre rĂ©flĂ©chi** : ![](<../.gitbook/assets/image (794).png>) Ensuite, la **victime** va **recevoir** la **rĂ©ponse Ă  la requĂȘte lente** et si entre-temps l'**attaquant** **envoie** **une autre** **requĂȘte**, la **rĂ©ponse de la requĂȘte de contenu rĂ©flĂ©chi sera envoyĂ©e Ă  lui**. ## DĂ©synchronisation de la rĂ©ponse Jusqu'Ă  prĂ©sent, nous avons appris comment abuser des attaques de HTTP Request Smuggling pour **contrĂŽler** la **requĂȘte** **dont** la **rĂ©ponse** un **client** va **recevoir** et comment vous pouvez ensuite **voler la rĂ©ponse qui Ă©tait destinĂ©e Ă  la victime**. Mais il est encore possible de **dĂ©synchroniser encore** plus les rĂ©ponses. Il existe des requĂȘtes intĂ©ressantes comme la requĂȘte **HEAD** qui sont spĂ©cifiĂ©es pour ne pas avoir **de contenu Ă  l'intĂ©rieur du corps des rĂ©ponses** et qui devraient (doivent) **contenir la Content-Length** de la requĂȘte comme **si c'Ă©tait une requĂȘte GET**. Par consĂ©quent, si un attaquant **injecte** une **requĂȘte HEAD**, comme dans ces images : ![](<../.gitbook/assets/image (1107).png>) Alors, **une fois que la bleue est rĂ©pondue Ă  l'attaquant**, la prochaine requĂȘte de la victime va ĂȘtre introduite dans la file d'attente : ![](<../.gitbook/assets/image (999).png>) Ensuite, la **victime** va **recevoir** la **rĂ©ponse** de la **requĂȘte HEAD**, qui va **contenir une Content-Length mais aucun contenu du tout**. Par consĂ©quent, le proxy **ne va pas envoyer cette rĂ©ponse** Ă  la victime, mais va **attendre** un **contenu**, qui en rĂ©alitĂ© va ĂȘtre la **rĂ©ponse Ă  la requĂȘte jaune** (Ă©galement injectĂ©e par l'attaquant) : ![](<../.gitbook/assets/image (735).png>) ### Confusion de contenu En suivant l'exemple prĂ©cĂ©dent, sachant que vous pouvez **contrĂŽler le corps** de la requĂȘte dont la rĂ©ponse va ĂȘtre reçue par la victime et qu'une **rĂ©ponse HEAD** **contient gĂ©nĂ©ralement dans ses en-tĂȘtes le **Content-Type et le Content-Length**, vous pouvez **envoyer une requĂȘte comme la suivante** pour **provoquer un XSS** chez la victime sans que la page soit vulnĂ©rable au XSS : ![](<../.gitbook/assets/image (688).png>) ### Poisoning de cache En abusant de l'attaque de dĂ©synchronisation de rĂ©ponse commentĂ©e prĂ©cĂ©demment, **si le cache stocke la rĂ©ponse Ă  la requĂȘte effectuĂ©e par la victime et que cette rĂ©ponse est une rĂ©ponse injectĂ©e provoquant un XSS, alors le cache est empoisonnĂ©**. RequĂȘte malveillante contenant la charge utile XSS : ![](<../.gitbook/assets/image (614).png>) RĂ©ponse malveillante Ă  la victime qui contient l'en-tĂȘte indiquant au cache de stocker la rĂ©ponse : ![](<../.gitbook/assets/image (566).png>) {% hint style="warning" %} Notez que dans ce cas, si la **"victime" est l'attaquant**, il peut maintenant effectuer **un empoisonnement de cache sur des URL arbitraires** car il peut **contrĂŽler l'URL qui va ĂȘtre mise en cache** avec la rĂ©ponse malveillante. {% endhint %} ### Tromperie de cache web Cette attaque est similaire Ă  la prĂ©cĂ©dente, mais **au lieu d'injecter une charge utile dans le cache, l'attaquant va mettre en cache des informations de la victime Ă  l'intĂ©rieur du cache :** ![](<../.gitbook/assets/image (991).png>) ### Division de rĂ©ponse Le **but** de cette attaque est d'abuser Ă  nouveau de la **dĂ©synchronisation** de la **rĂ©ponse** afin de **faire en sorte que le proxy envoie une rĂ©ponse gĂ©nĂ©rĂ©e Ă  100 % par l'attaquant**. Pour y parvenir, l'attaquant doit trouver un point de terminaison de l'application web qui **reflĂšte certaines valeurs Ă  l'intĂ©rieur de la rĂ©ponse** et **connaĂźtre la longueur de contenu de la rĂ©ponse HEAD**. Il enverra un **exploit** comme : ![](<../.gitbook/assets/image (911).png>) AprĂšs que la premiĂšre requĂȘte soit rĂ©solue et renvoyĂ©e Ă  l'attaquant, la **requĂȘte de la victime est ajoutĂ©e dans la file d'attente** : ![](<../.gitbook/assets/image (737).png>) La victime recevra comme rĂ©ponse la **rĂ©ponse HEAD + le contenu de la rĂ©ponse de la deuxiĂšme requĂȘte (contenant une partie des donnĂ©es rĂ©flĂ©chies) :** ![](<../.gitbook/assets/image (356).png>) Cependant, notez comment les **donnĂ©es rĂ©flĂ©chies avaient une taille selon la Content-Length** de la **rĂ©ponse HEAD** qui **a gĂ©nĂ©rĂ© une rĂ©ponse HTTP valide dans la file d'attente des rĂ©ponses**. Par consĂ©quent, la **prochaine requĂȘte de la deuxiĂšme victime** va **recevoir** comme **rĂ©ponse quelque chose complĂštement fabriquĂ© par l'attaquant**. Comme la rĂ©ponse est complĂštement fabriquĂ©e par l'attaquant, il peut Ă©galement **faire en sorte que le proxy mette en cache la rĂ©ponse**. {% hint style="success" %} Apprenez et pratiquez le hacking AWS :[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Apprenez et pratiquez le hacking GCP : [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) ! * **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez-nous sur** **Twitter** 🐩 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Partagez des astuces de hacking en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dĂ©pĂŽts github.
{% endhint %}