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 :
Clic droit sur la requête GraphQL
Engagement tools → Generate CSRF PoC
Burp produit un HTML prêt à héberger, par exemple :