XMLHttpRequest con el token de autorización faltado con CORS precalentado

0

Tengo una pregunta de seguimiento para esta pregunta anterior: Cómo explotar una política CORS mal configurada cuando se requiere un token de autorización por usuario?

Según la documentación aquí , Access-Control-Allow-Credentials debería poder transportar tokens como los encabezados de autorización porque "las credenciales son cookies, encabezados de autorización o certificados de clientes TLS"

Sin embargo, cuando intento el siguiente exploit, parece que no consigo que ningún navegador reenvíe el token.

Estoy intentando realizar la siguiente solicitud de dominio cruzado desde 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 solicitud está prefligada (método OPTIONS) y la API responde 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/

Hasta ahora todo bien. Ahora el navegador sigue inmediatamente con una solicitud GET, pero para que esta solicitud tenga éxito, necesito que incluya el encabezado:

Authorization: bearer [redacted]

Pero el navegador del cliente aparentemente no puede acceder a este token (?) aunque esté autenticado en la API. ¿Hay alguna manera de agarrar este token de algún lugar? Parece que no puedo encontrarlo en el almacenamiento local del navegador y tampoco es un valor de cookie.

    
pregunta Lykias 09.08.2018 - 18:14
fuente

1 respuesta

1
  

Sin embargo, cuando intento el siguiente exploit, parece que no consigo que ningún navegador reenvíe el token.

Dado que nada en su código en realidad establece el encabezado Authorization , parece que está asumiendo que el navegador establece automáticamente el encabezado en base a las credenciales almacenadas en la caché, es decir, similar a las cookies.

Pero, dicho almacenamiento en caché solo se realiza para las credenciales de autenticación introducidas por el usuario en caso de autenticación básica o de resumen. Si alguna secuencia de comandos en el sitio establece explícitamente el encabezado Authorization para un XHR específico, no se realizará el almacenamiento en caché de las credenciales y, por lo tanto, tampoco habrá una configuración automática del encabezado Authorization de las credenciales almacenadas en caché.

    
respondido por el Steffen Ullrich 09.08.2018 - 19:23
fuente

Lea otras preguntas en las etiquetas