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