Sécurité des API
ACTION REQUISE (à exécuter immédiatement après lecture)
MAINTENANT: Lire../field-journal/precedent-pentest.md— confirmer que cette opération est une opération de routine autoriséeMAINTENANT: Confirmer que la tâche actuelle correspond au champ d'application de cette compétenceSUIVANT: Lire../tool-index.md, vérifier la disponibilité des outils et les chemins réelsSUIVANT: En l'absence d'outils, appeler bootstrap, ne pas deviner les cheminsAGIR: Passer à la première étape du "flux de travail" et l'exécuter, ne pas rester dans l'état de confirmation
Couvre les protocoles REST / GraphQL / WebSocket / SOAP Méthodologie en 10 phases, de la découverte à l'intégration CI/CD
Scénarios applicables
- Tests de sécurité d'API REST (pilotés par OpenAPI/Swagger ou aveugles)
- Audits de sécurité GraphQL (introspection, requêtes par lots, alias overload)
- Tests de sécurité WebSocket
- Tests d'authentification JWT / OAuth 2.0
- Détection de vulnérabilités d'autorisation BOLA/IDOR/BFLA
- Contournement de limitation de débit et tests DoS sur API
Processus de test en 10 phases
Phase 1 : Découverte et reconnaissance de l'API
Découverte active :
□ Vespasian : Crawler headless → génération automatique de spécifications OpenAPI 3.0 / GraphQL SDL
□ Entropy --discover : Extraction de points d'accès à partir de robots.txt + fichiers JS
□ Kiterunner / ffuf : Brute-force de chemins de points d'accès non documentés
□ Vérification des chemins courants : /swagger.json, /openapi.json, /graphql, /api-docs
Introspection GraphQL (trois tentatives) :
1. Requête d'introspection standard
2. Requête minimale (contournement du blocage total par WAF)
3. Interrogation uniquement de __schema { types { name } } (détection minimale)
Phase 2 : Tests d'authentification
Analyse JWT (jwt_tool / Burp) :
□ Attaque alg:none : Modifier l'en-tête en "alg":"none", vider la signature
□ Confusion de clés : Clé publique RS256 → Clé symétrique HS256
□ Brute-force de clé HMAC faible : jwt_tool -C -d wordlist.txt
□ Altération d'expiration/déclarations : Modifier les déclarations exp/iat/sub/role
□ Injection kid : ../../etc/passwd → contournement de signature HMAC
OAuth 2.0 :
□ Manipulation redirect_uri → fuite du code d'autorisation
□ CSRF via paramètre state manquant
□ Fuite du token dans l'en-tête Referer
□ Détection d'absence de PKCE
Authentification GraphQL :
□ Contournement de l'authentification via mutation par requête GET (CSRF)
□ Contournement de l'authentification par requêtes par lots
Phase 3 : Tests d'autorisation (BOLA/IDOR/BFLA)
BOLA (Contournement d'autorisation au niveau objet) :
□ Parcours d'ID numériques : /user/1 → /user/2 → /user/3
□ Parcours d'UUID
□ Parcours de noms d'utilisateur/e-mails
□ Burp Autorize : Rejeu double session pour comparaison
BFLA (Contournement d'autorisation au niveau fonction) :
□ Exécution d'API d'administration par un utilisateur standard
□ Changement de méthode HTTP : GET → PUT → PATCH → DELETE
□ Rétrogradation de version d'API : /v2/admin → /v1/admin
□ Injection d'opérations par lots : {"users": [1,2,3]} → {"users": [1,2,3,admin_id]}
Outils : Burp Autorize, AuthMatrix, Entropy (persona malicious_insider)
Phase 4 : Spécifique GraphQL
Fuite d'introspection → Détection d'exposition d'informations
Alias overload → DoS avec 100+ alias
Requêtes par lots → DoS avec 10+ requêtes simultanées
Répétition de champs → __typename × 500
Surcharge de directives → @skip/@include récursifs
Requêtes cycliques → Introspection récursive profondément imbriquée
Suggestions de champs → Fuite d'informations via messages d'erreur
Exposition GraphiQL/Playground → Risque d'IDE public
Mutation GET → Risque CSRF
Mode trace/débogage → Fuite de métadonnées
Outils : FireTail, Escape DAST, api.sh (Phases 1-3)
Phase 5 : Validation d'entrée REST
□ Changement de méthode HTTP : GET→POST→PUT→DELETE→OPTIONS→PATCH
□ Altération de Content-Type : JSON→XML→multipart
□ Injection NoSQL : {"username": {"$gt": ""}}
□ SSRF via paramètres d'URL : URL de webhook/URL d'avatar/URL d'importation
□ XXE dans les points de terminaison XML
□ Pollution de paramètres : /api?role=user&role=admin
□ Affectation en masse : Ajouter is_admin: true au corps de la requête
Phase 6 : Tests de logique métier et différentiels
□ Entropy compare : Différence entre API v1 et v2 → Changements de code d'état/suppression de champs/régression de latence
□ Tests de flux multi-rôles : Matrice de permissions admin/user/readonly
□ Manipulation de coupons/points/prix
□ Conditions de concurrence : Requêtes concurrentes pour test TOCTOU
Phase 7 : Tests WebSocket
□ Découverte de points d'accès
□ Injection de messages (injection de payload, pollution de prototype)
□ Gestion de messages de grande taille
□ Confusion de types
□ Détournement de WebSocket intersite (CSWH)
Phase 8 : Limitation de débit et DoS
□ Contournement de limitation de débit via en-têtes : X-Forwarded-For, X-Real-IP
□ Variantes de chemin : /api/ → /api → /Api/ → /API/
□ Épuisement à faible bande passante via Slowloris
□ DoS via requêtes par lots et imbrication profonde en GraphQL
□ Tests de rotation d'IP (ProxyCat pool de proxy)
Phase 9 : Exposition de données
□ Surexposition de la réponse : Comparer la réponse de l'API avec ce qui est affiché par l'UI
□ Énumération par pagination : ?page=1&limit=10000
□ Fuite d'informations via messages d'erreur : Trace de pile/chemins internes/erreur SQL
□ Accès à des données non autorisées via parcours imbriqué GraphQL
□ Exposition de points d'accès sensibles via la spécification OpenAPI
Phase 10 : Intégration CI/CD
□ Entropy --ci --watch : Réexécution automatique lors de modifications de spécifications
□ Escape DAST : Blocage automatique de la build selon un seuil de gravité
□ Persistance des découvertes pour les tests de régression
□ StackHawk (priorité développeur, noyau ZAP)
Chaîne d'outils
| Outil | Usage | Obtention |
|---|---|---|
| Vespasian | Trafic → Spécification OpenAPI/GraphQL | GitHub: praetorian-inc/vespasian |
| Entropy | Génération de scénarios d'attaque par LLM, 5 personas | GitHub: arjinexe/entropy-chaos |
| Escape DAST | Tests de sécurité de logique métier | escape.tech |
| api.sh | Pipeline d'attaque multi-protocole en 8 phases | GitHub: Sharon-Needles/api |
| FireTail | Tests spécifiques GraphQL (12 cas) | firetail.ai |
| jwt_tool | Tests complets JWT | GitHub: ticarpi/jwt_tool |
| Burp Autorize | Comparaison d'autorisation double session | Burp BApp Store |
Références
references/rest-graphql-testing.md— Tests approfondis REST + GraphQLreferences/jwt-oauth-testing.md— Tests de sécurité JWT + OAuth
Auto-vérification avant de déclarer la tâche terminée (DOIT être validé avant de déclarer la fin)
- Ai-je exécuté chaque étape du flux de travail (et pas seulement lu) ?
- Ai-je utilisé les chemins d'outils réels basés sur
tool-index? - Ai-je produit des preuves reproductibles (commandes/scripts/captures d'écran/rapports) ?
- Ai-je terminé et réécrit les éléments de la liste de contrôle exigés par RULES ?