# L'OWASP API Security Top 10

L'**OWASP** (*Open Worldwide Application Security Project*) est une fondation qui publie des références en sécurité applicative. Son **API Security Top 10** recense les risques les plus fréquents dans les API. La dernière édition date de 2023.

<p class="callout info">La plupart de ces failles ne demandent aucune compétence technique avancée pour être exploitées : juste curl et un peu de curiosité. Comme pendant la chasse au trésor.</p>

<table id="bkmrk-%23risqueau-bar%2C-%C3%A7a-do"><thead><tr><th>\#</th><th>Risque</th><th>Au bar, ça donne…</th><th>Se protéger</th></tr></thead><tbody><tr><td>API1</td><td>**Broken Object Level Authorization** (BOLA, aussi appelé IDOR)</td><td>Changer l'id dans `/orders/42` et lire la commande d'un autre client</td><td>Vérifier à chaque requête que l'objet appartient à l'utilisateur</td></tr><tr><td>API2</td><td>**Broken Authentication**</td><td>Une route de connexion sans limite d'essais, des tokens qui n'expirent jamais</td><td>Bibliothèques éprouvées, expiration, rate limiting sur l'authentification</td></tr><tr><td>API3</td><td>**Broken Object Property Level Authorization** (BOPLA)</td><td>Envoyer `{"role": "bartender"}` dans un `PATCH /me` et devenir barman</td><td>N'accepter et ne renvoyer que les champs prévus (schémas stricts)</td></tr><tr><td>API4</td><td>**Unrestricted Resource Consumption**</td><td>`?per_page=1000000`, ou 10 000 commandes par seconde</td><td>Limites de pagination, de taille de body, rate limiting</td></tr><tr><td>API5</td><td>**Broken Function Level Authorization**</td><td>Un client qui appelle `/admin/scoreboard` et obtient une réponse</td><td>Contrôler le rôle sur chaque route sensible, refuser par défaut</td></tr><tr><td>API6</td><td>**Unrestricted Access to Sensitive Business Flows**</td><td>Un bot qui commande tous les 404 Spritz dès leur retour en stock pour les revendre</td><td>Détection des comportements automatisés, limites métier</td></tr><tr><td>API7</td><td>**Server Side Request Forgery** (SSRF)</td><td>Une route « importer la photo du cocktail depuis une URL » à qui l'on donne `http://localhost:8080/admin`</td><td>Liste blanche de domaines, interdire les adresses internes</td></tr><tr><td>API8</td><td>**Security Misconfiguration**</td><td>Les stack traces en production, CORS ouvert à tous, HTTP sans TLS</td><td>Configuration revue, erreurs neutres, HTTPS partout</td></tr><tr><td>API9</td><td>**Improper Inventory Management**</td><td>L'API v0 du stagiaire de 2009, oubliée mais toujours en ligne</td><td>Inventaire des versions et des environnements, décommissionnement</td></tr><tr><td>API10</td><td>**Unsafe Consumption of APIs**</td><td>Faire aveuglément confiance aux données renvoyées par l'API du fournisseur de citrons</td><td>Valider aussi ce qu'on reçoit des API tierces</td></tr></tbody></table>

### Les trois à retenir

Si vous ne deviez en retenir que trois, ce sont celles qui concernent l'**autorisation** : API1, API3 et API5. Elles ne sont détectées ni par les scanners automatiques, ni par les tests qui « vérifient que ça marche ». Il faut se demander, pour chaque route : *et si c'était quelqu'un d'autre qui appelait ?*

<p class="callout success">Le réflexe à prendre en écrivant une route : « Qui a le droit d'appeler cette route ? Sur quels objets ? Avec quels champs ? »</p>

Référence complète : [OWASP API Security Top 10 – 2023](https://owasp.org/API-Security/editions/2023/en/0x11-t10/).