Tous les articles
bug-bounty

Comment j'ai trouvé une IDOR critique en bug bounty avec mon propre outil

Récit d'une IDOR critique trouvée sur un programme bug bounty via une mutation GraphQL non protégée détectée par Sentinelle en quelques minutes.

SentinelleChris21 mai 2026Mis à jour le 22 mai 2026
3 min de lecture7 lectures
Comment j'ai trouvé une IDOR critique en bug bounty avec mon propre outil

J’ai trouvé une IDOR critique sur un programme bug bounty avec mon propre outil Sentinelle

Voici exactement comment, étape par étape.

C’est le genre de vulnérabilité qui se cache dans les mutations GraphQL que presque personne ne regarde vraiment.

L’attaque en une phrase

Une mutation GraphQL acceptait un userId directement dans le corps de la requête, sans vérifier que l’utilisateur authentifié avait réellement le droit de modifier ce profil.

Résultat : n’importe quel utilisateur connecté pouvait changer l’email d’un autre compte puis prendre le contrôle total via reset de mot de passe.

Étape 1 Sentinelle détecte l’API GraphQL

Je lance Sentinelle sur le scope autorisé.

Quelques secondes plus tard, l’agent identifie un endpoint /graphql et tente automatiquement une introspection la méthode standard permettant de récupérer le schéma complet d’une API GraphQL.

Résultat :

  • schéma exposé en production

  • types accessibles

  • queries visibles

  • mutations entièrement listées

Première red flag : laisser l’introspection activée en production est presque toujours une mauvaise idée.

Étape 2 Une mutation anormale

Sentinelle mappe automatiquement toutes les mutations et leurs arguments.

Une attire immédiatement l’attention :

graphql
mutation updateUserProfile(userId: ID!, email: String, ...)

Le problème saute aux yeux :

le userId est fourni directement côté client.

C’est un pattern classique d’IDOR.

Si le backend ne revalide pas que l’utilisateur authentifié possède les droits sur l’objet ciblé, n’importe quel compte peut potentiellement modifier celui d’un autre utilisateur.

Étape 3 La validation du bug

Je me connecte avec un compte de test.

Je récupère ensuite l’ID d’un autre utilisateur trivialement accessible via une query publique puis j’exécute la mutation suivante :

graphql
mutation {
  updateUserProfile(
    userId: "VICTIM_ID",
    email: "attacker@evil.com"
  )
}

Réponse :

HTTP
200 OK

Le profil de la victime est modifié.

Aucune vérification d’autorisation.
Aucune restriction côté serveur.

Étape 4 L’impact réel

À partir de là, n’importe quel utilisateur authentifié peut :

  • modifier l’email d’un autre compte

  • déclencher un reset de mot de passe

  • recevoir le lien de réinitialisation

  • prendre le contrôle complet du compte

  • accéder aux données privées de la victime

Sur une plateforme avec une base utilisateurs importante, c’est un scénario de takeover massif.

CVSS estimé : supérieur à 9.

Ce que Sentinelle a fait automatiquement

Pendant que je validais le comportement métier, l’agent avait déjà :

  • détecté GraphQL automatiquement

  • confirmé que l’introspection était activée

  • cartographié toutes les mutations

  • identifié les arguments sensibles (*Id)

  • généré des payloads de test exploitables immédiatement

  • préparé les requêtes de validation

Ce qui m’aurait pris plusieurs heures de recon manuelle et de revue de schéma a été réduit à quelques minutes.

Mon rôle s’est résumé à :

  • valider l’impact

  • relire le rapport

  • soumettre le bug

Le vrai problème avec GraphQL

Les mutations GraphQL sont probablement l’un des angles morts les plus fréquents en bug bounty aujourd’hui.

Le pattern revient constamment :

  • le front-end envoie librement des IDs

  • le backend suppose que l’authentification suffit

  • personne ne vérifie réellement l’autorisation au niveau de l’objet ciblé

Et c’est exactement là que les IDOR apparaissent.

La règle à retenir

Chaque mutation qui accepte un identifiant d’objet (userId, accountId, projectId, etc.) doit revalider les autorisations côté serveur.

Pas seulement vérifier la session.

Vérifier explicitement que l’utilisateur a le droit d’agir sur cet objet précis.

C’est cette différence qui sépare une API sécurisée d’une prise de contrôle de compte.

Takeaway

Les agents offensifs changent complètement la vitesse à laquelle ce type de vulnérabilité peut être découvert.

La détection ne repose plus uniquement sur de longues heures de recon manuelle ou sur l’intuition d’un pentester.

Le raisonnement devient automatisable.

Et les workflows GraphQL mal sécurisés deviennent des cibles extrêmement faciles à explorer à grande échelle.

Si tu fais du bug bounty, les mutations GraphQL sont probablement un meilleur terrain de chasse aujourd’hui que beaucoup de surfaces “classiques”.

Cet article vous a plu ?

Chris

Écrit par

Chris

Constructeur de solutions tech · IA agentique & sécurité offensive

Passionné de tech et constructeur de produits, je bâtis Sentinelle — un agent IA autonome de sécurité offensive. J'écris ici sur l'IA agentique, le pentest assisté par IA et ce que j'apprends en construisant des outils offensifs.

Articles liés