Aller au contenu

CWE Top 25 2025 : les vingt-cinq faiblesses logicielles les plus dangereuses

CWE Top 25 2025 : les vingt-cinq faiblesses logicielles les plus dangereuses

Section intitulée « CWE Top 25 2025 : les vingt-cinq faiblesses logicielles les plus dangereuses »

Il existe deux façons de parler d’un défaut logiciel. On peut dire « la faille de Metabase corrigée en septembre 2026 », ce qui désigne un produit, des versions et un correctif. On peut dire « une injection SQL », ce qui désigne une manière de se tromper, vieille comme les bases de données relationnelles et commise dans des milliers de programmes qui n’ont rien en commun. Le catalogue CWE s’occupe de la seconde, et ce classement annuel dit lesquelles de ces manières de se tromper ont le plus coûté cher récemment.

→ Lire l’explication complète de la marmotte

CWE, pour Common Weakness Enumeration, est le catalogue des types de faiblesses logicielles et matérielles, tenu par le MITRE. La version 4.20 compte 944 entrées actives, chacune numérotée une fois pour toutes : CWE-79 restera le cross-site scripting même quand le web aura changé trois fois de mode.

Ces 944 entrées ne sont pas une liste à plat mais un arbre, et les étages de l’arbre portent des noms qu’il faut connaître pour lire un rapport sans contresens :

  • un pilier (pillar) est le sommet : une idée très générale, comme CWE-284 (contrôle d’accès défaillant). Le catalogue en compte dix ;
  • une classe (class) décrit un mécanisme indépendamment de la technologie : CWE-285 (autorisation incorrecte), CWE-77 (injection de commande). Il y en a 112 ;
  • une base est le niveau utile en pratique, assez précis pour qu’on sache quoi corriger : CWE-89 (injection SQL), CWE-306 (authentification manquante sur une fonction critique). C’est le gros du catalogue, 523 entrées ;
  • une variante (variant) descend au produit ou au langage : CWE-121 (débordement de tampon dans la pile) plutôt que le débordement en général. 292 entrées ;
  • un composé (compound) décrit une faiblesse qui n’existe que par la conjonction de plusieurs autres : le CSRF, CWE-352, en est l’exemple canonique. Ils sont sept.

Un même défaut appartient donc à plusieurs étages selon la finesse avec laquelle on le regarde, et le catalogue propose en plus plusieurs vues (l’arborescence de recherche, celle orientée développement), qui ne rangent pas les entrées dans le même ordre. D’où une conséquence pratique : deux outils peuvent attribuer deux CWE différents au même défaut sans qu’aucun des deux ait tort.

CWE n’est pas CVE, et c’est le malentendu le plus répandu

Section intitulée « CWE n’est pas CVE, et c’est le malentendu le plus répandu »

La maladie et le patient. CVE-2026-72898 est une vulnérabilité précise : une injection SQL non authentifiée dans Metabase, dans des versions nommées, corrigée par un correctif daté, et qui a compromis neuf instances ministérielles françaises. CWE-89 est la classe dont elle relève, et elle était déjà là trente ans avant Metabase.

Les deux catalogues répondent à deux questions différentes, et confondre l’une avec l’autre a des conséquences immédiates :

  • « Que dois-je corriger cette semaine ? » est une question de CVE. On parle d’inventaire, de versions, de correctifs, de fenêtre d’exposition, et la priorisation se fait avec CVSS, EPSS et le catalogue KEV ;
  • « Pourquoi est-ce arrivé, et où est-ce encore possible ? » est une question de CWE. La réponse ne concerne pas un correctif mais une pratique de développement : une requête construite par concaténation, une sortie non échappée, un contrôle d’autorisation posé après l’action.

Un avis de sécurité sérieux cite donc les deux. Appliquer le correctif de la CVE ferme une porte ; comprendre la CWE évite de rouvrir les dix-sept autres, qui attendent dans le même dépôt, écrites de la même main, le même mois.

