Aller au contenu

Clickjacking

Le clickjacking est une attaque par interface où l'utilisateur est incité à cliquer sur un élément actionnable d'un site caché, alors qu'il croit cliquer sur le contenu d'une page piégée. En pratique, une iframe transparente contenant le site cible est superposée à un leurre : un clic apparent sur le leurre est en réalité un clic sur le site dans l'iframe.

Cette attaque diffère du CSRF : ici, l'action s'exécute réellement sur le vrai site, dans la session authentifiée de la victime — le clickjacking est simplement la méthode qui amène l'utilisateur à déclencher l'action sans le savoir.

Le mécanisme CSS

Le clickjacking repose sur la superposition de couches via CSS. On place le site cible dans une iframe quasi transparente (opacity très faible) avec un z-index supérieur à celui du leurre, puis on aligne le leurre pour que son élément visible (« Click me ») coïncide avec le bouton sensible de l'iframe :

<style>
    iframe {
        position: relative;
        width: 700px;
        height: 600px;
        opacity: 0.0001;
        z-index: 2;
    }
    div {
        position: absolute;
        top: 500px;
        left: 60px;
        z-index: 1;
    }
</style>
<div>Click me</div>
<iframe src="https://site-vulnerable.example/my-account"></iframe>

L'utilisateur croit cliquer sur le div, mais le clic atteint le bouton de l'iframe (effet du z-index).

Chaîner avec une XSS DOM

Le clickjacking peut servir à déclencher une autre faille. Si le site contient une XSS basée sur le DOM atteignable via les paramètres d'URL, on charge cette URL piégée dans l'iframe : le clic déclenche alors la charge XSS. On augmente légèrement l'opacité (0.1) pour caler précisément le leurre sur l'élément cible.

Limite : déclencher des fonctions

On ne peut pas vraiment déclencher une fonction JavaScript de la page piégée lors d'un clic dans l'iframe (la politique de même origine l'interdit). Pour des scénarios multi-clics, on peut tenter de contourner cela avec des événements onmouseover, éventuellement temporisés.

Clickbandit

Construire manuellement la page HTML/CSS d'un clickjacking est fastidieux. L'outil Clickbandit, intégré à Burp, génère automatiquement la page d'attaque à partir d'une session enregistrée sur le site cible.

Contourner le frame busting

Pour se protéger, les sites emploient des scripts de frame busting qui détectent si la page est la fenêtre principale ou si elle est intégrée dans une iframe. On contourne ce type de protection avec l'attribut sandbox de l'iframe HTML5 : en le réglant sur allow-forms ou allow-scripts sans inclure allow-top-navigation, le script de détection est neutralisé, l'iframe ne pouvant plus vérifier si elle est la fenêtre principale :

<iframe id="victim_website" src="https://site-vulnerable.example" sandbox="allow-forms"></iframe>

Aide-mémoire

Élément Approche
Superposition Iframe transparente (opacity, z-index) sur un leurre
Alignement Caler le leurre sur le bouton sensible
Chaînage Charger une URL à XSS DOM dans l'iframe
Automatisation Clickbandit (génération de la page d'attaque)
Frame busting Attribut sandbox sans allow-top-navigation

La défense côté serveur repose sur les en-têtes X-Frame-Options ou la directive CSP frame-ancestors, qui empêchent l'intégration de la page dans une iframe d'origine tierce.