¿Cuáles son los riesgos de seguridad de establecer Access-Control-Allow-Origin?

Recientemente tuve que establecer Access-Control-Allow-Origin en * para poder hacer llamadas ajax de subdominio cruzado.
Ahora no puedo evitar sentir que estoy poniendo mi entorno en riesgos de seguridad.
Por favor, ayúdame si lo estoy haciendo mal.

Al responder con Access-Control-Allow-Origin: * , el recurso solicitado permite compartir con cada origen. Esto básicamente significa que cualquier sitio puede enviar una solicitud XHR a su sitio y acceder a la respuesta del servidor, que no sería el caso si no hubiera implementado esta respuesta CORS.

Por lo tanto, cualquier sitio puede realizar una solicitud a su sitio en nombre de sus visitantes y procesar su respuesta. Si tiene implementado algo como un esquema de autenticación o autorización basado en algo que el navegador proporciona automáticamente (cookies, sesiones basadas en cookies, etc.), las solicitudes activadas por los sitios de terceros también las usarán.

Esto de hecho presenta un riesgo de seguridad, particularmente si permite el uso compartido de recursos no solo para los recursos seleccionados, sino también para cada recurso. En este contexto, debería echar un vistazo a ¿ Cuándo es seguro activar CORS? .

AFAIK, Access-Control-Allow-Origin es solo un encabezado http enviado desde el servidor al navegador. Limitarlo a una dirección específica (o deshabilitarlo) no hace que su sitio sea más seguro para, por ejemplo, los robots. Si los robots quieren, pueden ignorar el encabezado. Los navegadores habituales (Explorer, Chrome, etc.) por defecto respetan el encabezado. Pero una aplicación como Postman simplemente lo ignora.

El extremo del servidor en realidad no verifica cuál es el ‘origen’ de la solicitud cuando devuelve la respuesta. Simplemente agrega el encabezado http. Es el navegador (el cliente final) que envió la solicitud que decide leer el encabezado de control de acceso y actuar sobre él. Tenga en cuenta que en el caso de XHR puede usar una solicitud especial de ‘OPCIONES’ para solicitar los encabezados primero.

Por lo tanto, cualquier persona con capacidades creativas de scripting puede ignorar fácilmente el encabezado completo, independientemente de lo que esté configurado.

Consulte también Posibles problemas de seguridad al configurar Access-Control-Allow-Origin .


Ahora para responder la pregunta

No puedo evitar sentir que estoy poniendo mi entorno en riesgos de seguridad.

Si alguien quiere atacarte, pueden evitar fácilmente el Access-Control-Allow-Origin. Pero al habilitar ‘*’, le da al atacante unos cuantos ‘vectores de ataque’ más para jugar, como, usando navegadores web regulares que respetan ese encabezado HTTP.

Aquí hay 2 ejemplos publicados como comentarios, cuando un comodín es realmente problemático:

Supongamos que inicio sesión en el sitio web de mi banco. Si voy a otra página y luego regreso a mi banco, todavía estoy conectado debido a una cookie. Otros usuarios en Internet pueden llegar a las mismas URL en mi banco que yo, sin embargo, no podrán acceder a mi cuenta sin la cookie. Si se permiten solicitudes de origen cruzado, un sitio web malicioso puede hacerse pasar por el usuario.

– Brad

Supongamos que tiene un enrutador doméstico común, como un Linksys WRT54g o algo así. Supongamos que el enrutador permite solicitudes de origen cruzado. Una secuencia de comandos en mi página web podría realizar solicitudes HTTP a direcciones IP de enrutador comunes (como 192.168.1.1) y reconfigurar su enrutador para permitir ataques. Incluso puede usar su enrutador directamente como un nodo DDoS. (La mayoría de los enrutadores tienen páginas de prueba que permiten pings o simples comprobaciones del servidor HTTP. Se pueden abusar de ellas en masa).

– Brad

Siento que estos comentarios deberían haber sido respuestas, porque explican el problema con un ejemplo real.