mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 13:13:41 +00:00
71 lines
8.6 KiB
Markdown
71 lines
8.6 KiB
Markdown
# Contamination de connexion HTTP
|
|
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
|
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|
|
|
</details>
|
|
|
|
Les navigateurs Web utilisent la [**cohérence de connexion HTTP**](https://daniel.haxx.se/blog/2016/08/18/http2-connection-coalescing), qui leur permet de **réutiliser** une seule **connexion HTTP/2+** pour les demandes allant à **différents sites Web**, à condition que les sites **se résolvent à la même adresse IP** et utilisent un certificat TLS valide pour les deux noms d'hôte.
|
|
|
|
Le **routage de la première demande** est un comportement de proxy inverse dangereux où le **proxy analyse la première demande** sur une connexion pour déterminer **quel backend** y acheminer, puis **envoie** toutes les **demandes suivantes** sur cette connexion au **même backend**.
|
|
|
|
**La cohérence de connexion et le routage de la première demande ne fonctionnent pas bien ensemble**. Par exemple, imaginez que secure.example.com et wordpress.example.com sont tous deux derrière un proxy inverse utilisant un certificat valide pour \*.example.com :
|
|
```shell-session
|
|
$ nslookup wordpress.example.com
|
|
52.16.179.7 // reverse proxy that supports HTTP/2 and does first-request routing
|
|
|
|
$ nslookup secure.example.com
|
|
52.16.179.7 // same reverse proxy
|
|
|
|
$ openssl s_client -connect x.portswigger-labs.net:443
|
|
subject=/CN=*.example.com // wildcard TLS certificate
|
|
```
|
|
Si un navigateur tente d'envoyer une demande à **wordpress.example.com** suivie de **secure.example.com**, la fusion de la connexion du navigateur forcera **les deux demandes à utiliser une seule connexion** vers le frontal. Le routage de la première demande entraînera la **demande de secure.example.com étant incorrectement routée vers le backend de WordPress**. Cela signifie que si vous trouvez une [XSS](https://portswigger.net/web-security/cross-site-scripting) sur wordpress.example.com, vous pouvez l'utiliser pour compromettre secure.example.com !
|
|
```javascript
|
|
// create HTTP/2+ connection
|
|
fetch('https://wordpress.example.com/', {credentials: 'include'})
|
|
|
|
// connection coalescing will force this down the same connection...
|
|
// ...leading to the front-end misrouting it to WordPress
|
|
// the browser thinks our injected JS is coming from secure.example.com
|
|
// exposing saved passwords, cookies, etc.
|
|
location='https://secure.example.com/plugin/x?q=<script>stealPasswords()'
|
|
```
|
|
Vous pouvez **explorer la coalescence de connexion par vous-même** en utilisant le **graphique de chronologie sous l'onglet Réseau des outils de développement de Chrome** (ou en utilisant WireShark si vous êtes masochiste). Émettez des paires de requêtes en utilisant fetch() et voyez si le graphique montre le temps passé sur la «connexion initiale» pour la deuxième requête, et si la colonne ID de connexion correspond:
|
|
|
|
{% code overflow="wrap" %}
|
|
```javascript
|
|
fetch('//sub1.hackxor.net/', {mode: 'no-cors', credentials: 'include'}).then(()=>{ fetch('//sub2.hackxor.net/', {mode: 'no-cors', credentials: 'include'}) })
|
|
```
|
|
{% endcode %}
|
|
|
|
<figure><img src="../.gitbook/assets/image (1) (1) (3).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
Je n'ai pas investi le temps nécessaire pour explorer cette menace en profondeur ou la scanner dans la nature car je crois qu'elle est actuellement rare pour deux raisons. Premièrement, le routage de la première requête est relativement rare et la complexité de la mise en œuvre de HTTP/2 signifie qu'il n'y a qu'un petit nombre de serveurs HTTP/2 uniques par rapport à HTTP/1.1. Deuxièmement, la coalescence de connexion signifie que les serveurs HTTP/2 effectuant le routage de la première requête peuvent occasionnellement se casser pour les visiteurs légitimes, de sorte que les propriétaires peuvent finir par corriger la vulnérabilité sans encouragement de l'attaquant.
|
|
|
|
Cela dit, ce n'est pas tout à fait une mauvaise nouvelle pour les attaquants. **HTTP/3 propose** [**de supprimer l'exigence de correspondance d'adresse IP**](https://www.rfc-editor.org/rfc/rfc9114.html#name-connection-reuse)**, ce qui exposera tout le monde avec une interface frontale qui utilise le routage de la première requête et dispose d'un certificat valide pour plusieurs hôtes**.
|
|
|
|
Cela crée également un deuxième risque qui n'est pas lié au routage de la première requête - cela signifie qu'un **serveur compromis avec un certificat générique ne nécessite plus d'exploitation MITM**. En effet, cela augmente considérablement le nombre d'acteurs malveillants qui pourraient en profiter.
|
|
|
|
Pour éviter ces risques avant qu'ils ne deviennent une réalité, assurez-vous que vos serveurs proxy inverses ne réalisent pas le routage de la première requête. Vous pouvez tester cela manuellement dans Repeater en activant la réutilisation de connexion HTTP/1 et HTTP/2, et également le scanner en utilisant l'attaque 'Connection-State' dans [HTTP Request Smuggler](https://github.com/PortSwigger/http-request-smuggler). De plus, sachez que bien que les certificats TLS génériques n'aient jamais été idéaux, HTTP/3 signifie qu'un serveur compromis avec un certificat générique peut maintenant être utilisé pour attaquer des domaines frères sans MITM actif.
|
|
|
|
Ces nouvelles menaces continuent la tendance actuelle de l'infrastructure web à descendre dans un enchevêtrement complexe où une faiblesse sur un site individuel a de nombreux effets secondaires non évidents sur la sécurité du système global. Il sera intéressant de voir comment ces risques se joueront en pratique.
|
|
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
|
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|
|
|
</details>
|