Bypass SameSite Strict via domaine frère (sibling domain)

SameSite Strict bypass via sibling domain

Laboratoire : la fonctionnalité de chat en direct est vulnérable à du « cross-site WebSocket hijacking » (CSWSH). L'objectif du labo est d'accéder au compte de la victime en exfiltrant l'historique du chat vers le serveur Burp Collaborator par défaut ; l'historique contient les identifiants en clair.

Utiliser le serveur d'exploit fourni pour lancer une attaque CSWSH qui exfiltre l'historique du chat de la victime.

Le chat fonctionne via WebSocket et l'historique y transite.

Le cookie de session est envoyé avec SameSite (bloquant les scénarios classiques de redirection cross-site).

Le fichier JavaScript côté client (ex. chat.js) est chargé depuis un sous-domaine CMS qui renvoie un en-tête Access-Control-Allow-Origin permettant une interaction depuis ce sous-domaine.

Le panneau d’authentification du CMS est vulnérable à une injection de script via le paramètre username (ex. ?username=<script>alert(0)</script>&password=test).

En exploitant cette injection, on peut exécuter du JavaScript dans le contexte du sous-domaine vulnérable, et ainsi établir un WebSocket authentifié (les cookies sont alors envoyés, puisque l’origine est la même) vers le serveur de chat.

Approche (résumé)

  1. Placer un script malveillant dans le paramètre username du formulaire de login du sous-domaine CMS.

  2. Ce script ouvre une connexion WebSocket vers le serveur de chat et envoie un signal READY.

  1. À la réception de messages depuis le WebSocket (l’historique du chat), le script fetche ces données (encodées en base64) vers un serveur contrôlé par l’attaquant (OAST/Oastify).

Héberger/servir un redirect sur l’exploit server pour pousser la victime à visiter l’URL vulnérable (login avec username contenant le script).

Résultats observés

  • Lorsqu’on a reçu la requête exfiltrée, le paramètre data contenait une chaîne base64 ; en la décodant on obtient l’entrée du chat.

  • Exemple de payload reçu (base64 décodé) :

En injectant depuis le contexte authentifié (sous-domaine CMS), le script a transmis des messages contenant les conversations de l’utilisateur et, dans ce cas, un message contenant les identifiants en clair.

Identifiants extraits (tel que noté)

  • carlos:hdf3fkk8h7tnltupqs5t (identifiants retrouvés dans l’historique du chat)

Mis à jour

Ce contenu vous a-t-il été utile ?