La API de Github le permite realizar solicitudes utilizando CORS [ 1 ]. Las solicitudes CORS solo están permitidas por ciertos dominios en la lista blanca:
Se acepta cualquier dominio que esté registrado como una aplicación de OAuth.
Observo lo siguiente:
- La lista blanca de dominios es completamente arbitraria. Cualquiera podría configurar una aplicación github oauth para cualquier dominio. [ 2 ], sin ningún tipo de verificación de dominio en su lugar. Esto significa que cosas como
localhost
,dropbox.com
ya están en la lista blanca. - La lista blanca pierde todo el sentido para una persona con intenciones maliciosas, ya que solo pueden falsificar los encabezados de Origin para cualquier aplicación / dominio.
La Guía de seguridad de HTML5 tiene los siguientes puntos sobre la seguridad de CORS: [ 3 ]
- Un atacante podría usar Javascript con las solicitudes CORS para hacer que los ataques parezcan originados por la víctima. (Punto 3 en Permiso Universal).
- Se coloca una cierta cantidad de confianza en el encabezado de origen.
Hay una cierta cantidad de confianza depositada en el encabezado de Origin. Si la base de esta confianza no se entiende completamente, entonces es posible cometer errores. El encabezado de Origen solo indica que la solicitud proviene de un dominio en particular, no garantiza este hecho. La solicitud en realidad podría ser de un script de Perl que falsifica el encabezado de origen.
- Una persona solo debe registrar un dominio (o usar dominios ya incluidos en la lista blanca, como dropbox.com) para que sus solicitudes CORS funcionen. Esto aún podría llevar a un "html puro" en el escenario de ataque anterior.
- Toda la API de github ya está disponible a través de JSONP también [ 4 ]. Incluso no autenticado, lo que significa que el ataque "html puro" podría ocurrir en cualquier caso.
Mi pregunta es: ¿Github obtiene algo (desde un punto de seguridad) mediante la inclusión de dominios en la lista blanca (para el acceso a API) o es solo una sensación de seguridad fuera de lugar?