mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-15 17:28:13 +00:00
Translated ['pentesting-web/cors-bypass.md'] to it
This commit is contained in:
parent
26233e3b2f
commit
48961e8a66
1 changed files with 34 additions and 33 deletions
|
@ -2,15 +2,15 @@
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Impara l'hacking 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>
|
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Altri modi per supportare HackTricks:
|
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)!
|
* Se desideri 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)
|
* 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 di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
|
* Scopri [**La Famiglia PEASS**](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)**.**
|
* **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.
|
* **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.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
@ -22,14 +22,14 @@ Una politica **stesso-origine** impone che un **server che richiede** una risors
|
||||||
|
|
||||||
L'applicazione della politica stesso-origine nel contesto di `http://normal-website.com/example/example.html` è illustrata come segue:
|
L'applicazione della politica stesso-origine nel contesto di `http://normal-website.com/example/example.html` è illustrata come segue:
|
||||||
|
|
||||||
| URL accessato | Accesso consentito? |
|
| URL accessato | Accesso consentito? |
|
||||||
| ----------------------------------------- | --------------------------------------- |
|
| ----------------------------------------- | --------------------------------------- |
|
||||||
| `http://normal-website.com/example/` | Sì: Schema, dominio e porta identici |
|
| `http://normal-website.com/example/` | Sì: Schema, dominio e porta identici |
|
||||||
| `http://normal-website.com/example2/` | Sì: Schema, dominio e porta identici |
|
| `http://normal-website.com/example2/` | Sì: Schema, dominio e porta identici |
|
||||||
| `https://normal-website.com/example/` | No: Schema e porta diversi |
|
| `https://normal-website.com/example/` | No: Schema e porta diversi |
|
||||||
| `http://en.normal-website.com/example/` | No: Dominio diverso |
|
| `http://en.normal-website.com/example/` | No: Dominio diverso |
|
||||||
| `http://www.normal-website.com/example/` | No: Dominio diverso |
|
| `http://www.normal-website.com/example/` | No: Dominio diverso |
|
||||||
| `http://normal-website.com:8080/example/` | No: Porta diversa\* |
|
| `http://normal-website.com:8080/example/` | No: Porta diversa\* |
|
||||||
|
|
||||||
\*Internet Explorer non considera il numero di porta nell'applicare la politica stesso-origine, consentendo così questo accesso.
|
\*Internet Explorer non considera il numero di porta nell'applicare la politica stesso-origine, consentendo così questo accesso.
|
||||||
|
|
||||||
|
@ -37,11 +37,11 @@ L'applicazione della politica stesso-origine nel contesto di `http://normal-webs
|
||||||
|
|
||||||
Questa intestazione può consentire **origini multiple**, un valore **`null`**, o un jolly **`*`**. Tuttavia, **nessun browser supporta origini multiple**, e l'uso del jolly `*` è soggetto a **limitazioni**. (Il jolly deve essere usato da solo, e non è consentito il suo utilizzo insieme a `Access-Control-Allow-Credentials: true`.)
|
Questa intestazione può consentire **origini multiple**, un valore **`null`**, o un jolly **`*`**. Tuttavia, **nessun browser supporta origini multiple**, e l'uso del jolly `*` è soggetto a **limitazioni**. (Il jolly deve essere usato da solo, e non è consentito il suo utilizzo insieme a `Access-Control-Allow-Credentials: true`.)
|
||||||
|
|
||||||
Questa intestazione è **emessa da un server** in risposta a una richiesta di risorsa cross-domain avviata da un sito web, con il browser che aggiunge automaticamente un'intestazione `Origin`.
|
Questa intestazione è **emessa da un server** in risposta a una richiesta di risorsa tra domini iniziata da un sito web, con il browser che aggiunge automaticamente un'intestazione `Origin`.
|
||||||
|
|
||||||
### Intestazione `Access-Control-Allow-Credentials`
|
### Intestazione `Access-Control-Allow-Credentials`
|
||||||
|
|
||||||
Per **default**, le richieste cross-origin vengono effettuate senza credenziali come cookie o l'intestazione di autorizzazione. Tuttavia, un server cross-domain può consentire la lettura della risposta quando vengono inviate le credenziali impostando l'intestazione `Access-Control-Allow-Credentials` su **`true`**.
|
Per **default**, le richieste tra origini vengono effettuate senza credenziali come cookie o l'intestazione di autorizzazione. Tuttavia, un server tra domini può consentire la lettura della risposta quando vengono inviate credenziali impostando l'intestazione `Access-Control-Allow-Credentials` su **`true`**.
|
||||||
|
|
||||||
Se impostato su `true`, il browser trasmetterà le credenziali (cookie, intestazioni di autorizzazione o certificati client TLS).
|
Se impostato su `true`, il browser trasmetterà le credenziali (cookie, intestazioni di autorizzazione o certificati client TLS).
|
||||||
```javascript
|
```javascript
|
||||||
|
@ -78,7 +78,7 @@ Quando si inizia una richiesta tra domini in condizioni specifiche, come l'utili
|
||||||
|
|
||||||
Il protocollo **Cross-Origin Resource Sharing (CORS)** impone questo controllo di pre-volo per determinare la fattibilità dell'operazione tra origini diverse richiesta verificando i metodi consentiti, le intestazioni e l'affidabilità dell'origine. Per una comprensione dettagliata delle condizioni che evitano la necessità di una richiesta di pre-volo, fare riferimento alla guida esaustiva fornita da [**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests).
|
Il protocollo **Cross-Origin Resource Sharing (CORS)** impone questo controllo di pre-volo per determinare la fattibilità dell'operazione tra origini diverse richiesta verificando i metodi consentiti, le intestazioni e l'affidabilità dell'origine. Per una comprensione dettagliata delle condizioni che evitano la necessità di una richiesta di pre-volo, fare riferimento alla guida esaustiva fornita da [**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests).
|
||||||
|
|
||||||
È fondamentale notare che **l'assenza di una richiesta di pre-volo non annulla il requisito che la risposta contenga intestazioni di autorizzazione**. Senza queste intestazioni, il browser è incapace di elaborare la risposta dalla richiesta tra origini diverse.
|
È fondamentale notare che **l'assenza di una richiesta di pre-volo non annulla il requisito che la risposta contenga le intestazioni di autorizzazione**. Senza queste intestazioni, il browser non è in grado di elaborare la risposta dalla richiesta tra origini diverse.
|
||||||
|
|
||||||
Considera la seguente illustrazione di una richiesta di pre-volo mirata all'utilizzo del metodo `PUT` insieme a un'intestazione personalizzata chiamata `Special-Request-Header`:
|
Considera la seguente illustrazione di una richiesta di pre-volo mirata all'utilizzo del metodo `PUT` insieme a un'intestazione personalizzata chiamata `Special-Request-Header`:
|
||||||
```
|
```
|
||||||
|
@ -104,7 +104,7 @@ Access-Control-Max-Age: 240
|
||||||
* **`Access-Control-Max-Age`**: Questo header indica per quanto tempo i risultati di una richiesta di pre-volo possono essere memorizzati nella cache. Il server imposta il tempo massimo, in secondi, che le informazioni restituite da una richiesta di pre-volo possono essere riutilizzate.
|
* **`Access-Control-Max-Age`**: Questo header indica per quanto tempo i risultati di una richiesta di pre-volo possono essere memorizzati nella cache. Il server imposta il tempo massimo, in secondi, che le informazioni restituite da una richiesta di pre-volo possono essere riutilizzate.
|
||||||
* **`Access-Control-Request-Headers`**: Utilizzato nelle richieste di pre-volo, questo header è impostato dal client per informare il server su quali intestazioni HTTP il client desidera utilizzare nella richiesta effettiva.
|
* **`Access-Control-Request-Headers`**: Utilizzato nelle richieste di pre-volo, questo header è impostato dal client per informare il server su quali intestazioni HTTP il client desidera utilizzare nella richiesta effettiva.
|
||||||
* **`Access-Control-Request-Method`**: Questo header, anch'esso utilizzato nelle richieste di pre-volo, è impostato dal client per indicare quale metodo HTTP verrà utilizzato nella richiesta effettiva.
|
* **`Access-Control-Request-Method`**: Questo header, anch'esso utilizzato nelle richieste di pre-volo, è impostato dal client per indicare quale metodo HTTP verrà utilizzato nella richiesta effettiva.
|
||||||
* **`Origin`**: Questo header è impostato automaticamente dal browser e indica l'origine della richiesta cross-origin. Viene utilizzato dal server per valutare se la richiesta in arrivo dovrebbe essere consentita o negata in base alla politica CORS.
|
* **`Origin`**: Questo header è impostato automaticamente dal browser e indica l'origine della richiesta tra origini diverse. Viene utilizzato dal server per valutare se la richiesta in arrivo dovrebbe essere consentita o negata in base alla politica CORS.
|
||||||
|
|
||||||
Nota che di solito (a seconda del tipo di contenuto e delle intestazioni impostate) in una richiesta **GET/POST non viene inviata alcuna richiesta di pre-volo** (la richiesta viene inviata **direttamente**), ma se si desidera accedere alle **intestazioni/corpo della risposta**, deve contenere un'intestazione _Access-Control-Allow-Origin_ che lo consenta.\
|
Nota che di solito (a seconda del tipo di contenuto e delle intestazioni impostate) in una richiesta **GET/POST non viene inviata alcuna richiesta di pre-volo** (la richiesta viene inviata **direttamente**), ma se si desidera accedere alle **intestazioni/corpo della risposta**, deve contenere un'intestazione _Access-Control-Allow-Origin_ che lo consenta.\
|
||||||
**Pertanto, CORS non protegge contro CSRF (ma può essere utile).**
|
**Pertanto, CORS non protegge contro CSRF (ma può essere utile).**
|
||||||
|
@ -126,22 +126,22 @@ Content-Length: 0
|
||||||
...
|
...
|
||||||
```
|
```
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
Si noti che l'IP **0.0.0.0** di Linux funziona per **aggirare** questi requisiti per accedere a localhost poiché quell'indirizzo IP non è considerato "locale".
|
Si noti che l'IP **0.0.0.0** di Linux funziona per **bypassare** questi requisiti per accedere a localhost poiché quell'indirizzo IP non è considerato "locale".
|
||||||
|
|
||||||
È anche possibile **aggirare i requisiti della Rete Locale** se si utilizza l'**indirizzo IP pubblico di un endpoint locale** (come l'IP pubblico del router). Poiché in diverse occasioni, anche se si accede all'**IP pubblico**, se è **dalla rete locale**, l'accesso sarà concesso.
|
È anche possibile **bypassare i requisiti della rete locale** se si utilizza l'**indirizzo IP pubblico di un endpoint locale** (come l'IP pubblico del router). Poiché in diverse occasioni, anche se si accede all'**IP pubblico**, se è **dalla rete locale**, l'accesso sarà concesso.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
## Configurazioni errate sfruttabili
|
## Configurazioni errate sfruttabili
|
||||||
|
|
||||||
È stato osservato che l'impostazione di `Access-Control-Allow-Credentials` su **`true`** è un prerequisito per la maggior parte degli **attacchi reali**. Questa impostazione consente al browser di inviare credenziali e leggere la risposta, aumentando l'efficacia dell'attacco. Senza di essa, il vantaggio di far emettere una richiesta al browser anziché farlo da soli diminuisce, poiché diventa impraticabile sfruttare i cookie di un utente.
|
È stato osservato che l'impostazione di `Access-Control-Allow-Credentials` su **`true`** è un prerequisito per la maggior parte degli **attacchi reali**. Questa impostazione consente al browser di inviare credenziali e leggere la risposta, migliorando l'efficacia dell'attacco. Senza di essa, il vantaggio di far emettere una richiesta a un browser anziché farlo da soli diminuisce, poiché diventa impraticabile sfruttare i cookie di un utente.
|
||||||
|
|
||||||
### Eccezione: Sfruttare la Posizione della Rete come Autenticazione
|
### Eccezione: Sfruttare la posizione di rete come autenticazione
|
||||||
|
|
||||||
Esiste un'eccezione in cui la posizione della rete della vittima agisce come una forma di autenticazione. Ciò consente al browser della vittima di essere utilizzato come proxy, aggirando l'autenticazione basata sull'IP per accedere alle applicazioni di intranet. Questo metodo presenta somiglianze nell'impatto con il reindirizzamento DNS ma è più semplice da sfruttare.
|
Esiste un'eccezione in cui la posizione di rete della vittima agisce come una forma di autenticazione. Ciò consente al browser della vittima di essere utilizzato come proxy, aggirando l'autenticazione basata sull'IP per accedere alle applicazioni di intranet. Questo metodo presenta somiglianze nell'impatto con il reindirizzamento DNS ma è più semplice da sfruttare.
|
||||||
|
|
||||||
### Riflessione di `Origin` in `Access-Control-Allow-Origin`
|
### Riflessione di `Origin` in `Access-Control-Allow-Origin`
|
||||||
|
|
||||||
Lo scenario reale in cui il valore dell'intestazione `Origin` è riflesso in `Access-Control-Allow-Origin` è teoricamente improbabile a causa delle restrizioni sulla combinazione di queste intestazioni. Tuttavia, gli sviluppatori che cercano di abilitare CORS per più URL possono generare dinamicamente l'intestazione `Access-Control-Allow-Origin` copiando il valore dell'intestazione `Origin`. Questo approccio può introdurre vulnerabilità, in particolare quando un attaccante utilizza un dominio con un nome progettato per apparire legittimo, ingannando così la logica di convalida.
|
Lo scenario reale in cui il valore dell'intestazione `Origin` è riflesso in `Access-Control-Allow-Origin` è teoricamente improbabile a causa delle restrizioni sulla combinazione di queste intestazioni. Tuttavia, gli sviluppatori che desiderano abilitare CORS per più URL possono generare dinamicamente l'intestazione `Access-Control-Allow-Origin` copiando il valore dell'intestazione `Origin`. Questo approccio può introdurre vulnerabilità, in particolare quando un attaccante utilizza un dominio con un nome progettato per apparire legittimo, ingannando così la logica di convalida.
|
||||||
```html
|
```html
|
||||||
<script>
|
<script>
|
||||||
var req = new XMLHttpRequest();
|
var req = new XMLHttpRequest();
|
||||||
|
@ -188,7 +188,7 @@ Quando ci si trova di fronte a un elenco di dominio whitelist, è cruciale testa
|
||||||
|
|
||||||
### Bypass delle Espressioni Regolari Avanzate
|
### Bypass delle Espressioni Regolari Avanzate
|
||||||
|
|
||||||
I pattern Regex di solito si concentrano su caratteri alfanumerici, punto (.), e trattino (-), trascurando altre possibilità. Ad esempio, un nome di dominio creato per includere caratteri interpretati in modo diverso dai browser e dai pattern Regex può eludere i controlli di sicurezza. Il modo in cui Safari, Chrome e Firefox gestiscono i caratteri di sottodomini di sottolineatura illustra come tali discrepanze possano essere sfruttate per aggirare la logica di convalida del dominio.
|
I pattern Regex si concentrano tipicamente su caratteri alfanumerici, punto (.), e trattino (-), trascurando altre possibilità. Ad esempio, un nome di dominio creato per includere caratteri interpretati in modo diverso dai browser e dai pattern Regex può eludere i controlli di sicurezza. Il modo in cui Safari, Chrome e Firefox gestiscono i caratteri di sottodomini sottolinea come tali discrepanze possano essere sfruttate per aggirare la logica di convalida del dominio.
|
||||||
|
|
||||||
**Per ulteriori informazioni e impostazioni su questo controllo di bypass:** [**https://www.corben.io/advanced-cors-techniques/**](https://www.corben.io/advanced-cors-techniques/) **e** [**https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397**](https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397)
|
**Per ulteriori informazioni e impostazioni su questo controllo di bypass:** [**https://www.corben.io/advanced-cors-techniques/**](https://www.corben.io/advanced-cors-techniques/) **e** [**https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397**](https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397)
|
||||||
|
|
||||||
|
@ -196,9 +196,9 @@ I pattern Regex di solito si concentrano su caratteri alfanumerici, punto (.), e
|
||||||
|
|
||||||
### Da XSS all'interno di un sottodominio
|
### Da XSS all'interno di un sottodominio
|
||||||
|
|
||||||
Gli sviluppatori spesso implementano meccanismi di difesa per proteggersi dall'exploit di CORS attraverso l'elenco bianco dei domini autorizzati a richiedere informazioni. Nonostante queste precauzioni, la sicurezza del sistema non è infallibile. La presenza anche di un singolo sottodominio vulnerabile all'interno dei domini in whitelist può aprire la porta all'exploit di CORS attraverso altre vulnerabilità, come XSS (Cross-Site Scripting).
|
Spesso gli sviluppatori implementano meccanismi difensivi per proteggersi dall'exploit di CORS attraverso l'elenco bianco dei domini autorizzati a richiedere informazioni. Nonostante queste precauzioni, la sicurezza del sistema non è infallibile. La presenza anche di un singolo sottodominio vulnerabile all'interno dei domini in whitelist può aprire la porta all'exploit di CORS attraverso altre vulnerabilità, come XSS (Cross-Site Scripting).
|
||||||
|
|
||||||
Per illustrare, consideriamo lo scenario in cui un dominio, `requester.com`, è in whitelist per accedere alle risorse di un altro dominio, `provider.com`. La configurazione lato server potrebbe apparire così:
|
Per illustrare, consideriamo lo scenario in cui un dominio, `requester.com`, è in whitelist per accedere alle risorse di un altro dominio, `provider.com`. La configurazione lato server potrebbe assomigliare a qualcosa del genere:
|
||||||
```javascript
|
```javascript
|
||||||
if ($_SERVER['HTTP_HOST'] == '*.requester.com') {
|
if ($_SERVER['HTTP_HOST'] == '*.requester.com') {
|
||||||
// Access data
|
// Access data
|
||||||
|
@ -225,7 +225,7 @@ HTTP/1.1 200 OK
|
||||||
Access-Control-Allow-Origin: z
|
Access-Control-Allow-Origin: z
|
||||||
Content-Type: text/html; charset=UTF-7
|
Content-Type: text/html; charset=UTF-7
|
||||||
```
|
```
|
||||||
Mentre sfruttare direttamente questa vulnerabilità facendo inviare al browser web un'intestazione malformata non è fattibile, una richiesta articolata può essere generata manualmente utilizzando strumenti come Burp Suite. Questo metodo potrebbe portare una cache lato server a salvare la risposta e a servirla involontariamente ad altri. Il payload articolato mira a modificare il set di caratteri della pagina in UTF-7, una codifica dei caratteri spesso associata a vulnerabilità XSS a causa della sua capacità di codificare i caratteri in modo che possano essere eseguiti come script in determinati contesti.
|
Mentre sfruttare direttamente questa vulnerabilità facendo inviare un'intestazione malformata da un browser web non è fattibile, una richiesta articolata può essere generata manualmente utilizzando strumenti come Burp Suite. Questo metodo potrebbe portare una cache lato server a salvare la risposta e a servirla involontariamente ad altri. Il payload articolato mira a modificare il set di caratteri della pagina in UTF-7, una codifica dei caratteri spesso associata a vulnerabilità XSS a causa della sua capacità di codificare i caratteri in modo che possano essere eseguiti come script in determinati contesti.
|
||||||
|
|
||||||
Per ulteriori informazioni sulle vulnerabilità XSS memorizzate, consulta [PortSwigger](https://portswigger.net/web-security/cross-site-scripting/stored).
|
Per ulteriori informazioni sulle vulnerabilità XSS memorizzate, consulta [PortSwigger](https://portswigger.net/web-security/cross-site-scripting/stored).
|
||||||
|
|
||||||
|
@ -237,9 +237,9 @@ Per ulteriori informazioni sulle vulnerabilità XSS memorizzate, consulta [PortS
|
||||||
|
|
||||||
In questo scenario, viene osservata un'istanza di una pagina web che riflette i contenuti di un'intestazione HTTP personalizzata senza una codifica adeguata. In particolare, la pagina web riflette i contenuti inclusi in un'intestazione `X-User-id`, che potrebbe includere JavaScript dannoso, come dimostrato dall'esempio in cui l'intestazione contiene un tag di immagine SVG progettato per eseguire codice JavaScript al caricamento.
|
In questo scenario, viene osservata un'istanza di una pagina web che riflette i contenuti di un'intestazione HTTP personalizzata senza una codifica adeguata. In particolare, la pagina web riflette i contenuti inclusi in un'intestazione `X-User-id`, che potrebbe includere JavaScript dannoso, come dimostrato dall'esempio in cui l'intestazione contiene un tag di immagine SVG progettato per eseguire codice JavaScript al caricamento.
|
||||||
|
|
||||||
Le politiche di Condivisione delle risorse di origine incrociata (CORS) consentono l'invio di intestazioni personalizzate. Tuttavia, senza che la risposta venga renderizzata direttamente dal browser a causa delle restrizioni CORS, l'utilità di tale iniezione potrebbe sembrare limitata. Il punto critico sorge quando si considera il comportamento della cache del browser. Se l'intestazione `Vary: Origin` non è specificata, diventa possibile che la risposta dannosa venga memorizzata nella cache del browser. Successivamente, questa risposta memorizzata potrebbe essere renderizzata direttamente durante la navigazione all'URL, eludendo la necessità di un rendering diretto alla richiesta iniziale. Questo meccanismo potenzia l'affidabilità dell'attacco sfruttando la cache lato client.
|
Le politiche di Cross-Origin Resource Sharing (CORS) consentono l'invio di intestazioni personalizzate. Tuttavia, senza che la risposta venga renderizzata direttamente dal browser a causa delle restrizioni CORS, l'utilità di tale iniezione potrebbe sembrare limitata. Il punto critico sorge quando si considera il comportamento della cache del browser. Se l'intestazione `Vary: Origin` non è specificata, diventa possibile che la risposta dannosa venga memorizzata nella cache del browser. Successivamente, questa risposta memorizzata potrebbe essere renderizzata direttamente durante la navigazione all'URL, eludendo la necessità di un rendering diretto alla richiesta iniziale. Questo meccanismo potenzia l'affidabilità dell'attacco sfruttando la cache lato client.
|
||||||
|
|
||||||
Per illustrare questo attacco, viene fornito un esempio di JavaScript, progettato per essere eseguito nell'ambiente di una pagina web, ad esempio tramite un JSFiddle. Questo script esegue un'azione semplice: invia una richiesta a un URL specificato con un'intestazione personalizzata contenente il JavaScript dannoso. Al termine con successo della richiesta, tenta di navigare verso l'URL di destinazione, potenzialmente attivando l'esecuzione dello script iniettato se la risposta è stata memorizzata senza un adeguato trattamento dell'intestazione `Vary: Origin`.
|
Per illustrare questo attacco, viene fornito un esempio di JavaScript, progettato per essere eseguito nell'ambiente di una pagina web, ad esempio attraverso un JSFiddle. Questo script esegue un'azione semplice: invia una richiesta a un URL specificato con un'intestazione personalizzata contenente il JavaScript dannoso. Al termine con successo della richiesta, tenta di navigare all'URL di destinazione, potenzialmente attivando l'esecuzione dello script iniettato se la risposta è stata memorizzata senza una gestione adeguata dell'intestazione `Vary: Origin`.
|
||||||
|
|
||||||
Ecco una sintesi del JavaScript utilizzato per eseguire questo attacco:
|
Ecco una sintesi del JavaScript utilizzato per eseguire questo attacco:
|
||||||
```html
|
```html
|
||||||
|
@ -257,11 +257,11 @@ req.send();
|
||||||
|
|
||||||
### XSSI (Cross-Site Script Inclusion) / JSONP
|
### XSSI (Cross-Site Script Inclusion) / JSONP
|
||||||
|
|
||||||
XSSI, noto anche come Inclusione di Script da Siti Incrociati, è un tipo di vulnerabilità che sfrutta il fatto che la Politica della Stessa Origine (SOP) non si applica quando si includono risorse utilizzando il tag script. Questo perché gli script devono poter essere inclusi da domini diversi. Questa vulnerabilità consente a un attaccante di accedere e leggere qualsiasi contenuto incluso utilizzando il tag script.
|
XSSI, noto anche come Inclusione di Script tra Siti, è un tipo di vulnerabilità che sfrutta il fatto che la Politica della Stessa Origine (SOP) non si applica quando si includono risorse utilizzando il tag script. Questo perché gli script devono poter essere inclusi da domini diversi. Questa vulnerabilità consente a un attaccante di accedere e leggere qualsiasi contenuto incluso utilizzando il tag script.
|
||||||
|
|
||||||
Questa vulnerabilità diventa particolarmente significativa quando si tratta di JavaScript dinamico o JSONP (JSON con Padding), specialmente quando vengono utilizzate informazioni di autorità ambientale come i cookie per l'autenticazione. Quando si richiede una risorsa da un host diverso, i cookie sono inclusi, rendendoli accessibili all'attaccante.
|
Questa vulnerabilità diventa particolarmente significativa quando si tratta di JavaScript dinamico o JSONP (JSON con Padding), specialmente quando vengono utilizzate informazioni di autorità ambientale come i cookie per l'autenticazione. Quando si richiede una risorsa da un host diverso, i cookie sono inclusi, rendendoli accessibili all'attaccante.
|
||||||
|
|
||||||
Per comprendere meglio e mitigare questa vulnerabilità, è possibile utilizzare il plugin BurpSuite disponibile su [https://github.com/kapytein/jsonp](https://github.com/kapytein/jsonp). Questo plugin può aiutare a identificare e affrontare potenziali vulnerabilità XSSI nelle vostre applicazioni web.
|
Per comprendere meglio e mitigare questa vulnerabilità, è possibile utilizzare il plugin BurpSuite disponibile su [https://github.com/kapytein/jsonp](https://github.com/kapytein/jsonp). Questo plugin può aiutare a identificare e affrontare potenziali vulnerabilità XSSI nelle tue applicazioni web.
|
||||||
|
|
||||||
[**Leggi di più sui diversi tipi di XSSI e su come sfruttarli qui.**](xssi-cross-site-script-inclusion.md)
|
[**Leggi di più sui diversi tipi di XSSI e su come sfruttarli qui.**](xssi-cross-site-script-inclusion.md)
|
||||||
|
|
||||||
|
@ -278,7 +278,7 @@ Un modo per bypassare la restrizione di `Access-Control-Allow-Origin` è richied
|
||||||
|
|
||||||
### Bypass Iframe + Popup
|
### Bypass Iframe + Popup
|
||||||
|
|
||||||
È possibile **bypassare i controlli CORS** come `e.origin === window.origin` **creando un iframe** e **da esso aprendo una nuova finestra**. Maggiori informazioni nella seguente pagina:
|
Puoi **bypassare i controlli CORS** come `e.origin === window.origin` **creando un iframe** e **da esso aprendo una nuova finestra**. Maggiori informazioni nella seguente pagina:
|
||||||
|
|
||||||
{% content-ref url="xss-cross-site-scripting/iframes-in-xss-and-csp.md" %}
|
{% content-ref url="xss-cross-site-scripting/iframes-in-xss-and-csp.md" %}
|
||||||
[iframes-in-xss-and-csp.md](xss-cross-site-scripting/iframes-in-xss-and-csp.md)
|
[iframes-in-xss-and-csp.md](xss-cross-site-scripting/iframes-in-xss-and-csp.md)
|
||||||
|
@ -291,7 +291,7 @@ Il DNS rebinding tramite TTL è una tecnica utilizzata per bypassare determinate
|
||||||
1. L'attaccante crea una pagina web e fa accedere la vittima.
|
1. L'attaccante crea una pagina web e fa accedere la vittima.
|
||||||
2. L'attaccante cambia quindi il DNS (IP) del proprio dominio per puntare alla pagina web della vittima.
|
2. L'attaccante cambia quindi il DNS (IP) del proprio dominio per puntare alla pagina web della vittima.
|
||||||
3. Il browser della vittima memorizza nella cache la risposta DNS, che potrebbe avere un valore TTL (Time to Live) che indica per quanto tempo il record DNS deve essere considerato valido.
|
3. Il browser della vittima memorizza nella cache la risposta DNS, che potrebbe avere un valore TTL (Time to Live) che indica per quanto tempo il record DNS deve essere considerato valido.
|
||||||
4. Quando il TTL scade, il browser della vittima effettua una nuova richiesta DNS, consentendo all'attaccante di eseguire codice JavaScript sulla pagina della vittima.
|
4. Quando scade il TTL, il browser della vittima effettua una nuova richiesta DNS, consentendo all'attaccante di eseguire codice JavaScript sulla pagina della vittima.
|
||||||
5. Mantenendo il controllo sull'IP della vittima, l'attaccante può raccogliere informazioni dalla vittima senza inviare alcun cookie al server della vittima.
|
5. Mantenendo il controllo sull'IP della vittima, l'attaccante può raccogliere informazioni dalla vittima senza inviare alcun cookie al server della vittima.
|
||||||
|
|
||||||
È importante notare che i browser hanno meccanismi di caching che possono impedire un abuso immediato di questa tecnica, anche con valori TTL bassi.
|
È importante notare che i browser hanno meccanismi di caching che possono impedire un abuso immediato di questa tecnica, anche con valori TTL bassi.
|
||||||
|
@ -329,15 +329,15 @@ Per ulteriori informazioni puoi consultare [https://unit42.paloaltonetworks.com/
|
||||||
|
|
||||||
* Se **gli IP interni non sono consentiti**, potrebbero **aver dimenticato di vietare 0.0.0.0** (funziona su Linux e Mac)
|
* Se **gli IP interni non sono consentiti**, potrebbero **aver dimenticato di vietare 0.0.0.0** (funziona su Linux e Mac)
|
||||||
* Se **gli IP interni non sono consentiti**, rispondi con un **CNAME** a **localhost** (funziona su Linux e Mac)
|
* Se **gli IP interni non sono consentiti**, rispondi con un **CNAME** a **localhost** (funziona su Linux e Mac)
|
||||||
* Se **gli IP interni non sono consentiti** come risposte DNS, è possibile rispondere con **CNAME a servizi interni** come www.corporate.internal.
|
* Se **gli IP interni non sono consentiti** come risposte DNS, è possibile rispondere con **CNAME a servizi interni** come ad esempio www.corporate.internal.
|
||||||
|
|
||||||
### Arma da Ribinding DNS
|
### Armaizzati il DNS Rebidding
|
||||||
|
|
||||||
Puoi trovare ulteriori informazioni sulle tecniche di bypass precedenti e su come utilizzare lo strumento seguente nella presentazione [Gerald Doussot - State of DNS Rebinding Attacks & Singularity of Origin - DEF CON 27 Conference](https://www.youtube.com/watch?v=y9-0lICNjOQ).
|
Puoi trovare ulteriori informazioni sulle tecniche di bypass precedenti e su come utilizzare lo strumento seguente nella presentazione [Gerald Doussot - State of DNS Rebinding Attacks & Singularity of Origin - DEF CON 27 Conference](https://www.youtube.com/watch?v=y9-0lICNjOQ).
|
||||||
|
|
||||||
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) è uno strumento per eseguire attacchi di [ribinding DNS](https://en.wikipedia.org/wiki/DNS\_rebinding). Include i componenti necessari per ribindare l'indirizzo IP del nome DNS del server di attacco all'indirizzo IP della macchina di destinazione e per servire payload di attacco per sfruttare software vulnerabili sulla macchina di destinazione.
|
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) è uno strumento per eseguire attacchi di [DNS rebinding](https://en.wikipedia.org/wiki/DNS\_rebinding). Include i componenti necessari per rilegare l'indirizzo IP del nome DNS del server di attacco all'indirizzo IP della macchina di destinazione e per servire payload di attacco per sfruttare software vulnerabili sulla macchina di destinazione.
|
||||||
|
|
||||||
### Protezione Reale contro il Ribinding DNS
|
### Protezione Reale contro il DNS Rebinding
|
||||||
|
|
||||||
* Utilizzare TLS nei servizi interni
|
* Utilizzare TLS nei servizi interni
|
||||||
* Richiedere autenticazione per accedere ai dati
|
* Richiedere autenticazione per accedere ai dati
|
||||||
|
@ -353,6 +353,7 @@ Puoi trovare ulteriori informazioni sulle tecniche di bypass precedenti e su com
|
||||||
* [https://github.com/lc/theftfuzzer](https://github.com/lc/theftfuzzer)
|
* [https://github.com/lc/theftfuzzer](https://github.com/lc/theftfuzzer)
|
||||||
* [https://github.com/s0md3v/Corsy](https://github.com/s0md3v/Corsy)
|
* [https://github.com/s0md3v/Corsy](https://github.com/s0md3v/Corsy)
|
||||||
* [https://github.com/Shivangx01b/CorsMe](https://github.com/Shivangx01b/CorsMe)
|
* [https://github.com/Shivangx01b/CorsMe](https://github.com/Shivangx01b/CorsMe)
|
||||||
|
* [https://github.com/omranisecurity/CorsOne](https://github.com/omranisecurity/CorsOne)
|
||||||
|
|
||||||
## Riferimenti
|
## Riferimenti
|
||||||
|
|
||||||
|
@ -372,9 +373,9 @@ Puoi trovare ulteriori informazioni sulle tecniche di bypass precedenti e su com
|
||||||
|
|
||||||
Altri modi per supportare HackTricks:
|
Altri modi per supportare HackTricks:
|
||||||
|
|
||||||
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
|
* Se desideri vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
|
||||||
* Ottieni il [**PEASS ufficiale & HackTricks swag**](https://peass.creator-spring.com)
|
* Ottieni il [**merchandising ufficiale 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)
|
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusivi [**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)**.**
|
* **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.
|
* **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.
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue