XMLHttpRequest con il token di autorizzazione CORS con preflight

0

Ho una domanda successiva a questa domanda precedente: Come sfruttare una politica CORS mal configurata quando è richiesto un token di autorizzazione per utente?

Secondo la documentazione qui , la Access-Control-Allow-Credentials dovrebbe essere in grado di trasportare token come le intestazioni di autorizzazione perché "Le credenziali sono cookie, intestazioni di autorizzazione o certificati client TLS."

Tuttavia, quando provo il seguente exploit, non riesco a ottenere alcun browser per inoltrare il token.

Sto tentando di eseguire la seguente richiesta di dominio incrociato da https://my.domain/ :

var req = new XMLHttpRequest(); req.onload = reqListener; 
req.open('GET','https://api.external.domain/',true); 
req.withCredentials = "true"; req.setRequestHeader('authorization',''); 
req.setRequestHeader('cache-control','no-cache'); 
req.setRequestHeader('content-type','application/json'); 
req.send('{}'); 

function reqListener() 
{ 
    alert(this.responseText); 
};

La richiesta è prefligata (metodo OPTIONS) e l'API risponde con:

HTTP/1.1 200 OK
Access-Control-Expose-Headers: APIm-Debug-Trans-Id, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-Global-Transaction-ID
Access-Control-Allow-Headers: authorization,cache-control,content-type,pragma
Access-Control-Allow-Methods: GET
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://my.domain/

Fin qui tutto bene. Ora il browser immediatamente segue una richiesta GET, ma per farcela questa richiesta ho bisogno che includa l'intestazione:

Authorization: bearer [redacted]

Ma a quanto pare il browser del cliente non può accedere a questo token (?) anche se sono autenticato sull'API. C'è un modo per prendere questo token da qualche parte? Non riesco a trovarlo nella memoria locale del browser e non è nemmeno un valore cookie.

    
posta Lykias 09.08.2018 - 18:14
fonte

1 risposta

1

However, when I attempt the following exploit, I can't seem to get any browsers to forward the token.

Dato che nulla nel tuo codice imposta effettivamente l'intestazione Authorization sembra che tu stia assumendo che l'intestazione venga automaticamente impostata dal browser in base alle credenziali memorizzate nella cache, cioè simile ai cookie.

Tuttavia, tale memorizzazione nella cache viene eseguita solo per le credenziali di autenticazione immesse dall'utente in caso di autenticazione di base o digest. Se alcuni script nel sito impostano esplicitamente l'intestazione Authorization per un XHR specifico, non verrà eseguita alcuna memorizzazione nella cache delle credenziali e quindi non verrà eseguita alcuna impostazione automatica dell'intestazione Authorization dalle credenziali memorizzate nella cache.

    
risposta data 09.08.2018 - 19:23
fonte

Leggi altre domande sui tag