lunes, septiembre 12, 2016

Ataques de Phishing a Webs con Links en Target="_Blank" sin modificador NoOpener

Cuando en una página web se añada un enlace, y el visitante hace clic en él, automáticamente el navegador hace una redirección hacia la página indicada en el hipervícunlo. Es decir, a la URL indicada en el valor href del enlace en la etiqueta HTML. Para evitar que esto suceda, en la página donde se pone el enlace con la etiqueta a href se puede añadir un modificador llamado Target que puede tener diferentes valores como "_self", "_top", "_parent", el nombre de un iframe o "_blank", que hace que el navegador abra el contenido del enlace en una nueva pestaña o ventana.

Figura 1: Ataques de Phishing a webs con links en Target="_blank" sin NoOpener

En este entorno, cuando la Pestaña1 que tiene el contenido del SitioA ha establecido un hipervínculo al SitioB con el modificador Target="_blank", el documento enlazado se mostrará en una nueva Pestaña2. Y hasta ahí, un proceso muy normal que muchas páginas web realizan.

Figura 2: Modificador Target de la etiqueta A para crear hipervínculos

Ahora bien, la Pestaña2 guarda cierta relación aún con la Pestaña1 después de este proceso. Incluso si se ha abierto con el modificador Target="_blank", el contenido abierto en la Pestaña2 puede hacer navegar la Pestaña1 hacia una dirección arbitraria, accediendo a esa ventana por medio del manejador Window.Opener. Es decir, un enlace en el SitioA que se muestra en la Pestaña1 y que apunta al SitioB con un enlace con Target="_blank", da acceso al SitioB para hacer desde la Pestaña2 que la Pestaña1 navegue a dónde él quiera.

Figura 3: Manejador window.opener

Si el propietario del SitioB detecta que el manejador Window.Opener trae una referencia valida a una ventana, aún podría saber más sobre la ventana en la estaba, accediendo al valor Document.Referer para saber si viene de Facebook, de Twitter o de cualquier otro sitio en el que pueda estar incrustado un hipervínculo al SitioB. Con esta información, un SitioB malicioso podría intentar hacer un ataque de Phishing al SitoA, haciendo que la Pestaña1 original navegue a una web de Phishing creada especialmente para cada tipo de SitioA del que se proceda.

Figura 4: Propiedad Document.Referrer de una ventana

La experiencia para el usuario sería que hace clic en un enlace en una pestaña, se abre otra pestaña donde se carga el contenido del hipervínculo que toma el primer plano del navegador, y por detrás la pestaña original navega hacia un sitio que es una copia de Phishing especialmente creada, haciendo creer al usuario cuando regrese a la pestaña original que, por ejemplo, se le ha cerrado la sesión y tiene que volver a introducir las credenciales. Esto lo ha publicado el investigador Ben Harpelm, y afecta a multitud de aplicaciones web, y servicios de Internet.

Una servidor para hacer Phishing

Es muy sencillo hacer la comprobación para saber si a tu web se está llegando a través de un Target="_blank". Es suficiente con añadir un código que compruebe si el manejador Winddow.Opener tie un valor null . Si no está vacío, entonces de puede forzar que se haga un redirect en la página origen con una llamada tan sencilla como ésta.

Figura 5: Redirección a sitio que crea el phishing apropiado para cada referrer

Para evitar esto, los enlaces deben añadir un modificador rel="noopener" que hace que en la nueva ventana el contenido de Window.Opener se transfiera con valor null. Este modificador no funciona aún en Mozilla Firefox. Para proteger los enlaces Target="_blank" contra cualquier intento de ataque similar en la página destino, se debe añadir rel="noopener noreferrer" para que además de no transferir el manejador de Window.Opener no se de información de cuál es la página que hace el enlace con Document.Referrer y evitar que se pueda hacer un ataque de Phishing dependiendo de la dirección web del sitio del que proviene el usuario.

Figura 6: Valores del modificador rel de la etiqueta A para crear hipervínculos

Si se quiere añadir más protección ante un posible navegador que no entienda el modificador noopener, una posible solución es asegurarse de configurar manualmente el valor de Window.Opener en la nueva ventana abierta, mediante este pequeño script.

Figura 7: Para borrar el valor de Window.opener

La verdad es que los ataques que se pueden hacer con esta técnica son similares a las técnicas de tabnabbing, pero en este caso aprovechándose de enlaces legítimos en las webs de procedencia, así que merece la pena que siempre que se añada un enlace en una aplicación crítica se añadan las opciones de noreferrer y noopener en tus enlaces para evitar facilitar que le hagan ataques de Phishing a tus visitantes.

Saludos Malignos!

1 comentario:

Jose Vicentre Maestre dijo...
Este comentario ha sido eliminado por el autor.

Entrada destacada

Infraestructuras Críticas y Sistemas Industriales: Auditorías de Seguridad y Fortificación de @0xWord

Desde hoy está disponible a la venta un nuevo libro de 0xWord centrado en la seguridad de los Sistemas Industriales y las Infraestructuras...

Entradas populares