El encabezado de respuesta Access-Control-Allow-Origin
indica si la respuesta se puede compartir con recursos con el origen dado.
(De MDN)
Cuando el servidor envía Access-Control-Allow-Origin: *
, permite que cualquier origen acceda al recurso en una solicitud de origen cruzado. Pero la medida en que esto es explotable varía.
Supongamos que ha iniciado sesión para banca en línea en https://yourbank.example/
y el sitio establece el encabezado ACAO. Al mismo tiempo, estás visitando un sitio controlado por un atacante en otra pestaña. Ahora, el sitio del atacante podría cargar una secuencia de comandos que emita una solicitud de origen cruzado a su panel de banca en línea en segundo plano, en la línea de:
fetch('https://yourbank.example/').then(r => r.text()).then(console.log)
En ese caso, su navegador revelaría su vista de https://yourbank.example/
al atacante. Sin embargo , esto no es útil, porque su navegador no incluye los detalles de autenticación (es decir, las cookies de sesión) en la solicitud de forma predeterminada. Entonces, todo lo que el atacante obtiene es su vista no autenticada del sitio web de su banco.
Incluso si el sitio también envía Access-Control-Allow-Credentials: true
(donde el atacante generalmente puede llamar a fetch()
con {credentials: 'include'}
para leer la respuesta de una solicitud autenticada de origen cruzado) está fuera de suerte porque permitir credenciales no tiene ningún efecto cuando ACAO está configurado como comodín ( *
).
Por lo tanto, con ACAO: *
solo, te quedan con menos posibilidades de ataque. Por ejemplo, funcionaría en un sitio de intranet o una interfaz de enrutador que muestra información confidencial incluso sin autenticación, pero el atacante no puede acceder directamente a ella. (En ese caso, también puede ser vulnerable a DNS encuadernado .)