# CSRF

Pour qu'une faille de type CSRF, on doit rencontrer ces trois conditions :&#x20;

* [x] **Une action pertinente**. Il y a une action dans l'application que l'attaquant a une raison d'induire. Il peut s'agir d'une action privilégiée (telle que la modification des autorisations d'autres utilisateurs) ou de toute action sur des données spécifiques à l'utilisateur (telle que la modification du mot de passe de l'utilisateur).
* [x] **Gestion de session basée sur les cookies**. L'exécution de l'action implique l'émission d'une ou plusieurs requêtes HTTP, et l'application s'appuie uniquement sur les cookies de session pour identifier l'utilisateur qui a fait les requêtes. Il n'existe aucun autre mécanisme en place pour suivre les sessions ou valider les demandes des utilisateurs.
* [x] **Aucun paramètre de requête imprévisible**. Les requêtes qui exécutent l'action ne contiennent aucun paramètre dont les valeurs ne peuvent pas être déterminées ou devinées par l'attaquant. Par exemple, en incitant un utilisateur à changer son mot de passe, la fonction n'est pas vulnérable si un attaquant a besoin de connaître la valeur du mot de passe existant.

## 1. CSRF Basique :&#x20;

<figure><img src="https://1236449586-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnLNcn403FNHCLyLwYmTO%2Fuploads%2FtFGoLCPHhYlJYI99rc3L%2Fimage.png?alt=media&#x26;token=cea9cbbc-71e1-4e9a-9264-5a28d6841542" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1236449586-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnLNcn403FNHCLyLwYmTO%2Fuploads%2Fz3hdy9AKY6wU80IrQ6Dt%2Fimage.png?alt=media&#x26;token=05b5a2f8-200b-4674-8fec-73e2db101470" alt=""><figcaption></figcaption></figure>

Le cookie n'a pas le bon attribut ce qui rend possible la csrf

{% embed url="<https://owasp.org/www-project-web-security-testing-guide/latest/4-Web_Application_Security_Testing/06-Session_Management_Testing/02-Testing_for_Cookies_Attributes>" %}

## 2. Bypass CSRF token

On peut bypass à cause d'une mauvaise implementation de celui-ci ou une mauvaise utilisations

### 2.1 CSRF verification depends on HTTP methode

On peut contourner le csrf token en changeant la methode http utilisé :&#x20;

<figure><img src="https://1236449586-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnLNcn403FNHCLyLwYmTO%2Fuploads%2FX6AA6xLnaNpmw1OBbVSK%2Fimage.png?alt=media&#x26;token=819d9593-7d65-4b54-b289-e1dcb8e14c02" alt=""><figcaption></figcaption></figure>

On change la méthode POST en GET et on arrive a bypass :&#x20;

<figure><img src="https://1236449586-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnLNcn403FNHCLyLwYmTO%2Fuploads%2F78s64NOz7AOik8JeCaNZ%2Fimage.png?alt=media&#x26;token=af6a3329-e29b-4a4c-8c94-1eb46e360693" alt=""><figcaption></figcaption></figure>

Résultat avec CSRF PoC generator :&#x20;

<figure><img src="https://1236449586-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnLNcn403FNHCLyLwYmTO%2Fuploads%2F4aOPkyhhFcNeTgau0jgT%2Fimage.png?alt=media&#x26;token=60fd78dd-1e0d-4f5f-ac6a-cfd66dbc2ea3" alt=""><figcaption></figcaption></figure>

### 2.3 Bypass en supprimant le token

Dans certaines situations, l'application va vérfié si le token est le bon mais si aucun token ne lui est présenté la vérification n'est pas faite et est juste skip :&#x20;

J'essaye en mettant un token invalide :&#x20;

<figure><img src="https://1236449586-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnLNcn403FNHCLyLwYmTO%2Fuploads%2FkUhNQeERu2gotg2tLICO%2Fimage.png?alt=media&#x26;token=549f1490-2fe8-4d68-919b-0bd9555a48bf" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1236449586-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnLNcn403FNHCLyLwYmTO%2Fuploads%2FAcN7FUoslgXbX837zT7s%2Fimage.png?alt=media&#x26;token=ca99b2f2-06f2-492a-a6c6-111a6f5ba0ab" alt=""><figcaption></figcaption></figure>

### 2.4 Bypass : Le jeton CSRF n'est pas lié à la session utilisateur

Certaines applications ne valident pas que le jeton appartient à la même session que l'utilisateur qui fait la demande. Au lieu de cela, l'application gère un pool global de jetons qu'elle a émis et accepte tout jeton qui apparaît dans ce pool.

Dans cette situation, l'attaquant peut se connecter à l'application en utilisant son propre compte, obtenir un jeton valide, puis transmettre ce jeton à l'utilisateur victime dans son attaque CSRF.

### 2.5. Bypass : Le jeton csrf token lie au crsf cookie&#x20;

Par moment, un cookie csrf peut être présent : Voir si il est lié au csrf token. Utilisé un couple de csrf token/cookie d'un autre compte. Et généralement cela suit avec une injection de header afin d'y insérer le token cookie lié au csrf token

### 2.6 Bypass : CSRF token & CSRF Cookie identique:

<figure><img src="https://1236449586-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnLNcn403FNHCLyLwYmTO%2Fuploads%2F8EmMkKdA6muIxazRhL5O%2Fimage.png?alt=media&#x26;token=196b7b84-b8f4-401c-8a88-4cbbbb10462c" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1236449586-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnLNcn403FNHCLyLwYmTO%2Fuploads%2Fv0UEHZhkwa8FjxKvAgbf%2Fimage.png?alt=media&#x26;token=0df96b37-3627-4bac-b3a1-18536728f878" alt=""><figcaption></figcaption></figure>

## 3. Cookie de session avec attribut SameSite

<figure><img src="https://1236449586-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnLNcn403FNHCLyLwYmTO%2Fuploads%2FJLWJ0qMDBlvEcJOybA2a%2Fimage.png?alt=media&#x26;token=1980fd2d-7716-4f6d-9e58-0cfd5554346f" alt=""><figcaption></figcaption></figure>

[#5.1-lattribut-strict](https://ajin-1.gitbook.io/documentation/web/checklist#5.1-lattribut-strict "mention")

[#5.2-lattribut-lax](https://ajin-1.gitbook.io/documentation/web/checklist#5.2-lattribut-lax "mention")
