Abuser le filtre XSS pour faciliter une attaque de ClickJacking

Le clickjacking est une attaque relativement répandue visant les utilisateurs d’un site vulnérable X. L’idée est de faire cliquer l’utilisateur sur un endroit du site en question sans qu’il ne s’en rende compte. Le plus souvent, cela est fait en utilisant une iframe cachée sous la souris de l’utilisateur.

[sourcecode language=”html”]<iframe src="http://vulnerable.com" style="position:absolute; opacity:0"></iframe>[/sourcecode]

Afin de contrer cette attaque, beaucoup de sites utilisent des scripts dits de framebusting permettant à une page de ne pas s’afficher si elle détecte qu’elle est à l’intérieure d’une frame.

Le problème le plus évident de ces scripts est que si l’utilisateur a désactivé javascript, la page est tout de même affichée. En partant de ce principe, il est possible d’abuser le filtre XSS d’Internet Explorer 8 par exemple pour le convaincre que le script de framebusting est en fait une attaque XSS. Ceci aura pour conséquence de désactiver le script et de permettre l’attaque de ClickJacking. Typiquement il suffit de créer l’iframe de la manière suivante.

[sourcecode language=”javascript”]<iframe src="http://vulnerable.com/?toto=<script>/*code_frame_busting*/</script>" style="position:absolute; opacity:0"></iframe>[/sourcecode]

Le navigateur détectera alors le code comme étant du XSS et ne l’exécutera pas, ce qui veut dire que la page s’affichera normalement dans la frame.

La méthode la plus efficace pour bloquer le ClickJacking est l’utilisation du header HTTP X-FRAME-OPTIONS qui permet à une page de spécifier par quels autres domaines elle peut être “framée”.

Pour plus d’informations, vous pouvez lire l’article suivant qui contient pas mal de détails sur les différentes techniques de framebusting et de contournement.

http://seclab.stanford.edu/websec/framebusting/framebust.pdf