# XS-Search/XS-Leaks
Usa [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) per creare facilmente e **automatizzare flussi di lavoro** supportati dagli strumenti della comunità più avanzati al mondo.\ Ottieni l'accesso oggi: {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
Impara l'hacking di AWS da zero a eroe con htARTE (Esperto Red Team AWS di HackTricks)! Altri modi per supportare HackTricks: * Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PACCHETTI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com) * Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione esclusiva di [**NFT**](https://opensea.io/collection/the-peass-family) * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
## Informazioni di Base XS-Search è un metodo utilizzato per **estrarre informazioni cross-origin** sfruttando **vulnerabilità di canale laterale**. I componenti chiave coinvolti in questo attacco includono: * **Web Vulnerabile**: Il sito web di destinazione da cui si intende estrarre informazioni. * **Web dell'Attaccante**: Il sito web malevolo creato dall'attaccante, che la vittima visita, ospitante l'exploit. * **Metodo di Inclusione**: La tecnica impiegata per incorporare il Web Vulnerabile nel Web dell'Attaccante (ad esempio, window.open, iframe, fetch, tag HTML con href, ecc.). * **Tecnica di Leak**: Tecniche utilizzate per discernere le differenze nello stato del Web Vulnerabile basate sulle informazioni raccolte attraverso il metodo di inclusione. * **Stati**: Le due condizioni potenziali del Web Vulnerabile, che l'attaccante mira a distinguere. * **Differenze Rilevabili**: Variazioni osservabili su cui l'attaccante si basa per inferire lo stato del Web Vulnerabile. ### Differenze Rilevabili Diversi aspetti possono essere analizzati per differenziare gli stati del Web Vulnerabile: * **Codice di Stato**: Distinguere tra **vari codici di stato di risposta HTTP** cross-origin, come errori del server, errori del client o errori di autenticazione. * **Utilizzo delle API**: Identificare **l'uso delle API Web** tra le pagine, rivelando se una pagina cross-origin utilizza una specifica API Web JavaScript. * **Reindirizzamenti**: Rilevare le navigazioni verso pagine diverse, non solo reindirizzamenti HTTP ma anche quelli attivati da JavaScript o HTML. * **Contenuto della Pagina**: Osservare **variazioni nel corpo della risposta HTTP** o nelle risorse sottopagine, come il **numero di frame incorporati** o disparità di dimensioni nelle immagini. * **Intestazione HTTP**: Notare la presenza o eventualmente il valore di un **intestazione di risposta HTTP specifica**, inclusi intestazioni come X-Frame-Options, Content-Disposition e Cross-Origin-Resource-Policy. * **Temporizzazione**: Notare disparità di tempo costanti tra i due stati. ### Metodi di Inclusione * **Elementi HTML**: HTML offre vari elementi per **l'inclusione di risorse cross-origin**, come fogli di stile, immagini o script, costringendo il browser a richiedere una risorsa non HTML. Una raccolta di potenziali elementi HTML a tale scopo può essere trovata su [https://github.com/cure53/HTTPLeaks](https://github.com/cure53/HTTPLeaks). * **Frame**: Elementi come **iframe**, **object** e **embed** possono incorporare risorse HTML direttamente nella pagina dell'attaccante. Se la pagina **manca di protezione del framing**, JavaScript può accedere all'oggetto window della risorsa incorniciata tramite la proprietà contentWindow. * **Pop-up**: Il metodo **`window.open`** apre una risorsa in una nuova scheda o finestra, fornendo un **manico della finestra** per consentire a JavaScript di interagire con metodi e proprietà seguendo il SOP. I pop-up, spesso utilizzati nell'accesso singolo, eludono le restrizioni di framing e cookie di una risorsa di destinazione. Tuttavia, i browser moderni limitano la creazione di pop-up a determinate azioni dell'utente. * **Richieste JavaScript**: JavaScript consente richieste dirette alle risorse di destinazione utilizzando **XMLHttpRequests** o il **Fetch API**. Questi metodi offrono un controllo preciso sulla richiesta, come optare per seguire i reindirizzamenti HTTP. ### Tecniche di Leak * **Gestore di Eventi**: Una tecnica di leak classica in XS-Leaks, dove i gestori di eventi come **onload** e **onerror** forniscono informazioni sul successo o fallimento del caricamento della risorsa. * **Messaggi di Errore**: Le eccezioni JavaScript o pagine di errore speciali possono fornire informazioni di leak direttamente dal messaggio di errore o differenziando tra la sua presenza e assenza. * **Limiti Globali**: Limiti fisici di un browser, come la capacità di memoria o altri limiti del browser imposti, possono segnalare quando viene raggiunto un limite, fungendo da tecnica di leak. * **Stato Globale**: Interazioni rilevabili con gli **stati globali dei browser** (ad esempio, l'interfaccia History) possono essere sfruttate. Ad esempio, il **numero di voci** nella cronologia di un browser può offrire indizi sulle pagine cross-origin. * **API di Performance**: Questa API fornisce **dettagli sulle prestazioni della pagina corrente**, inclusi i tempi di rete per il documento e le risorse caricate, consentendo inferenze sulle risorse richieste. * **Attributi Leggibili**: Alcuni attributi HTML sono **leggibili cross-origin** e possono essere utilizzati come tecnica di leak. Ad esempio, la proprietà `window.frame.length` consente a JavaScript di contare i frame inclusi in una pagina web cross-origin. ## Strumento XSinator & Paper XSinator è uno strumento automatico per **verificare i browser contro diversi XS-Leaks noti** spiegati nel suo paper: [**https://xsinator.com/paper.pdf**](https://xsinator.com/paper.pdf) Puoi **accedere allo strumento su** [**https://xsinator.com/**](https://xsinator.com/) {% hint style="warning" %} **XS-Leaks Esclusi**: Abbiamo dovuto escludere XS-Leaks che si basano su **service worker** in quanto interferirebbero con altri leak in XSinator. Inoltre, abbiamo scelto di **escludere XS-Leaks che si basano su configurazioni errate e bug in un'applicazione web specifica**. Ad esempio, configurazioni errate di Cross-Origin Resource Sharing (CORS), perdite di postMessage o Cross-Site Scripting. Inoltre, abbiamo escluso XS-Leaks basati sul tempo poiché spesso soffrono di lentezza, rumore e inesattezza. {% endhint %}
\ Usa [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) per creare facilmente e **automatizzare flussi di lavoro** supportati dagli strumenti della comunità più avanzati al mondo.\ Ottieni l'accesso oggi: {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} ## **Tecniche basate sul tempo** Alcune delle seguenti tecniche utilizzeranno il tempo come parte del processo per rilevare differenze nei possibili stati delle pagine web. Ci sono diversi modi per misurare il tempo in un browser web. **Orologi**: L'API [performance.now()](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) consente agli sviluppatori di ottenere misurazioni temporali ad alta risoluzione.\ Esistono un considerevole numero di API che gli attaccanti possono sfruttare per creare orologi impliciti: [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), animazioni CSS e altri.\ Per ulteriori informazioni: [https://xsleaks.dev/docs/attacks/timing-attacks/clocks](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/). ## Tecniche degli Event Handler ### Onload/Onerror * **Metodi di Inclusione**: Frame, Elementi HTML * **Differenza Rilevabile**: Codice di Stato * **Ulteriori informazioni**: [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/) * **Sommario**: se si tenta di caricare una risorsa e vengono attivati gli eventi onerror/onload con il caricamento riuscito/non riuscito della risorsa, è possibile individuare il codice di stato. * **Esempio di codice**: [https://xsinator.com/testing.html#Event%20Handler%20Leak%20(Script)](https://xsinator.com/testing.html#Event%20Handler%20Leak%20\(Script\)) {% content-ref url="xs-search/cookie-bomb-+-onerror-xs-leak.md" %} [cookie-bomb-+-onerror-xs-leak.md](xs-search/cookie-bomb-+-onerror-xs-leak.md) {% endcontent-ref %} L'esempio di codice cerca di **caricare oggetti script da JS**, ma **altri tag** come oggetti, fogli di stile, immagini, audio potrebbero essere utilizzati. Inoltre, è anche possibile iniettare direttamente il **tag** e dichiarare gli eventi `onload` e `onerror` all'interno del tag (anziché iniettarlo da JS). Esiste anche una versione di questo attacco senza script: ```html ``` In questo caso se `example.com/404` non viene trovato, verrà caricato `attacker.com/?error`. ### Tempistica Onload * **Metodi di Inclusione**: Elementi HTML * **Differenza Rilevabile**: Temporizzazione (generalmente dovuta al Contenuto della Pagina, Codice di Stato) * **Ulteriori informazioni**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events) * **Sommario:** L'API [**performance.now()**](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) può essere utilizzata per misurare quanto tempo impiega a eseguire una richiesta. Tuttavia, potrebbero essere utilizzati altri orologi, come l'API [**PerformanceLongTaskTiming**](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceLongTaskTiming) che può identificare attività in esecuzione per più di 50 ms. * **Esempio di Codice**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events) un altro esempio in: {% content-ref url="xs-search/performance.now-example.md" %} [performance.now-example.md](xs-search/performance.now-example.md) {% endcontent-ref %} #### Tempistica Onload + Attività Pesante Forzata Questa tecnica è simile alla precedente, ma l'**attaccante** forzerà anche qualche azione a richiedere un **tempo rilevante** quando la **risposta è positiva o negativa** e misurerà quel tempo. {% content-ref url="xs-search/performance.now-+-force-heavy-task.md" %} [performance.now-+-force-heavy-task.md](xs-search/performance.now-+-force-heavy-task.md) {% endcontent-ref %} ### Tempistica unload/beforeunload * **Metodi di Inclusione**: Frame * **Differenza Rilevabile**: Temporizzazione (generalmente dovuta al Contenuto della Pagina, Codice di Stato) * **Ulteriori informazioni**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events) * **Sommario:** Il clock [SharedArrayBuffer](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#sharedarraybuffer-and-web-workers) può essere utilizzato per misurare quanto tempo impiega a eseguire una richiesta. Potrebbero essere utilizzati altri orologi. * **Esempio di Codice**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events) Il tempo impiegato per recuperare una risorsa può essere misurato utilizzando gli eventi [`unload`](https://developer.mozilla.org/en-US/docs/Web/API/Window/unload\_event) e [`beforeunload`](https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload\_event). L'evento **`beforeunload`** viene attivato quando il browser sta per navigare verso una nuova pagina, mentre l'evento **`unload`** si verifica quando effettivamente avviene la navigazione. La differenza di tempo tra questi due eventi può essere calcolata per determinare la **durata in cui il browser ha impiegato a recuperare la risorsa**. ### Tempistica Frame con Sandboxing + onload * **Metodi di Inclusione**: Frame * **Differenza Rilevabile**: Temporizzazione (generalmente dovuta al Contenuto della Pagina, Codice di Stato) * **Ulteriori informazioni**: [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) * **Sommario:** L'API [performance.now()](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) può essere utilizzata per misurare quanto tempo impiega a eseguire una richiesta. Potrebbero essere utilizzati altri orologi. * **Esempio di Codice**: [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) È stato osservato che in assenza di [Protezioni Framing](https://xsleaks.dev/docs/defenses/opt-in/xfo/), un attaccante può misurare il tempo necessario per caricare una pagina e le sue sotto risorse tramite la rete. Questa misurazione è tipicamente possibile perché l'handler `onload` di un iframe viene attivato solo dopo il completamento del caricamento delle risorse e dell'esecuzione di JavaScript. Per eludere la variabilità introdotta dall'esecuzione dello script, un attaccante potrebbe utilizzare l'attributo [`sandbox`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) all'interno dell'` ``` ### #ID + errore + onload * **Metodi di Inclusione**: Frame * **Differenza Rilevabile**: Contenuto della Pagina * **Ulteriori informazioni**: * **Sommario**: Se riesci a far sì che la pagina generi un errore quando si accede al contenuto corretto e si carichi correttamente quando si accede a qualsiasi contenuto, allora puoi creare un loop per estrarre tutte le informazioni senza misurare il tempo. * **Esempio di Codice**: Supponiamo che tu possa **inserire** la **pagina** che ha il **contenuto segreto** **all'interno di un Iframe**. Puoi far **cercare alla vittima** il file che contiene "_**flag**_" utilizzando un **Iframe** (sfruttando ad esempio un CSRF). All'interno dell'Iframe sai che l'_**evento onload**_ verrà **sempre eseguito almeno una volta**. Quindi, puoi **cambiare** l'**URL** dell'**iframe** cambiando solo il **contenuto** dell'**hash** all'interno dell'URL. Per esempio: 1. **URL1**: www.attacker.com/xssearch#try1 2. **URL2**: www.attacker.com/xssearch#try2 Se il primo URL è stato **caricato con successo**, allora, quando si **cambia** la parte **hash** dell'URL, l'evento **onload** **non verrà attivato** di nuovo. Ma **se** la pagina ha avuto qualche tipo di **errore** durante il **caricamento**, allora, l'evento **onload** verrà **attivato di nuovo**. Così, puoi **distinguere tra** una pagina **caricata correttamente** o una pagina che ha un **errore** quando viene accessa. ### Esecuzione di Javascript * **Metodi di Inclusione**: Frame * **Differenza Rilevabile**: Contenuto della Pagina * **Ulteriori informazioni**: * **Sommario**: Se la **pagina** restituisce il **contenuto sensibile**, o un **contenuto** che può essere **controllato** dall'utente. L'utente potrebbe impostare **codice JS valido nel caso negativo**, e **caricare** ogni tentativo all'interno dei tag **`