Cross-origin resource sharing (CORS)
General
1) Revisar si se encuentra habilitado (true
) el encabezado HTTP Access-Control-Allow-Credentials
.
2) Revisar los valores del encabezado HTTP Access-Control-Allow-Origin
.
Valor comodÃn (
*
).Valor nulo (
null
).Origin
reflejado.Lista blanca de orÃgenes (
Origin
) permitidos con protocolo inseguro (HTTP).Cambiar el valor del encabezado
Origin
a uno que comience y a uno que termine con unOrigin
permitido (lista blanca).
Valores no admitidos por los navegadores web.
Múltiples dominios separados mediante espacios o comas.
Utilización de comodÃn (
*
) para especificar subdominios.Dominio sin protocolo.
3) Si el valor del encabezado Access-Control-Allow-Origin
se genera dinámicamente verificar que se especifique Origin
en el valor del encabezado HTTP Vary
.
Access-Control-Allow-Origin (ACAO)
El encabezado HTTP Access-Control-Allow-Origin
puede tener varios valores. Estos son el valor comodÃn (*
), el valor nulo (null
) y el valor de origen especÃfico que desea permitir.
El encabezado Access-Control-Allow-Origin
no puede contener múltiples orÃgenes, como separar diferentes dominios mediante espacios o comas. Además, el uso de comodines no se puede utilizar dentro de ningún otro valor.
Algunos ejemplos no válidos de Access-Control-Allow-Origin
son:
La especificación de Access-Control-Allow-Origin
permite múltiples orÃgenes, sin embargo, los navegadores web no lo admiten.
Por lo tanto, se debe verificar el origen de la solicitud y ajustar el campo del encabezado en consecuencia. Por ejemplo, puede usar el encabezado Origen
de la solicitud para verificar quién está accediendo al recurso. Si es uno de los dominios permitidos, se establece Access-Control-Allow-Origin
en consecuencia.
El navegador web compara Access-Control-Allow-Origin
con el origen del sitio web solicitante (Origin
) y permite el acceso a la respuesta si coinciden. Es decir, el navegador web no compartirá la respuesta del servidor si el origen no está incluido en el encabezado Access-Control-Allow-Origin
.
Afortunadamente, desde una perspectiva de seguridad, el uso del comodÃn está restringido en la especificación, ya que no se puede combinar el comodÃn (*
) con Access-Control-Allow-Credentials
. En consecuencia, una respuesta de la siguiente forma no está permitida:
Vary
El encabezado Vary
está configurado para que el navegador sepa que la respuesta puede variar según el origen. Por lo tanto, no utilizará ninguna respuesta almacenada en caché cuando se llame desde un sitio diferente en el mismo navegador web, previniendo asà ataques de envenenamiento de caché del lado de cliente.
Por lo cual, si el valor del encabezado HTTP Access-Control-Allow-Origin
se genera dinámicamente se debe siempre especificar Origin
en el valor del encabezado HTTP Vary
.
Explotación con credenciales (ACAC)
Origin reflejado en Access-Control-Allow-Origin
El valor del encabezado Access-Control-Allow-Origin
es generado por el servidor a partir del encabezado Origin
especificado por el cliente.
Obtención de información desde recurso vulnerable y reenvió de información a web del atacante.
Access-Control-Allow-Origin con valor null
La especificación del encabezado Origen
permite el valor nulo (null
). Algunas aplicaciones pueden incluir en su lista blanca el valor nulo (null
) para admitir el desarrollo local de su aplicación. En esta situación, un atacante puede generar una solicitud que contenga el valor nulo (null
) en el encabezado Origin
y esto satisfará la lista blanca de Access-Control-Allow-Origin
permitiendo tener acceso a las respuestas.
Obtención de información desde recurso vulnerable y reenvió de información a web del atacante.
Explotación sin credenciales (ACAC)
Sin el encabezado Access-Control-Allow-Credentials
con valor true
, el navegador web del usuario vÃctima no enviará sus cookies u otras credenciales, lo que significa que el atacante solo obtendrá acceso a contenido no autenticado, al que se podrÃa acceder fácilmente navegando directamente al recurso de destino.
Sin embargo, hay una situación común en la que un atacante no puede acceder a un recurso directamente, por ejemplo cuando es parte de una intranet y se encuentra dentro de un segmento de red interno.
Access-Control-Allow-Origin con valor *
El encabezado Access-Control-Allow-Origin
establecido en valor comodÃn (*
) hace que los navegadores web permitan el acceso a las respuestas solicitadas desde cualquier origen (Origin
).
Última actualización