Aller au contenu
Categoria: Pentest9 min de lecture

Pentest APIs REST et GraphQL : Checklist Technique pour Bug Bounty Legal

Por Lucas Andrade ·

Methodologie technique pour auditer les APIs REST et GraphQL dans des programmes autorises, centree sur IDOR, contournement d'authentification et introspection.

Pentest APIs REST et GraphQL : Checklist Technique pour Bug Bounty Legal

Les APIs sont devenues la surface la plus lucrative de tout programme de bug bounty serieux, et aussi la plus negligee par les pentesters encore obsedes par le XSS dans les formulaires de contact. Un IDOR sur /api/v3/users/{id}/invoices peut payer entre trois et huit mille dollars sur HackerOne, alors qu'un XSS reflechi sur une page marketing se ferme a 250. L'equipe Basilisk OffSec a compile dans cette checklist le flux exact que nous utilisons en mission autorisee et sur des programmes publics comme GitLab, Shopify et Reddit. Avant toute chose : lis le perimetre, confirme le brand domain, et ne touche jamais a un endpoint hors liste. Tout ici suppose une autorisation ecrite, et tout est cadre par l'OWASP API Security Top 10 (2023).

Autorisation et perimetre d'abord, toujours

Avant qu'un outil demarre, une seule question existe : ai-je le droit de toucher a ca. Un bug bounty sans confirmation de perimetre n'est pas un pentest, c'est un incident. Lis le document de politique, note les domaines dans le perimetre, les endpoints explicitement exclus (souvent /admin ou les flux de paiement) et les techniques interdites (presque toujours DoS et ingenierie sociale). Consigne la date, la version du programme et ton compte de test. Cette discipline n'est pas de la bureaucratie, c'est la difference entre une bounty payee et une plainte. Le bug bounty legal, c'est de la discipline avant la creativite.

Cartographie la surface avant de lancer le moindre payload

Le point de depart n'est jamais Burp ouvert sur la figure. C'est la cartographie de surface. Recupere l'app mobile avec apktool, extrais les chaines d'URL et charge-les dans Burp comme sitemap manuel. Lance ffuf avec la wordlist api-endpoints-res.txt de SecLists contre des paths comme /api/, /v1/, /internal/, /graphql, /gql, /query. Wayback Machine via gau et waybackurls fait remonter des endpoints obsoletes que personne n'a patches. Lors d'une mission recente, nous avons trouve un /api/v1/admin/export herite de 2019 acceptant un token utilisateur classique, similaire a ce que nous decrivons dans Pentest Web depuis Zero: Construire un Lab Sur avec DVWA, Juice Shop et Burp Suite. Documente chaque endpoint avec methode, content-type attendu et role requis avant de lancer le moindre payload.

IDOR/BOLA : le bug le plus cher en REST

L'IDOR reste le bug numero un dans les APIs REST pour une raison simple : les devs font confiance a l'ID issu du JWT mais lisent l'ID dans l'URL. Cree deux comptes sur l'app cible, capture les deux sessions dans Burp, et utilise l'extension Autorize ou Auth Analyzer pour rejouer chaque requete du compte A avec le cookie du compte B. Surveille les reponses 200 avec un corps different, pas seulement les codes statut. Les UUIDs ne sont pas une protection : enumere-les via endpoints de recherche, exports CSV ou notifications. Teste aussi le cote ecriture : PUT et DELETE avec un ID etranger, car l'IDOR en lecture est une fuite d'info mais l'IDOR en ecriture est une prise de controle de compte.