L'arbre CWE de l'autorisation, sur quatre étages d'abstraction. Au sommet, le pilier CWE-284, contrôle d'accès défaillant : l'idée la plus générale, dix entrées de ce niveau dans tout le catalogue. En dessous, la classe CWE-285, autorisation incorrecte, qui ne dit encore rien de la technologie employée. À l'étage suivant, deux classes sœurs qu'on confond constamment : CWE-862, autorisation manquante, où le contrôle n'a jamais été écrit, et CWE-863, autorisation incorrecte, où le contrôle existe mais se trompe. Sous CWE-863 se trouve la base CWE-639, contournement d'autorisation par clé contrôlée par l'utilisateur, c'est-à-dire l'identifiant d'objet qu'on remplace dans l'URL pour lire le dossier du voisin. Trois des quatre étages figurent au Top 25 2025 : CWE-862 au rang 4, CWE-863 au rang 17, CWE-284 au rang 19 et CWE-639 au rang 24, ce qui montre qu'un même défaut peut être compté à plusieurs niveaux de finesse selon la manière dont le déclarant l'a classé.

Le classement est annuel. L’édition courante est celle de 2025, publiée le 15 décembre 2025 ; au 25 octobre 2026, aucune édition 2026 n’a été annoncée, et la page du MITRE continue de présenter 2025 comme la liste en vigueur.

La méthode est publique, et il vaut la peine de la connaître avant de citer le classement en réunion. L’équipe part des 39 080 vulnérabilités publiées entre le 1er juin 2024 et le 1er juin 2025, telles qu’elles sont enregistrées dans la base nationale américaine, avec le type de faiblesse que leur ont attribué les autorités de numérotation, l’enrichissement de la CISA ou les analystes du NVD. Chaque faiblesse reçoit ensuite un score qui combine sa fréquence et la gravité moyenne des vulnérabilités qui la portent : une faiblesse à la fois courante et grave arrive en tête, une faiblesse courante et bénigne reste loin derrière.

Deux détails de fabrication en disent plus long que le classement lui-même. D’abord, un quart des enregistrements a dû être réanalysé : 9 468 vulnérabilités portaient un type trop vague ou visiblement mal choisi, et le MITRE a sollicité 281 autorités de numérotation pour en corriger les attributions, obtenant des retours sur 2 459 d’entre elles. Ensuite, l’édition 2025 a abandonné la normalisation qui ramenait auparavant chaque attribution à une liste restreinte de classes : l’image est plus fidèle, mais moins comparable avec les éditions précédentes. Qui compare 2024 et 2025 ligne à ligne compare deux mesures faites avec deux instruments.

Il mesure ce qui a été signalé et classé, pas ce qui est dangereux. La différence n’est pas théorique.

Une faiblesse que les outils détectent bien (le cross-site scripting, l’injection SQL, le débordement de tampon) produit beaucoup de vulnérabilités publiées, donc beaucoup de points. Une faiblesse de conception se compte mal : personne n’ouvre de vulnérabilité pour « architecture d’autorisation incohérente », et les quatre entrées d’autorisation du Top 25 ne sont que la partie de ce problème qui a pu être rattachée à un produit et à une version. De même, les types de produits qui ont une communauté de chercheurs active et un programme de récompenses alimentent le classement plus que les logiciels industriels, qu’on audite moins souvent et dont les défauts se publient parfois des années après leur découverte.

Le Top 25 se lit donc comme un relevé des habitudes de déclaration autant que des dangers : excellent pour savoir de quoi parle la profession, insuffisant pour décider de ce qu’on corrige chez soi. Pour cette décision-là, il faut son propre inventaire, sa propre exposition et ses propres journaux.

Une dernière précision, puisque le mot « dangereuses » figure dans le titre officiel du classement : il n’y a aucune obligation à le suivre, aucun audit de conformité au CWE, aucune certification. C’est un catalogue, pas une norme : contrairement aux textes qui s’imposent vraiment.

Chaque ligne donne le rang, l’identifiant, le nom français usuel et le niveau d’abstraction du catalogue.

