miércoles, 10 de agosto de 2011

HTML5 [III]: Rompiendo medidas anti-Clickjacking

Saludos,

Continuamos hablando de HTML5 y sus implicaciones futuras en la seguridad, como ya hicimos anteriormente. En esta ocasión vamos a comentar la posibilidad de bypassear una de las medidas más comunes para evitar el clickjacking, utilizando para ello las innovaciones que se están implantando con HTML5.

La medida contra Clickjacking más común que adoptan las páginas webs es el Frame Busting, consistente en comprobar el atributo location, y si este es diferente al que debiera ser se manda la navegación a la página correcta. Normalmente se suele establecer este control usando un script sencillo en JS:


<script type="text/javascript">
if (top.location != location) top.location = self.location;
</script>



Entre los nuevos atributos introducidos con HTML5 se encuentra "sandbox", el cual permite añadir restricciones extra al contenido de un iframe. De esta forma se puede bloquear la ejecución de JavaScript, de formularios, etc. al cargar dentro del sandbox el iframe. Como exponen en este advisory la propia naturaleza del atributo sandbox deshabilita la protección contra ClickJacking, puesto que impide la ejecución del código JS que lleva a cabo tal acción.



Otra posible forma de evitar esta protección es usando el evento OnBeforeUnload (evento del cual ya hablamos en el anterior post) . Podemos usar este evento para que devuelva algún mensaje, provocando que el usuario lo cancele y permita visualizar el iframe dirigido a la víctima. Un posible PoC (extraído de JavaScrip.info) sería:

<script>
window.onbeforeunload = function() {
window.onbeforeunload = null
return "Maybe you want to leave the page, before you become rich?!?"
}
</script>

<iframe src="http://victima.com"></iframe>


Para ampliar más sobre el tema del bypass de los frame busters hay una publicación muy interesante que recomiendo:

Busting frame busting
5 0verl0ad Labs: HTML5 [III]: Rompiendo medidas anti-Clickjacking Saludos, Continuamos hablando de HTML5 y sus implicaciones futuras en la seguridad, como ya hicimos anteriormente. En esta ocasión vamo...

2 comentarios:

Axelite dijo...

Interesante, muy interesante!
el unico inconveniente es que da la opcion de salir.
Conoces alguna variacion para que no de la opcion?
un saludo!

The X-C3LL dijo...

@Axelite el usuario visualizará el iframe en el momento de cancelar el mensaje, no antes. De esta forma si no diéramos opción alguna no podría realizarse el bypass.

De todas maneras, desconozco si hay alguna forma para dejarlo de forma vitalicia, supongo que únicamente se podría hacer a través de algún fallo del navegador, pero no estoy seguro.

< >