Exploitation CSRF via GraphQL

Performing CSRF exploits over GraphQL

Contexte du lab

Les fonctionnalités de gestion des utilisateurs reposent sur un endpoint GraphQL. Point clé : l’endpoint accepte des requêtes en application/x-www-form-urlencoded, ce qui permet de déclencher une attaque CSRF (un site tiers peut forcer le navigateur de la victime à envoyer une requête valide avec ses cookies).

Objectif : créer une page HTML (hébergée sur l’exploit server) qui, lorsqu’elle est chargée par la victime, modifie son adresse e-mail.

Requête GraphQL observée

Quand on change l’e-mail depuis l’application, la requête envoyée ressemble à

Méthode 1 : CSRF simple avec formulaire (recommandé)

L’idée est de reproduire la mutation GraphQL via un form POST vers l’endpoint GraphQL, avec les champs query, operationName et variables.

Exemple d’exploit à déposer sur l’exploit server :

Résultat attendu : quand la victime ouvre la page, son navigateur envoie la requête et l’e-mail est modifié.

Méthode 2 : format x-www-form-urlencoded “pur” (équivalent)

Ici, on encode directement les paramètres comme le ferait un formulaire classique :

Pratique pour vérifier rapidement à quoi ressemble la requête “form”.

Depuis Burp :

  1. Clic droit sur la requête GraphQL

  2. Engagement toolsGenerate CSRF PoC

  3. Burp produit un HTML prêt à héberger, par exemple :

Mis à jour