RangCWEFaiblesseNiveau
1CWE-79Cross-site scriptingbase
2CWE-89Injection SQLbase
3CWE-352Falsification de requête inter-sites (CSRF)composé
4CWE-862Autorisation manquanteclasse
5CWE-787Écriture hors limitesbase
6CWE-22Traversée de cheminbase
7CWE-416Usage après libérationvariante
8CWE-125Lecture hors limitesbase
9CWE-78Injection de commande systèmebase
10CWE-94Injection de codebase
11CWE-120Débordement de tampon classiquebase
12CWE-434Téléversement de fichier de type dangereuxbase
13CWE-476Déréférencement de pointeur nulbase
14CWE-121Débordement de tampon dans la pilevariante
15CWE-502Désérialisation de données non fiablesbase
16CWE-122Débordement de tampon dans le tasvariante
17CWE-863Autorisation incorrecteclasse
18CWE-20Validation des entrées insuffisanteclasse
19CWE-284Contrôle d’accès défaillantpilier
20CWE-200Exposition d’information sensibleclasse
21CWE-306Authentification manquante sur une fonction critiquebase
22CWE-918Falsification de requête côté serveur (SSRF)base
23CWE-77Injection de commandeclasse
24CWE-639Contournement d’autorisation par clé contrôlée par l’utilisateurbase
25CWE-770Allocation de ressources sans limitebase

Deux remarques de lecture. Le classement mélange sciemment les niveaux d’abstraction : CWE-284 (pilier) et CWE-639 (base) décrivent le même genre de problème à deux échelles, et leur présence simultanée signale surtout que les déclarants n’ont pas tous rangé leurs vulnérabilités au même étage. Et les six entrées de corruption mémoire (rangs 5, 7, 8, 11, 14 et 16) forment en réalité une seule famille, celle que les protections mémoire et les langages à sûreté garantie cherchent à rendre impossible par construction plutôt qu’à corriger ligne à ligne.

Sans vocabulaire des classes, une équipe corrige des instances. Le rapport de scan arrive, douze lignes rouges sont traitées en douze correctifs, et le trimestre suivant ramène quatorze lignes rouges du même genre : personne n’a vu que les douze premières venaient d’une seule habitude de codage, répétée dans tout le dépôt par des gens qui ne savaient pas qu’ils la répétaient. La revue de code n’a pas de critère, puisqu’elle n’a pas de nom pour ce qu’elle cherche ; la formation est générique, puisqu’on ne sait pas quelles classes de défauts l’équipe produit réellement ; et le choix d’une bibliothèque ou d’un langage se fait sur la syntaxe plutôt que sur les familles de défauts qu’il rend impossibles. Le coût final n’est pas le correctif, c’est la découverte, trois ans plus tard, que la même faiblesse attendait dans un module que personne ne scannait.

Quand un défaut de sécurité est découvert dans un logiciel précis, il reçoit un numéro : c’est une CVE. Par exemple, le défaut trouvé en 2026 dans le logiciel Metabase porte le numéro CVE-2026-72898. Ce numéro désigne ce logiciel-là, dans ces versions-là, et le correctif publié par son éditeur.

Mais le même genre d’erreur se retrouve dans des milliers de logiciels différents. Pour parler de l’erreur elle-même, et non du logiciel qui l’a commise, il existe un second catalogue : CWE. Il contient 944 catégories d’erreurs de programmation, chacune numérotée. L’erreur commise dans Metabase appartient à la catégorie CWE-89, qu’on appelle « injection SQL » : elle consiste à construire une commande pour la base de données en y recopiant directement ce que l’utilisateur a tapé, sans vérification, de sorte que l’utilisateur peut faire exécuter la commande de son choix.

Chaque année, l’organisme qui tient ce catalogue examine les défauts publiés dans le monde entier (39 080 pour l’édition 2025), et regarde quelles catégories reviennent le plus souvent, pondérées par leur gravité. Il publie ensuite une liste des vingt-cinq catégories arrivées en tête. C’est le Top 25, et sa dernière édition date de décembre 2025.

Cette liste est utile, à condition de savoir ce qu’elle mesure : non pas les erreurs les plus dangereuses en soi, mais celles qui ont été le plus souvent signalées. Une erreur que les logiciels de détection repèrent facilement est beaucoup déclarée, donc bien placée dans le classement. Une erreur qui tient à un mauvais choix d’organisation du logiciel se déclare mal, et apparaît donc moins, sans être moins grave. Enfin, cette liste n’est obligatoire pour personne : c’est un inventaire, pas une réglementation.

À lire aussi

Pages voisines

: les deux pages se citent l’une l’autre.