La logique d'injection s'applique aussi aux APIs, comme montre dans SQL Injection en Pratique: Exploiter, Detecter et Mitiger dans un Lab Controle, surtout sur les filtres sort, order et search qui finissent en concatenation SQL. Un ?sort=name)-- ou un delai booleen dans le corps JSON revele souvent que le parametre entre sans protection dans la requete. Ne rapporte jamais une SQLi sans preuve reproductible et non destructive (pas de DROP, pas d'UPDATE), juste l'extraction d'une valeur inoffensive comme la version de la base.

GraphQL change la donne

GraphQL change la donne. Commence par tester l'introspection sur /graphql avec la requete {__schema{types{name fields{name}}}}. Si elle est ouverte en production, tu as deja la moitie du rapport ecrite. Des outils comme InQL, GraphQL Voyager et clairvoyance reconstruisent le schema meme avec l'introspection desactivee via field stuffing. Cherche les mutations exposees comme adminUpdateUser, impersonate, exportAllData. Les batch queries contournent le rate limit : envoie 1000 mutations login dans une seule requete HTTP. L'alias overloading casse les validateurs naifs. Contrairement a ce que nous couvrons dans XSS Moderne: DOM, Stored et Reflected avec Exemples Reels en Environnement de Test, ici l'impact est presque toujours logique, pas une injection de script.

Le contournement d'auth depasse le none algorithm

Le contournement d'authentification depasse ici le classique none algorithm dans JWT. Teste jku et kid injection, le passage RS256 vers HS256 en utilisant la cle publique comme secret, et les refresh tokens qui n'expirent jamais. Des headers comme X-Original-URL, X-Rewrite-URL, X-Forwarded-For et X-User-Id contournent souvent les middlewares d'auth quand l'API est derriere une gateway mal configuree. En GraphQL, verifie que la directive @auth couvre tous les champs ou si un resolver imbrique fuite des donnees sans controle. Teste aussi la logique d'expiration : un token revoque toujours accepte apres logout est un rapport propre et bien paye.

SSRF, mass assignment et business logic

Le SSRF apparait aussi dans les APIs qui acceptent une URL en parametre pour webhooks ou avatars, motif detaille dans SSRF Demystifie: Exploiter Cloud Metadata dans un Lab AWS Local avec des exploits contre IMDS d'AWS. Pour le mass assignment, ajoute des champs comme isAdmin:true, role:owner, verified:true dans n'importe quel PATCH ou PUT ; les frameworks comme Rails et NestJS avec whitelist incomplete servent l'admin sur un plateau. La business logic est la classe que les scanners ne trouvent jamais : quantites negatives, changement de devise entre le calcul du prix et le debit, application double d'un coupon. Ces bugs exigent de comprendre le flux metier, pas seulement le protocole.

Rate limiting et race conditions

Le rate limiting, teste correctement, est rarement une bounty en soi, mais le multiplicateur d'autres bugs : absent sur l'endpoint OTP ou login, un code a 6 chiffres est bruteforce en minutes. Pour les race conditions sur endpoints de coupon ou retrait, utilise Turbo Intruder avec la single packet attack de James Kettle, en tirant 30 requetes simultanees ; si un coupon de 50 dollars est utilise cinq fois, tu as un rapport d'impact financier. Combine race et business logic : le classique double retrait ou la verification du solde et le debit ne sont pas atomiques.

Uploads de fichiers, deserialisation et parametres caches

Deux classes de bugs restent souvent non testees dans les tests d'API et paient bien. D'abord les uploads de fichiers : teste chaque endpoint d'upload pour la content-type confusion (un payload PHP ou SVG declare en image/png), le path traversal dans le nom (../../avatar.php), l'absence de validation de taille et de MIME, et, quand le traitement d'image se fait cote serveur, les chaines ImageMagick ou ffmpeg qui menent au RCE ou au SSRF. Ensuite la deserialisation : les APIs qui acceptent des objets serialises dans les cookies, headers ou corps (Java, .NET, PHP, pickle Python, Marshal Ruby) sont un chemin direct vers le RCE si une gadget chain existe. Cherche les blocs base64 commencant par des magic bytes connus (rO0 pour Java, ac ed en hex). Ajoute le parameter mining avec Arjun ou param-miner : beaucoup d'APIs traitent des champs non documentes comme debug=true, preview ou internal qui n'apparaissent jamais dans la doc officielle et contournent les controles d'autorisation. Les trois classes exigent un PoC propre et non destructif, et n'ont leur place que sur des cibles autorisees.

Reporting : pourquoi l'impact paie, pas la technique

Documente l'impact avec le nombre d'enregistrements exposes, la valeur financiere estimee et un PoC curl reproductible. Les programmes paient pour l'impact demontre, pas pour la technique. Construis un template de rapport avec titre CWE, etapes numerotees, requete brute, reponse tronquee et suggestion de correctif en une ligne. Soumets tot, avant les doublons, mais jamais sans confirmer le perimetre. Un rapport propre et concis avec un impact clair est paye plus vite et plus haut qu'un mur de texte plein de scenarios speculatifs.

Checklist pratique

(1) perimetre et autorisation confirmes par ecrit. (2) surface entierement cartographiee (mobile, Wayback, ffuf). (3) IDOR/BOLA lecture et ecriture avec deux comptes. (4) GraphQL introspection, batch, alias, mutations exposees. (5) JWT : alg confusion, kid/jku, expiration, revocation apres logout. (6) mass assignment sur chaque endpoint d'ecriture. (7) SSRF sur chaque parametre URL. (8) rate limit sur les flux d'auth et race sur les flux d'argent. (9) business logic contre le flux reel. (10) rapport avec impact, PoC et correctif.

FAQ : Par quoi un debutant doit-il commencer ?

Par l'IDOR/BOLA. C'est le bug le plus frequent, le plus facile a prouver et bien paye, et il ne faut que deux comptes de test et Burp avec Autorize. Construis d'abord ton intuition dans ton propre lab, comme notre setup DVWA/Juice Shop, avant de toucher un vrai programme. Une fois l'IDOR trouve de facon fiable, etends vers GraphQL et les mauvaises configurations JWT, techniquement liees et souvent presentes ensemble dans les APIs modernes.

FAQ : Comment eviter de casser le perimetre par accident ?

Configure Burp avec un target scope strict et active "Drop out-of-scope requests" pour qu'aucun outil ne touche par accident des hotes etrangers. Evite les scanners actifs automatises si la politique ne les autorise pas, et ne lance jamais d'attaques a fort volume (qui peuvent compter comme DoS). En cas de doute, demande au programme via le canal officiel avant de tester. L'erreur la plus chere n'est pas un bug rate, mais un test hors autorisation.

Conclusion

Le bug bounty legal, c'est de la discipline avant la creativite, et c'est sur cette discipline que Basilisk construit sa reputation sur des programmes comme Mercado Livre et Nubank. Le flux est reproductible : perimetre, cartographie, passage systematique sur les classes de bugs d'API, rapport d'impact propre. Qui interiorise ce processus trouve plus et de meilleurs bugs que celui qui lance des payloads a l'aveugle, et le fait dans les regles, ce qui a long terme est le seul chemin qui paie.

Related posts

Nenhum comentário ainda

Seja o primeiro a comentar.

Deixe seu comentário

Entre com sua conta Canverly para comentar. Você pode usar a mesma conta em qualquer site da rede.

Entrar com Canverly