Découverte d’un endpoint GraphQL caché
Finding a hidden GraphQL endpoint
Contexte du laboratoire
Les fonctionnalités de gestion des utilisateurs de ce laboratoire reposent sur un endpoint GraphQL caché. Il n’est pas possible de le découvrir simplement en naviguant sur le site, et des mécanismes de défense contre l’introspection GraphQL sont en place.
Objectif :
Identifier l’endpoint GraphQL caché
Supprimer l’utilisateur carlos

Reconnaissance initiale
En naviguant normalement sur l’application, aucun indice visible ne révèle l’utilisation de GraphQL. Il est donc nécessaire de tester manuellement les chemins GraphQL les plus courants.
Tests des routes GraphQL classiques
Les routes suivantes sont testées
La route /api répond avec le message suivant :
Cela indique clairement la présence d’un endpoint GraphQL actif.

Vérification du filtrage de l’introspection
Une requête d’introspection simple est envoyée via l’URL :
Réponse du serveur :
GraphQL introspection is not allowed, but the query contained __schema or __type

Le même blocage se produit lors de l’envoi d’une requête d’introspection complète via Burp ou GraphiQL.

Contournement du blocage de l’introspection
Pour contourner le filtrage basé sur les mots-clés __schema et __type, un saut de ligne est ajouté avant l’accolade ouvrante :
Cette légère modification permet à la requête d’être acceptée et traitée par le serveur.

Analyse du schéma GraphQL
Une fois l’introspection acceptée, les requêtes découvertes sont envoyées vers le sitemap afin d’être analysées plus facilement.

Deux requêtes importantes sont identifiées.

Récupération d’un utilisateur par ID
Requête permettant d’obtenir le nom d’utilisateur à partir de son identifiant :
En fournissant l’ID suivant :
On identifie que l’utilisateur avec l’ID 3 correspond à carlos.

Suppression de l’utilisateur carlos
Une mutation permet de supprimer un utilisateur de l’organisation :
Payload utilisé :
L’utilisateur carlos est alors supprimé avec succès.

Mis à jour