# XS-Search/XS-Leaks
Utilisez [****](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=xs-search) pour construire facilement et **automatiser des workflows** alimentés par les outils communautaires les plus avancés au monde.\ Accédez dès aujourd'hui à : {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=xs-search" %}
Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)! Autres façons de soutenir HackTricks : * 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 [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com) * Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family) * **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
## Informations de base XS-Search est une méthode utilisée pour **extraire des informations cross-origin** en exploitant des **vulnérabilités de canal latéral**. Les composants clés impliqués dans cette attaque comprennent : * **Site Web Vulnérable** : Le site Web cible à partir duquel les informations doivent être extraites. * **Site Web de l'Attaquant** : Le site Web malveillant créé par l'attaquant, que la victime visite, hébergeant l'exploit. * **Méthode d'Inclusion** : La technique utilisée pour incorporer le Site Web Vulnérable dans le Site Web de l'Attaquant (par exemple, window.open, iframe, fetch, balise HTML avec href, etc.). * **Technique de Fuite** : Techniques utilisées pour discerner les différences dans l'état du Site Web Vulnérable en fonction des informations recueillies par la méthode d'inclusion. * **États** : Les deux conditions potentielles du Site Web Vulnérable, que l'attaquant cherche à distinguer. * **Différences Détectables** : Variations observables sur lesquelles l'attaquant s'appuie pour déduire l'état du Site Web Vulnérable. ### Différences Détectables Plusieurs aspects peuvent être analysés pour différencier les états du Site Web Vulnérable : * **Code d'État** : Distinction entre **divers codes d'état de réponse HTTP** cross-origin, tels que les erreurs serveur, les erreurs client ou les erreurs d'authentification. * **Utilisation de l'API** : Identification de l'**utilisation des API Web** à travers les pages, révélant si une page cross-origin utilise une API Web JavaScript spécifique. * **Redirections** : Détection des navigations vers différentes pages, non seulement les redirections HTTP mais aussi celles déclenchées par JavaScript ou HTML. * **Contenu de la Page** : Observation des **variations dans le corps de la réponse HTTP** ou dans les sous-ressources de la page, telles que le **nombre de frames intégrées** ou les disparités de taille dans les images. * **En-tête HTTP** : Noter la présence ou éventuellement la valeur d'un **en-tête de réponse HTTP spécifique**, y compris des en-têtes comme X-Frame-Options, Content-Disposition et Cross-Origin-Resource-Policy. * **Chronométrage** : Noter les disparités de temps cohérentes entre les deux états. ### Méthodes d'Inclusion * **Éléments HTML** : HTML offre divers éléments pour **l'inclusion de ressources cross-origin**, comme les feuilles de style, les images ou les scripts, obligeant le navigateur à demander une ressource non-HTML. Une compilation des éléments HTML potentiels à cet effet peut être trouvée à [https://github.com/cure53/HTTPLeaks](https://github.com/cure53/HTTPLeaks). * **Cadres** : Des éléments tels que **iframe**, **object** et **embed** peuvent intégrer directement des ressources HTML dans la page de l'attaquant. Si la page **manque de protection de cadrage**, JavaScript peut accéder à l'objet window de la ressource encadrée via la propriété contentWindow. * **Pop-ups** : La méthode **`window.open`** ouvre une ressource dans un nouvel onglet ou une nouvelle fenêtre, fournissant une **poignée de fenêtre** pour que JavaScript interagisse avec les méthodes et propriétés suivant le SOP. Les pop-ups, souvent utilisés dans la connexion unique, contournent les restrictions de cadrage et de cookies d'une ressource cible. Cependant, les navigateurs modernes restreignent la création de pop-ups à certaines actions de l'utilisateur. * **Requêtes JavaScript** : JavaScript permet des requêtes directes vers des ressources cibles en utilisant des **XMLHttpRequests** ou l'**API Fetch**. Ces méthodes offrent un contrôle précis sur la requête, comme choisir de suivre les redirections HTTP. ### Techniques de Fuite * **Gestionnaire d'Événements** : Une technique de fuite classique dans les XS-Leaks, où les gestionnaires d'événements comme **onload** et **onerror** fournissent des informations sur le succès ou l'échec du chargement de la ressource. * **Messages d'Erreur** : Les exceptions JavaScript ou les pages d'erreur spéciales peuvent fournir des informations de fuite soit directement à partir du message d'erreur, soit en différenciant sa présence et son absence. * **Limites Globales** : Les limitations physiques d'un navigateur, comme la capacité mémoire ou d'autres limites de navigateur imposées, peuvent indiquer quand un seuil est atteint, servant de technique de fuite. * **État Global** : Les interactions détectables avec les **états globaux des navigateurs** (par exemple, l'interface Historique) peuvent être exploitées. Par exemple, le **nombre d'entrées** dans l'historique d'un navigateur peut fournir des indices sur les pages cross-origin. * **API de Performance** : Cette API fournit des **détails de performance de la page actuelle**, y compris le chronométrage réseau pour le document et les ressources chargées, permettant des inférences sur les ressources demandées. * **Attributs Lisibles** : Certains attributs HTML sont **lisibles cross-origin** et peuvent être utilisés comme technique de fuite. Par exemple, la propriété `window.frame.length` permet à JavaScript de compter les frames inclus dans une page Web cross-origin. ## Outil XSinator & Article XSinator est un outil automatique pour **vérifier les navigateurs contre plusieurs XS-Leaks connus** expliqués dans son article : [**https://xsinator.com/paper.pdf**](https://xsinator.com/paper.pdf) Vous pouvez **accéder à l'outil sur** [**https://xsinator.com/**](https://xsinator.com/) {% hint style="warning" %} **XS-Leaks Exclus** : Nous avons dû exclure les XS-Leaks qui reposent sur les **travailleurs de service** car ils interféreraient avec d'autres fuites dans XSinator. De plus, nous avons choisi d'**exclure les XS-Leaks qui reposent sur des erreurs de configuration et des bugs dans une application Web spécifique**. Par exemple, les mauvaises configurations de partage de ressources CrossOrigin (CORS), les fuites de postMessage ou les scripts entre sites. De plus, nous avons exclu les XS-Leaks basés sur le temps car ils souffrent souvent d'être lents, bruyants et imprécis. {% endhint %}
\ Utilisez [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=xs-search) pour construire facilement et **automatiser des workflows** alimentés par les outils communautaires les plus avancés au monde.\ Accédez dès aujourd'hui à : {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=xs-search" %} ## **Techniques basées sur le timing** Certains des techniques suivantes vont utiliser le timing comme partie du processus pour détecter les différences dans les états possibles des pages web. Il existe différentes façons de mesurer le temps dans un navigateur web. **Horloges**: L'API [performance.now()](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) permet aux développeurs d'obtenir des mesures de timing haute résolution.\ Il existe un nombre considérable d'API que les attaquants peuvent abuser pour créer des horloges implicites : [Broadcast Channel API](https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API), [Message Channel API](https://developer.mozilla.org/en-US/docs/Web/API/MessageChannel), [requestAnimationFrame](https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame), [setTimeout](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout), animations CSS, et d'autres.\ Pour plus d'informations : [https://xsleaks.dev/docs/attacks/timing-attacks/clocks](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/). ## Techniques des gestionnaires d'événements ### Onload/Onerror * **Méthodes d'inclusion** : Cadres, Éléments HTML * **Différence détectable** : Code d'état * **Plus d'informations** : [https://www.usenix.org/conference/usenixsecurity19/presentation/staicu](https://www.usenix.org/conference/usenixsecurity19/presentation/staicu), [https://xsleaks.dev/docs/attacks/error-events/](https://xsleaks.dev/docs/attacks/error-events/) * **Résumé** : si on essaie de charger une ressource, les événements onerror/onload sont déclenchés lorsque la ressource est chargée avec succès/échec, il est possible de déterminer le code d'état. * **Exemple de code** : [https://xsinator.com/testing.html#Event%20Handler%20Leak%20(Script)](https://xsinator.com/testing.html#Event%20Handler%20Leak%20\(Script\)) {% content-ref url="cookie-bomb-+-onerror-xs-leak.md" %} [cookie-bomb-+-onerror-xs-leak.md](cookie-bomb-+-onerror-xs-leak.md) {% endcontent-ref %} L'exemple de code tente de **charger des objets scripts depuis JS**, mais **d'autres balises** telles que des objets, des feuilles de style, des images, des audios pourraient également être utilisées. De plus, il est également possible d'injecter directement la **balise** et de déclarer les événements `onload` et `onerror` à l'intérieur de la balise (au lieu de l'injecter depuis JS). Il existe également une version de cette attaque sans script: ```html ``` Dans ce cas, si `example.com/404` n'est pas trouvé, `attacker.com/?error` sera chargé. ### Timing de chargement * **Méthodes d'inclusion**: Éléments HTML * **Différence détectable**: Timing (généralement due au contenu de la page, au code d'état) * **Plus d'informations**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events) * **Résumé:** L'API [**performance.now()**](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) peut être utilisée pour mesurer le temps nécessaire pour effectuer une requête. Cependant, d'autres horloges pourraient être utilisées, telles que l'API [**PerformanceLongTaskTiming**](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceLongTaskTiming) qui peut identifier les tâches s'exécutant pendant plus de 50 ms. * **Exemple de code**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events) un autre exemple dans: {% content-ref url="performance.now-example.md" %} [performance.now-example.md](performance.now-example.md) {% endcontent-ref %} #### Timing de chargement + Tâche lourde forcée Cette technique est similaire à la précédente, mais l'**attaquant** va également **forcer** une action à prendre un **temps significatif** lorsque la **réponse est positive ou négative** et mesurer ce temps. {% content-ref url="performance.now-+-force-heavy-task.md" %} [performance.now-+-force-heavy-task.md](performance.now-+-force-heavy-task.md) {% endcontent-ref %} ### Timing de déchargement/avant le déchargement * **Méthodes d'inclusion**: Cadres * **Différence détectable**: Timing (généralement due au contenu de la page, au code d'état) * **Plus d'informations**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events) * **Résumé:** L'horloge [SharedArrayBuffer](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#sharedarraybuffer-and-web-workers) peut être utilisée pour mesurer le temps nécessaire pour effectuer une requête. D'autres horloges pourraient être utilisées. * **Exemple de code**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events) Le temps nécessaire pour récupérer une ressource peut être mesuré en utilisant les événements [`unload`](https://developer.mozilla.org/en-US/docs/Web/API/Window/unload\_event) et [`beforeunload`](https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload\_event). L'événement **`beforeunload`** est déclenché lorsque le navigateur s'apprête à accéder à une nouvelle page, tandis que l'événement **`unload`** se produit lorsque la navigation a effectivement lieu. La différence de temps entre ces deux événements peut être calculée pour déterminer la **durée pendant laquelle le navigateur a passé à récupérer la ressource**. ### Timing de cadre sandbox + onload * **Méthodes d'inclusion**: Cadres * **Différence détectable**: Timing (généralement due au contenu de la page, au code d'état) * **Plus d'informations**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks) * **Résumé:** L'API [performance.now()](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) peut être utilisée pour mesurer le temps nécessaire pour effectuer une requête. D'autres horloges pourraient être utilisées. * **Exemple de code**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks) Il a été observé que en l'absence de [Protections de cadrage](https://xsleaks.dev/docs/defenses/opt-in/xfo/), le temps nécessaire pour qu'une page et ses sous-ressources se chargent sur le réseau peut être mesuré par un attaquant. Cette mesure est généralement possible car le gestionnaire `onload` d'un iframe est déclenché uniquement après l'achèvement du chargement des ressources et de l'exécution JavaScript. Pour contourner la variabilité introduite par l'exécution de script, un attaquant pourrait utiliser l'attribut [`sandbox`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) dans la balise ` ``` ### #ID + erreur + onload * **Méthodes d'inclusion**: Cadres * **Différence détectable**: Contenu de la page * **Plus d'informations**: * **Résumé**: Si vous pouvez provoquer une erreur sur la page lorsque le contenu correct est consulté et la charger correctement lorsque n'importe quel contenu est consulté, alors vous pouvez créer une boucle pour extraire toutes les informations sans mesurer le temps. * **Exemple de code**: Supposez que vous puissiez **insérer** la **page** qui contient le **contenu secret** **à l'intérieur d'un Iframe**. Vous pouvez **faire en sorte que la victime recherche** le fichier contenant "_**flag**_" en utilisant un **Iframe** (en exploitant par exemple une CSRF). À l'intérieur de l'Iframe, vous savez que l'_**événement onload**_ sera **exécuté au moins une fois**. Ensuite, vous pouvez **changer** l'**URL** de l'**iframe** en changeant uniquement le **contenu** du **hash** dans l'URL. Par exemple: 1. **URL1**: www.attacker.com/xssearch#try1 2. **URL2**: www.attacker.com/xssearch#try2 Si la première URL a été **chargée avec succès**, alors, lorsque vous **changez** la partie **hash** de l'URL, l'événement **onload** ne sera **pas déclenché** à nouveau. Mais **si** la page a rencontré une sorte d'**erreur** lors du **chargement**, alors, l'événement **onload** sera **déclenché à nouveau**. Ainsi, vous pouvez **distinguer** une page **chargée correctement** d'une page qui a une **erreur** lorsqu'elle est consultée. ### Exécution de Javascript * **Méthodes d'inclusion**: Cadres * **Différence détectable**: Contenu de la page * **Plus d'informations**: * **Résumé**: Si la **page** **renvoie** le **contenu sensible**, ou un **contenu** qui peut être **contrôlé** par l'utilisateur. L'utilisateur pourrait définir un **code JS valide dans le cas négatif**, et **charger** chaque essai à l'intérieur des balises **`