Aller au contenu principal
Expert Cybersécurité & IAv9.0
Centres de ressources conformité
Besoin d'un accompagnement expert ?
Devis personnalisé sous 24h — audit, conformité, incident
Checklists Sécurité — Audit & Durcissement
Formats disponibles
📄 PDF 📊 Excel 🌐 Web

11 checklists professionnelles couvrant 2 200+ points de contrôle. Téléchargement gratuit, aucune inscription.

GraphQL Security Testing

devsecops

Définition

Le GraphQL Security Testing désigne l'ensemble des tests de sécurité spécifiques aux APIs GraphQL, qui présentent des vecteurs d'attaque différents des APIs REST classiques en raison de leur nature flexible (un seul endpoint, queries définies par le client, introspection exposant le schéma complet). Cette flexibilité, qui est la force de GraphQL, crée également des risques de sécurité uniques nécessitant des approches de test adaptées. Les vulnérabilités spécifiques à GraphQL incluent : l'introspection non désactivée en production (un attaquant peut récupérer le schéma complet de l'API via une requête __schema, cartographiant l'ensemble des types, champs, et mutations disponibles), les DoS par requêtes imbriquées (les queries GraphQL peuvent être récursives — une query demandant les amis des amis des amis jusqu'à N niveaux peut générer des millions de requêtes DB), les BOLA/IDOR via les types Union (accès à des champs de différents types via les interfaces GraphQL, contournant les vérifications d'autorisation partielles), les injections via les arguments de field (les résolveurs GraphQL peuvent être vulnérables aux mêmes injections que les APIs REST), et les Batch Attacks (exécution de centaines de mutations en un seul document GraphQL, contournant le rate limiting basé sur le nombre de requêtes HTTP). Les outils de test de sécurité GraphQL incluent : GraphQL Voyager (visualisation du schéma — utile en reconnaissance), InQL (extension Burp Suite pour la génération de queries depuis le schéma, le scan d'injection, et les tests de Batch Attacks), BatchQL (détection des batch attacks GraphQL), graphql-threat-matrix (référentiel des attaques GraphQL avec tests par implémentation), et Clairvoyance (découverte de schéma GraphQL même quand l'introspection est désactivée). La sécurisation de GraphQL nécessite des contrôles spécifiques : désactivation de l'introspection en production, limites de profondeur de query (max-depth), limites de complexité (max-complexity calculée depuis l'arbre de query), et persisted queries (liste blanche de queries autorisées en production).

Vulnérabilités GraphQL les plus exploitées

Les vulnérabilités GraphQL fréquentes en pentest : 1) Introspection activée en production (révèle tout le schéma : types, champs, mutations — cartographie complète sans authentification). 2) Absence de rate limiting par opération (une seule requête HTTP peut contenir 100 mutations via le batching). 3) N+1 Query sans limite de profondeur (query { user { friends { friends { friends { ... } } } } } génère des milliers de requêtes DB). 4) Authorization bypass via les fragments (les checklists d'autorisation appliquées aux fields peuvent être contournées via les inline fragments). 5) Alias abuse (exécuter la même mutation des milliers de fois via des alias dans un seul document GraphQL).

Outils de test GraphQL

Outils de test de sécurité GraphQL : InQL (Burp Extension) — génère des queries de fuzzing depuis le schéma, détecte les injections dans les arguments de field. GraphQLmap — outil CLI de fuzzing et d'exploitation GraphQL (injection, brute force d'introspection). Clairvoyance — découverte de schéma GraphQL même si l'introspection est désactivée (via énumération par force brute des noms de champs communs). graphql-cop — outil de scan de sécurité GraphQL automatisé (détecte l'introspection, les batch attacks, les field suggestions qui peuvent aider la reconnaissance).

Sécuriser GraphQL en production

Contrôles de sécurité essentiels pour GraphQL en production : 1) Désactiver l'introspection en production (option dans Apollo Server, GraphQL.js, Strawberry). 2) Persisted Queries (liste blanche de queries pré-approuvées identifiées par hash, bloquant les queries arbitraires). 3) Query Complexity limits (chaque field a un coût, la requête est rejetée si le coût total dépasse un maximum). 4) Depth limiting (max-depth de l'arbre de query configurable). 5) Rate limiting par opération GraphQL (pas seulement par requête HTTP). 6) Authorization au niveau des resolvers (pas juste au niveau des routes HTTP — chaque resolver vérifie les permissions de l'utilisateur).

Articles liés

Un projet cybersécurité ?

Expert dispo · Réponse 24h

Devis