Exposition accidentelle de champs privés

Accidental exposure of private GraphQL fields

Contexte du lab

Les fonctionnalités de gestion des utilisateurs reposent sur un endpoint GraphQL. Le lab contient une faiblesse de contrôle d’accès : il est possible de forcer l’API à révéler des champs sensibles (identifiants / mots de passe). Objectif : se connecter en administrateur puis supprimer l’utilisateur carlos.

Requête GraphQL observée

Une requête classique observée côté client :

Introspection GraphQL

L’introspection est utilisable via une IntrospectionQuery (schéma complet : types, queries, mutations, etc.). Requête envoyée :

Le serveur répond 200 OK, ce qui confirme que l’introspection est activée.

Analyse des requêtes dans le Site map

En envoyant les requêtes vers Target → Site map, plusieurs queries apparaissent (environ 5).

Une query ressort : getUser.

Exposition des champs privés via getUser

Query identifiée :

Cette query expose le champ password.

Version GraphQL équivalente :

En remplaçant id: 0 par id: 1, l’API retourne le username et le password de administrator :

Mis à jour