Chapitre 214 minIntermédiaire
OWASP Top 10 2025 : les dix risques expliqués
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- nommer les dix catégories de l'OWASP Top 10 2025 ;
- classer une faille dans la bonne catégorie ;
- traduire un classement de 2021 dans l'édition 2025 ;
- utiliser le Top 10 comme grille d'audit.
3 exercices corrigés1 schéma
L'OWASP Top 10 est la liste des dix catégories de risques les plus critiques pour les applications web, publiée par la fondation OWASP et mise à jour tous les trois à quatre ans. L'édition en vigueur est l'OWASP Top 10:2025, qui remplace celle de 2021. Ce chapitre présente les dix catégories, ce qui a changé depuis 2021 et les autres référentiels de l'OWASP (API, mobile, ASVS). Chaque catégorie renvoie au chapitre qui la traite en détail.
C'est quoi l'OWASP ?
L'OWASP (Open Worldwide Application Security Project) est une fondation à but non lucratif, née en 2001, qui produit des ressources libres et gratuites sur la sécurité des logiciels : des guides, des outils (ZAP, Dependency-Check, Juice Shop), des fiches pratiques (Cheat Sheet Series) et des classements de risques. Son document le plus connu est le Top 10.
Le Top 10 n'est pas la liste de toutes les failles possibles : il en existe des centaines de types. C'est un classement de catégories, chacune regroupant plusieurs faiblesses (CWE) de même nature. Il sert de langage commun entre développeurs, auditeurs et clients, de grille de lecture pour un audit, et de base aux sujets de cybersécurité du BTS.
Comment le Top 10 est construit
L'édition 2025 est la huitième. Elle s'appuie sur des données de tests fournies par des entreprises spécialisées et des organisations qui auditent des applications. L'équipe a analysé 589 types de faiblesses (CWE), contre près de 400 en 2021, puis les a regroupées en dix catégories couvrant 248 CWE, avec au plus 40 CWE par catégorie. Huit catégories viennent de ces données ; les deux autres sont choisies par une enquête auprès des professionnels, pour faire remonter des risques que les tests automatisés mesurent mal. Le classement tient compte de la fréquence des failles dans les applications testées, de leur exploitabilité et de leur impact.
Chaque catégorie porte un code de la forme A01:2025 : « A » pour Application security risk, le rang, puis l'année de l'édition. Écris toujours l'année : A03:2021 (Injection) et A03:2025 (chaîne d'approvisionnement) n'ont rien à voir.
La liste 2025
| Code | Catégorie (nom officiel en anglais) | En une phrase | Exemple dans AppliFrais | Chapitre |
|---|---|---|---|---|
| A01:2025 | Contrôle d'accès défaillant (Broken Access Control) | Un utilisateur fait ou voit ce qu'il ne devrait pas | Un visiteur lit la fiche d'un collègue ; une requête forgée valide une fiche | 3 et 9 |
| A02:2025 | Mauvaise configuration de sécurité (Security Misconfiguration) | Des réglages par défaut ou de débogage restent en production | La trace complète d'une erreur s'affiche à l'écran | 4 |
| A03:2025 | Défaillances de la chaîne d'approvisionnement logicielle (Software Supply Chain Failures) | Une dépendance, un outil de build ou un dépôt compromis ou vulnérable | Une bibliothèque npm avec une CVE critique jamais mise à jour | 5 |
| A04:2025 | Défaillances cryptographiques (Cryptographic Failures) | Des données sensibles mal protégées en transit ou au repos | Des mots de passe hachés en MD5, un site en HTTP | 6 |
| A05:2025 | Injection (Injection) | Une saisie interprétée comme du code | Injection SQL dans la recherche, XSS dans un libellé de frais | 7 et 8 |
| A06:2025 | Conception non sécurisée (Insecure Design) | Un défaut dans la logique ou l'architecture, pas dans le code | Rien n'empêche de saisir un montant négatif | 10 |
| A07:2025 | Défaillances d'authentification (Authentication Failures) | L'identité de l'utilisateur est mal vérifiée | Aucune limite d'essais à la connexion, jeton sans expiration | 11 |
| A08:2025 | Défaillances d'intégrité des logiciels ou des données (Software or Data Integrity Failures) | Du code ou des données utilisés sans vérifier qu'ils n'ont pas été modifiés | Un script chargé depuis un CDN sans contrôle d'intégrité | 5 |
| A09:2025 | Défaillances de journalisation et d'alerte (Security Logging & Alerting Failures) | Une attaque n'est ni enregistrée ni signalée | 5 000 échecs de connexion en une nuit, et personne ne le voit | 12 |
| A10:2025 | Mauvaise gestion des conditions exceptionnelles (Mishandling of Exceptional Conditions) | L'application réagit mal à une erreur ou à une situation imprévue | Une exception dans le contrôle des droits laisse passer la requête | 12 |
Ce qui change par rapport à 2021
Beaucoup de supports en ligne, et certains sujets d'annales, utilisent encore l'édition 2021. Voici la correspondance.
| Édition 2021 | Édition 2025 | Ce qui change |
|---|---|---|
| A01 Broken Access Control | A01 | Reste premier ; la SSRF y est rattachée |
| A02 Cryptographic Failures | A04 | Descend de deux rangs |
| A03 Injection | A05 | Descend de deux rangs ; le XSS en fait toujours partie |
| A04 Insecure Design | A06 | Descend de deux rangs |
| A05 Security Misconfiguration | A02 | Monte de trois rangs |
| A06 Vulnerable and Outdated Components | A03 | S'élargit à toute la chaîne d'approvisionnement : dépendances, outils de build, dépôts, distribution |
| A07 Identification and Authentication Failures | A07 | Devient Authentication Failures |
| A08 Software and Data Integrity Failures | A08 | Même rang, nom légèrement modifié (or au lieu de and) |
| A09 Security Logging and Monitoring Failures | A09 | Devient Logging & Alerting : il ne suffit pas d'enregistrer, il faut alerter |
| A10 Server-Side Request Forgery (SSRF) | intégrée à A01 | N'est plus une catégorie à part |
| (n'existait pas) | A10 Mishandling of Exceptional Conditions | Nouvelle catégorie : erreurs mal gérées, échecs ouverts, états incohérents |
Les dix catégories en bref
A01:2025, Contrôle d'accès défaillant. L'application vérifie que l'utilisateur est connecté, mais pas qu'il a le droit d'effectuer cette action sur cette donnée. Les formes typiques : modifier un identifiant dans l'URL pour lire la ressource d'un autre (IDOR), appeler une route d'administration sans en avoir le rôle, modifier un champ caché ou un jeton, une configuration CORS trop permissive, la falsification de requête intersite (CSRF) et, depuis 2025, la SSRF. Parade : contrôle côté serveur, refus par défaut, vérification du propriétaire de chaque ressource.
A02:2025, Mauvaise configuration de sécurité. Comptes par défaut, mode débogage actif, messages d'erreur détaillés, listage des répertoires, en-têtes de sécurité absents, attributs Secure et HttpOnly oubliés sur les cookies, analyseur XML qui accepte les entités externes (XXE). Parade : configuration durcie, identique et automatisée dans tous les environnements, avec des secrets différents dans chacun.
A03:2025, Défaillances de la chaîne d'approvisionnement logicielle. Ton application contient surtout du code écrit par d'autres. Une dépendance vulnérable, abandonnée ou piégée, un outil de build compromis ou un pipeline d'intégration continue mal protégé suffisent à la compromettre. En 2025, le ver Shai-Hulud s'est propagé tout seul dans l'écosystème npm en volant des jetons de publication. Parade : inventaire des composants (SBOM), analyse automatique des vulnérabilités, mises à jour suivies, sources de confiance.
A04:2025, Défaillances cryptographiques. Données sensibles transmises en clair, mots de passe hachés avec un algorithme rapide ou sans sel, clés écrites dans le code, aléatoire prévisible, algorithmes obsolètes. Parade : HTTPS partout, Argon2id ou bcrypt pour les mots de passe, AES-GCM pour les données à relire, clés hors du code.
A05:2025, Injection. Une donnée de l'utilisateur est insérée dans une commande interprétée (SQL, requête NoSQL, commande système, page HTML) et change son sens. C'est la catégorie qui compte le plus de CVE publiées : plus de 30 000 pour le seul XSS et plus de 14 000 pour l'injection SQL, selon l'OWASP. Parade : séparer les données du code (requêtes préparées), encoder les sorties selon leur contexte, valider les entrées.
A06:2025, Conception non sécurisée. Le code fait exactement ce qu'on lui a demandé, mais ce qu'on lui a demandé est dangereux : aucune limite au nombre de réinitialisations de mot de passe, question secrète comme seul moyen de récupération, montant négatif accepté, étape de validation contournable. Une implémentation parfaite ne corrige pas une conception défaillante. Parade : modéliser les menaces, écrire des exigences de sécurité, tester les cas d'abus.
A07:2025, Défaillances d'authentification. Mots de passe faibles acceptés, force brute et réutilisation de mots de passe volés (credential stuffing) non freinées, session qui ne change pas après la connexion, jeton sans expiration, récupération de mot de passe faible, absence de double authentification sur les comptes sensibles. Parade : limitation des tentatives, MFA, sessions et jetons bien gérés.
A08:2025, Défaillances d'intégrité des logiciels ou des données. Du code ou des données sont utilisés sans vérifier leur provenance : script chargé depuis un CDN sans attribut integrity, mise à jour téléchargée sans signature, objet désérialisé depuis une source non fiable, cookie de rôle non signé. Parade : signatures, contrôles d'intégrité, pipeline protégé.
A09:2025, Défaillances de journalisation et d'alerte. Les connexions, les échecs d'autorisation et les erreurs ne sont pas enregistrés, ou ils le sont sans que personne ne les lise. L'attaque dure des mois sans être détectée. Le nom 2025 insiste sur l'alerte : un journal que personne ne surveille ne protège rien. Parade : journaliser les événements de sécurité, centraliser, définir des seuils d'alerte.
A10:2025, Mauvaise gestion des conditions exceptionnelles. L'application n'anticipe pas une erreur, ne la détecte pas ou y réagit mal : exception non attrapée qui fait tomber le serveur, contrôle qui laisse passer en cas d'erreur (fail open), transaction interrompue à moitié, message d'erreur qui révèle la structure de la base. Parade : attraper les erreurs là où elles se produisent, échouer en refusant (fail closed), annuler complètement une transaction interrompue, gestionnaire d'erreurs global.
Les autres référentiels de l'OWASP
Le Top 10 vise les applications web. L'OWASP publie d'autres listes et d'autres outils que tu croiseras dans les sujets et en entreprise.
| Référentiel | À quoi il sert |
|---|---|
| API Security Top 10 (édition 2023) | Les dix risques propres aux API : autorisation au niveau des objets (BOLA), des propriétés et des fonctions, consommation illimitée de ressources… (chapitre 13) |
| Mobile Top 10 (édition 2024) | Les risques des applications mobiles : identifiants mal utilisés, stockage non sécurisé, communication non sécurisée… (chapitre 13) |
| ASVS (Application Security Verification Standard) | Une liste d'exigences vérifiables, organisée en trois niveaux, pour spécifier ou auditer la sécurité d'une application. C'est le référentiel à citer pour « vérifier la conformité à un standard » |
| Cheat Sheet Series | Des fiches pratiques par sujet : stockage des mots de passe, prévention des XSS, sessions, JWT… |
| WSTG (Web Security Testing Guide) | Le guide méthodologique des tests d'intrusion web |
| ZAP | Un scanner de vulnérabilités web gratuit, aujourd'hui maintenu sous le nom ZAP by Checkmarx (chapitre 14) |
| Juice Shop | Une boutique en ligne volontairement vulnérable pour s'entraîner légalement |
Utiliser le Top 10 comme grille d'audit
Face à une application inconnue, ou à un extrait de code dans un sujet, passe les dix catégories comme une liste de contrôle. Pour chacune, une question.
| Catégorie | La question à te poser |
|---|---|
| A01 | Chaque route vérifie-t-elle le rôle et le propriétaire de la donnée, côté serveur ? |
| A02 | Que voit un attaquant en cas d'erreur ? Reste-t-il des comptes, des pages ou des réglages par défaut ? |
| A03 | Les dépendances sont-elles inventoriées, à jour, sans CVE connue ? |
| A04 | Les mots de passe sont-ils hachés avec un algorithme lent et salé ? Tout passe-t-il en HTTPS ? |
| A05 | Une saisie est-elle collée dans une requête, une commande ou une page sans préparation ni encodage ? |
| A06 | Que se passe-t-il si quelqu'un utilise la fonctionnalité de travers : montant négatif, étape sautée, mille appels ? |
| A07 | Peut-on essayer des mots de passe sans limite ? Les sessions et les jetons expirent-ils ? |
| A08 | Le code et les données chargés de l'extérieur sont-ils vérifiés ? |
| A09 | Une tentative d'intrusion laisserait-elle une trace ? Quelqu'un serait-il prévenu ? |
| A10 | Que fait le code quand une exception survient pendant un contrôle ? |
Exercice 1 sur 3 Ranger chaque faille dans le Top 10 2025 Réussi À revoir
Donne le code de la catégorie 2025 de chaque faille.
- La page de recherche affiche
Aucun résultat pour <script>…</script>et le script s'exécute. - L'API accepte
PATCH /api/fiches/18/validerenvoyé par un visiteur. - Le projet utilise une version de la bibliothèque
axiostouchée par une CVE de gravité élevée. - En cas d'erreur, la page affiche la requête SQL complète et le nom des tables.
- L'application télécharge l'image dont l'utilisateur fournit l'URL et peut ainsi atteindre
http://169.254.169.254/. - Les mots de passe sont stockés en SHA-1, sans sel.
- Le contrôle des droits est dans un
try, et lecatchrenvoietrue. - Aucun événement de connexion n'est enregistré.
Voir la réponseMasquer la réponse de l'exercice 1
- A05:2025 Injection (XSS réfléchie, CWE-79).
- A01:2025 Contrôle d'accès défaillant : contrôle de fonction absent.
- A03:2025 Chaîne d'approvisionnement logicielle (ex-A06:2021 Composants vulnérables).
- A02:2025 Mauvaise configuration : erreurs non gérées de façon centralisée, détails exposés. On peut ajouter A10:2025, car l'erreur est mal gérée ; la catégorie principale reste A02.
- A01:2025 : la SSRF y est rattachée depuis 2025 (c'était A10:2021).
- A04:2025 Défaillances cryptographiques.
- A10:2025 Mauvaise gestion des conditions exceptionnelles : le contrôle « échoue ouvert ».
- A09:2025 Défaillances de journalisation et d'alerte.
Tu avais trouvé ?
Exercice 2 sur 3 Traduire une ancienne numérotation Réussi À revoir
Un rapport d'audit de 2023 classe ses constats ainsi : « A03 Injection (2 constats), A06 Vulnerable and Outdated Components (5 constats), A10 SSRF (1 constat) ». Réécris le classement avec l'édition 2025.
Voir la réponseMasquer la réponse de l'exercice 2
- A03:2021 Injection devient A05:2025 Injection (2 constats).
- A06:2021 Composants vulnérables devient A03:2025 Défaillances de la chaîne d'approvisionnement logicielle (5 constats).
- A10:2021 SSRF est rattachée à A01:2025 Contrôle d'accès défaillant (1 constat).
Tu avais trouvé ?
Exercice 3 sur 3 Défaut de conception ou défaut d'implémentation ? Réussi À revoir
Pour chaque cas, dis s'il s'agit d'une conception non sécurisée (A06) ou d'une erreur d'implémentation relevant d'une autre catégorie.
- La fonctionnalité « mot de passe oublié » demande seulement le nom de jeune fille de la mère.
- La requête de connexion concatène le login saisi dans le SQL.
- Un visiteur peut déclarer 900 nuits d'hôtel dans un mois de 31 jours.
- La route de validation oublie d'appeler le middleware de rôle, alors que la spécification le demandait.
Voir la réponseMasquer la réponse de l'exercice 3
- Conception (A06) : même parfaitement codée, une question secrète dont la réponse se trouve sur les réseaux sociaux est une mauvaise méthode de récupération.
- Implémentation : injection, A05.
- Conception (A06) : aucune règle métier ne borne la quantité. Le code fait ce qu'on lui a demandé.
- Implémentation : la spécification était bonne, le code ne la respecte pas. C'est un contrôle d'accès défaillant, A01.
Tu avais trouvé ?