Realizando POCs de clickJacking con Jack

En una auditoría, cuando se intenta justificar la existencia de una vulnerabilidad se suele recurrir a una prueba de concepto (también conocida como Proof Of Concept o POC). Dicha prueba en ocasiones suele suponer la dedicación de un tiempo valioso que se le ha de restar a la redacción del informe en su conjunto.

Este artículo se centrará en la vulnerabilidad de clickjacking y en cómo realizar una POC que justifique su existencia de forma rápida y sencilla. Para ello se utilizará Jack (disponible en el siguiente enlace) que fue presentado en el Black Hat EU 2015 Arsenal.

Clickjacking aparece cuando es posible cargar una web externa mediante un iframe sobre la original. Aprovechando esta posibilidad, un usuario con malas intenciones puede sobreponer los elementos que le interesen de la web original mediante un iframe transparente. De esta forma, cuando la víctima pulse o introduzca cierta información, estará interactuando sobre un recurso incluido por el atacante en lugar de con la web legítima que es la que se encuentra debajo. Como de costumbre, el proyecto OWASP facilita el siguiente enlace con más información.

Jack es una herramienta que permite realizar las POC de clickjacking arrastrando y soltando los campos del formulario a suplantar para ahorrar tiempo. Su instalación es muy simple, solo hay que clonar su repositorio GitHub (git clone https://github.com/sensepost/jack.git) y acceder a la carpeta resultante. Escrito con HTML y JavaScript basta con acceder al index.html:

img1

Para ver cómo funciona, se utilizará la siguiente página que simula un portal de acceso. Los campos Username y Password junto con el botón Sign In serán los que posteriormente serán superpuestos en el iframe:

img2

A continuación, desde la ventana de Jack se sitúa la URL en el campo del mismo nombre y al pulsar en Load, si la página es vulnerable a clickjacking, aparecerá cargada debajo del iframe de Jack. Siguiendo con el ejemplo, el resultado es el que sigue:

img3

Solo queda situar los campos Email, Password y Login sobre los correspondientes del formulario y pulsar en View. Acto seguido se abrirá una nueva pestaña que contendrá la prueba de concepto lista:

img4

La nueva pestaña abierta contiene la página legítima y sobre ésta el iframe con los campos que sustituyen a los originales. Al rellenar los campos y pulsar en Sign In aparecerá en pantalla la información introducida en ambos campos del formulario:

img5

Con esta herramienta es muy rápido el proceso para realizar las pruebas de concepto. Además, Jack también permite modificar el estilo de los campos junto con el código JavaScript asociado para adaptarlo al del formulario que sobrepone (dichas opciones aparecen en la interfaz de éste debajo de los botones Load y View).

Para acabar con esta aplicación, también está disponible la interfaz antigua de Jack que permite situar los elementos mediante coordenadas en lugar de arrastrando y soltando. Para acceder a ella basta con abrir el archivo HTML llamado oldIndex.html:

img6

Existen otras herramientas para realizar pruebas de concepto sobre clickjacking, como por ejemplo la extensión Clickjacking Test para el navegador Google Chrome (disponible en la Store de éste) que posee un botón para tal fin. El problema es que ninguna sitúa los elementos sobre los que se desea reemplazar como lo hace Jack que realmente es lo que más tiempo requiere.

Para finalizar la entrada, la mejor forma de mitigar estos ataques es la utilización, por parte del servidor, de la cabecera X-Frame-Options. El proyecto OWASP detalla ésta y otras medidas para tal fin en el siguiente enlace.

Comments

  1. Muy interesante el post. Precisamente el clickjacking es una técnica bastante díficil de hacer entender a un cliente si este no tiene grandes conocimientos técnicos. No obstante, si utilizáis Burp Suite para auditorías Web, me imagino que sabréis que PortSwigger incorporó dicha funcionalidad en la versión 1.6.33 del mismo.

    Burp Suite Clickbandit:
    http://blog.portswigger.net/2015/12/burp-clickbandit-javascript-based.html

    Un saludo.