Glossaire cyber

CWE - Common Weakness Enumeration et Top 25 en 2026

CWE (Common Weakness Enumeration) : taxonomie MITRE des classes de défaut, Top 25 2024, mapping CVE↔CWE, vues, usage SAST et threat modeling 2026.

Naim Aouaichia
15 min de lecture
  • Glossaire
  • CWE
  • MITRE
  • SAST
  • Threat Modeling
  • Top 25
  • DevSecOps

Le CWE (Common Weakness Enumeration) est la taxonomie de référence maintenue par MITRE depuis 2006 pour classifier les classes de défaut logiciel, pas les instances (c'est le rôle du CVE), pas les scores (c'est CVSS), mais les catégories abstraites qui décrivent un type de bug exploitable. La version 4.16 (publiée en 2025) référence environ 1 500 CWE organisés en hiérarchie multi-vues (Research View, Development View, Architectural View, Hardware Design View). Le Top 25 Most Dangerous Software Weaknesses publié annuellement (édition 2024 publiée en novembre 2024) concentre 70-75 % du volume des CVE majeurs : CWE-79 (XSS) en tête avec plus de 23 000 CVE associés sur 25 ans, CWE-787 (Out-of-bounds Write), CWE-89 (SQL Injection). Comprendre la différence CWE / CVE / CVSS, les vues, le mapping CWE↔CVE dans les records 5.1, et l'usage en SAST et threat modeling est un prérequis pour tout AppSec, DevSecOps ou pentester qui veut produire des rapports normalisés et industrialiser la prévention.

Pour le contexte adjacent : voir CVE - Définition, format, processus pour l'identifiant d'instance, et CVSS - Scoring vulnérabilités pour la métrique de sévérité associée.

1. Définition précise et distinction CWE / CVE / CVSS

CWE répond à une question différente de CVE et de CVSS. Un CWE est une abstraction, une catégorie nommée et numérotée qui décrit un type de défaut indépendamment d'un produit ou d'une version. Le format est CWE-<id-numérique> sans préfixe d'année (contrairement à CVE-YYYY-NNNNN).

ConceptQuestionExemple
CWE« De quel type de défaut s'agit-il ? »CWE-89 « Improper Neutralization of Special Elements used in an SQL Command »
CVE« Où ce défaut a-t-il été trouvé ? »CVE-2024-39123 dans WordPress plugin X version 2.1.0
CVSS« Quelle est la sévérité technique ? »9.8 (CVSS v3.1)

Confondre les trois est l'erreur de débutant la plus fréquente. Dire « le CWE-79 a un score de 6.1 » est incorrect : 6.1 est le score CVSS d'une instance de CWE-79 dans un produit précis, pas une propriété du CWE lui-même. CWE existe en amont des instances ; les CVE en aval pointent vers le ou les CWE qui les caractérisent.

2. Hiérarchie et vues CWE - le mental model

CWE n'est pas une liste plate. C'est un graphe orienté avec des relations parent/enfant et des regroupements par vue. La nomenclature MITRE distingue quatre niveaux d'abstraction :

NiveauDéfinitionExemple
PillarConcept le plus abstraitCWE-664 « Improper Control of a Resource Through its Lifetime »
ClassFamille généraleCWE-118 « Incorrect Access of Indexable Resource »
BaseDéfaut nommé spécifiqueCWE-787 « Out-of-bounds Write »
VariantSpécialisation d'un BaseCWE-121 « Stack-based Buffer Overflow »

Vues principales utilisées en pratique :

VueIDCibleUsage
Research ViewCWE-1000AcadémiqueHiérarchie par nature de défaut
Development ViewCWE-699Équipes dev / AppSecRegroupement par phase SDLC
Architectural ViewCWE-1008Architectes / threat modelersRegroupement par décision de conception
Hardware Design ViewCWE-1194Ingénieurs hardware / siliciumDéfauts chip et SoC
CWE Top 25CWE-1387 (2024)Tout le mondeClassement par fréquence + impact

Pour un programme AppSec entreprise, j'utilise la Development View (CWE-699) comme entrée principale. Elle aligne directement les défauts sur les phases (Architecture, Design, Implementation, Test, Operation, Patching) et facilite l'intégration dans un référentiel de secure coding par phase.

3. Top 25 Most Dangerous Software Weaknesses 2024

Publié annuellement par MITRE depuis 2019, le Top 25 classe les CWE par un score composite combinant fréquence (nombre de CVE associés sur les 2 dernières années) et impact (sévérité moyenne CVSS des CVE associés). C'est l'unique benchmark industriel pour prioriser un programme secure coding.

Top 25 édition 2024 (extrait des 10 premières positions, publié en novembre 2024 sur cwe.mitre.org/top25) :

RangCWENomType
1CWE-79Cross-site Scripting (XSS)Injection
2CWE-787Out-of-bounds WriteMemory safety
3CWE-89SQL InjectionInjection
4CWE-352Cross-Site Request Forgery (CSRF)Auth/session
5CWE-22Path TraversalInjection / file
6CWE-125Out-of-bounds ReadMemory safety
7CWE-78OS Command InjectionInjection
8CWE-416Use After FreeMemory safety
9CWE-862Missing AuthorizationAuthZ
10CWE-434Unrestricted Upload of File with Dangerous TypeFile handling

Position tranchée : aligner le secure coding training strictement sur l'ordre du Top 25 vaut mieux que toutes les listes maison ou « les CWE qu'on a vus passer ». Ces 10 premiers couvrent typiquement 40-50 % du volume CVE annuel et 60 % des CVE Critical (CVSS ≥ 9.0). Couvrir Top 10 en 6 mois, Top 25 complet en 18 mois est un objectif tenable et mesurable.

Évolution 2021-2024 (extraits) :

  • CWE-79 XSS : reste #1 ou #2 toutes éditions confondues. Dominant en web app et SaaS.
  • CWE-787 Out-of-bounds Write : monté au #1 en 2022, redescendu #2 en 2024. Dominant en C/C++ legacy, embarqué, parsers.
  • CWE-918 Server-Side Request Forgery (SSRF) : ré-entré au Top 25 en 2024, conséquence de l'écosystème cloud.
  • CWE-269 Improper Privilege Management : entré dans le Top 25 récent, conséquence de la complexification des contrôles IAM cloud.

4. Mapping CWE↔CVE - le pont opérationnel

Le mapping CWE↔CVE vit dans le record CVE au format JSON 5.1, sous containers.cna.problemTypes[].descriptions[].cweId. Exemple d'extraction CLI :

# Extraire tous les CVE 2024 avec leur CWE associé
git clone --depth 1 https://github.com/CVEProject/cvelistV5.git
 
find cvelistV5/cves/2024 -name "CVE-*.json" -exec jq -r '
  .cveMetadata.cveId as $id |
  (.containers.cna.problemTypes[]?.descriptions[]? | select(.cweId)) |
  [$id, .cweId, .description] | @tsv
' {} \; 2>/dev/null > cve_cwe_2024.tsv
 
# Compter les CWE les plus fréquents en 2024
cut -f2 cve_cwe_2024.tsv | sort | uniq -c | sort -rn | head -25

Output typique 2024 : la distribution suit globalement le Top 25 MITRE avec quelques inversions. La fréquence CWE observée par jq sur cvelistV5 sert à valider que le Top 25 MITRE reflète ton scope ou à détecter qu'un CWE rare dans le Top 25 général est dominant chez ton vendor.

Cas particuliers de mapping :

SituationConséquence
CVE sans CWE~10-15 % des CVE 2024 n'ont aucun CWE attribué (CNA paresseux ou triage incomplet)
CVE avec 2-4 CWEVulnérabilité multi-classes, mapping correct
CWE référencé erronémentCas observé : CWE-119 attribué à un défaut JavaScript (pas applicable)
Mapping NVD vs CNA divergentLe NVD peut re-mapper à un CWE différent lors de l'enrichissement

5. Usage en SAST et IAST - le pont CWE / outils

Les SAST (Static Application Security Testing) et IAST (Interactive AST) modernes exposent leurs findings avec un tag CWE. Stack 2026 :

OutilTypeCWE coverageParticularité
Semgrep (r2c)SAST polyglotte~250 CWE couverts via metadata cwe2Open-source, rules YAML, intégration GitHub native
SonarQube/SonarCloudSAST + qualitéTop 25 + extensions OWASP/CWE/PCIAdopté massivement en grandes entreprises
CodeQL (GitHub)SAST avancé~150 CWE via tags requêtesLangage de requête semantic, intégration Advanced Security
Snyk CodeSAST commercialTop 25 + 100+ CWEDeepCode (rachat Snyk 2020), intégration IDE
Checkmarx OneSAST entreprise~300 CWEMarché grands comptes
VeracodeSAST SaaS~200 CWEPionnier, marché US dominant
GitLab Ultimate SASTSAST intégréTop 25Bundlé GitLab Ultimate

Exemple d'une rule Semgrep avec mapping CWE explicite :

# Rule Semgrep - détection CWE-89 SQL Injection en Python (sqlite3)
rules:
  - id: python-sqli-format-string
    pattern: |
      $CONN.execute("..." + $VAR + "...")
    pattern-either:
      - pattern: |
          $CONN.execute(f"... {$VAR} ...")
      - pattern: |
          $CONN.execute("..." % $VAR)
    languages: [python]
    severity: ERROR
    metadata:
      cwe2:
        - "CWE-89: Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')"
      owasp:
        - "A03:2021 - Injection"
      category: security
      technology: [python, sqlite, mysql, postgres]
    message: |
      Concaténation ou f-string dans une requête SQL → injection possible (CWE-89).
      Utiliser des requêtes paramétrées : execute("SELECT * FROM users WHERE id = ?", (user_id,))

Cette rule détecte les concaténations dynamiques dans execute(...) et tagge le finding CWE-89. Le tag CWE2 est le format canonique Semgrep ; il sert à filtrer / regrouper les findings dans les dashboards Semgrep AppSec et à générer des rapports PCI-DSS ou ASVS.

Position tranchée : adopter Semgrep en open-source pour 80 % du scope, garder un SAST commercial (SonarQube, Snyk Code) pour les langages complexes (Java enterprise, C/C++ legacy, Kotlin Android). Cette stratégie hybride couvre 95 % des CWE Top 25 à coût raisonnable, alors que les SAST mono-vendor entreprise coûtent typiquement 50 000 € à 500 000 € / an pour une couverture équivalente.

6. CWSS et CWRAF - les compléments de scoring

MITRE maintient deux frameworks complémentaires moins connus :

  • CWSS (Common Weakness Scoring System) : score d'un CWE dans un contexte d'application donné. Combine 18 facteurs sur 3 groupes (Base Finding Group, Attack Surface Group, Environmental Group). Spec : https://cwe.mitre.org/cwss/.
  • CWRAF (Common Weakness Risk Analysis Framework) : permet de définir des « vignettes » de risque (un cas d'usage : web banking, e-commerce, SCADA) qui pondèrent les CWE selon le contexte applicatif. Beaucoup utilisé en threat modeling consortium CWE.

Position tranchée : CWSS et CWRAF ont une adoption pratique très limitée en 2026. La majorité des équipes utilisent le rang dans le Top 25 comme proxy de priorité, et le CVSS de l'instance quand un CVE est trouvé. Investir du temps en CWSS n'a de sens que si tu fais du threat modeling formel (banques, défense, aérospatial) où tu dois quantifier des classes de défaut avant que des instances apparaissent.

7. CWE en threat modeling et architecture sécurisée

Au-delà du SAST/IAST, CWE sert à structurer un threat model. Démarche STRIDE-extended typique :

  1. Décomposer l'architecture en composants (services, datastores, frontières de confiance, flux).
  2. Identifier par composant les CWE-classes pertinents, ex. composant exposé Internet : CWE-79, CWE-89, CWE-352, CWE-918, CWE-22.
  3. Lister les CWE-base/variant correspondants à des chemins concrets de l'architecture, ex. si un module charge un fichier XML, expliciter CWE-611 (XXE).
  4. Évaluer la mitigation existante par CWE (control implemented yes/no), prioriser les gaps.
  5. Documenter les décisions et reviewer périodiquement.

Outils 2026 :

OutilOrigineForceLimite
OWASP Threat DragonOWASP / Mike GoodwinOpen-source, simple, mapping STRIDECouverture CWE limitée, pas de DB CWE intégrée
Microsoft Threat Modeling ToolMicrosoftMature, mapping STRIDE autoWindows-only, peu maintenu depuis 2023
IriusRiskIriusRiskCouverture CWE forte, librairies par stackCommercial, coûteux
PyTMOWASP / Izar TarandachThreat modeling as code PythonAdoption limitée, manque de UI

Recommandation : pour une équipe ingénieurs senior, OWASP Threat Dragon + référentiel CWE Development View (CWE-699) suffit pour 80 % des cas. Pour les organisations à compliance forte (NIS2, DORA, ISO 27001), passer à IriusRisk avec mapping CWE complet justifie son coût (typiquement 30 000-100 000 € / an selon la taille).

8. Erreurs fréquentes dans l'usage CWE

ErreurSymptômeFix
Confondre CWE et CVE« Le CWE-2024-39123 »CVE = instance + année, CWE = classe sans année
Mapping unique CWE-20 ou CWE-200Findings imprécis, dashboards inutilesForcer mapping CWE Base ou Variant, jamais Pillar/Class général
Ignorer la hiérarchieTrier les findings par ID numérique au lieu d'utiliser la vueUtiliser Development View (CWE-699) pour grouper par phase
Pas de CWE dans rapport pentestFindings non comparables entre missions/clientsForcer tag CWE par défaut dans le template de rapport
Top 25 ignoré au profit de listes maisonCouverture training partielle, biais d'expertAligner training secure coding sur Top 25 MITRE strict
Confondre CWSS et CVSSTentative de scoring instance avec CWSSCWSS = classe en contexte, CVSS = instance, choisir selon question
Pas de mapping SAST → CWEFindings non agrégeables, dashboards dispersésChoisir SAST avec metadata CWE2 (Semgrep, SonarQube, CodeQL)

9. CWE et frameworks adjacents

CWE s'inscrit dans un mapping multi-référentiels :

FrameworkLien avec CWE
OWASP Top 10 2021Mapping officiel OWASP → CWE par catégorie (A01:2021 Broken Access Control = CWE-22, CWE-862, CWE-863…)
OWASP ASVS v4.0.3 (octobre 2023)Chaque exigence référence le ou les CWE associés
OWASP MASVS / MSTGMobile-spécifique, mapping CWE pour iOS et Android
MITRE ATT&CKPas de mapping direct CWE/ATT&CK officiel mais des correspondances communautaires existent
NIST SP 800-53 r5 (2020)Contrôles de sécurité référencent indirectement les CWE pertinents
PCI-DSS v4.0 (2022)Section 6.2 (secure coding) référence OWASP qui référence CWE
CWE Top 25 + KEVCroisement Top 25 (classes) + KEV (instances exploitées) → priorisation forte

10. Pour aller plus loin

11. Points clés à retenir

  • CWE = classe abstraite de défaut, CVE = instance dans un produit, CVSS = sévérité de l'instance, trois objets distincts maintenus séparément.
  • Format CWE-NNN sans préfixe d'année. Version 4.16 (2025) répertorie environ 1 500 CWE.
  • Top 25 MITRE publié annuellement (édition 2024 publiée nov 2024), outil de priorisation n°1 pour secure coding.
  • Top 3 2024 : CWE-79 (XSS), CWE-787 (Out-of-bounds Write), CWE-89 (SQL Injection). Couvrir Top 10 en 6 mois, Top 25 en 18 mois.
  • Hiérarchie : Pillar → Class → Base → Variant. Préférer mapping vers Base ou Variant, éviter le mapping unique vers Pillar/Class générique.
  • Vues : Research (CWE-1000), Development (CWE-699, recommandée), Architectural (CWE-1008), Hardware (CWE-1194), Top 25 (CWE-1387).
  • Mapping CWE↔CVE dans le record CVE 5.1 sous problemTypes[].descriptions[].cweId. ~10-15 % des CVE 2024 sans CWE.
  • CWE-20 et CWE-200 : utilisation comme mapping unique discouraged depuis 2023, exiger un CWE plus précis en review.
  • SAST 2026 : Semgrep (open-source) couvre 250+ CWE. SonarQube, CodeQL, Snyk Code en commercial. Stack hybride recommandée.
  • CWSS et CWRAF : peu adoptés. Le rang Top 25 MITRE sert de proxy de priorité dans 90 % des cas.
  • Mapping multi-référentiel : OWASP Top 10 / ASVS v4.0.3 / MASVS / NIST SP 800-53 / PCI-DSS v4.0 référencent tous CWE comme taxonomie commune.
  • Anti-pattern n°1 : produire des rapports pentest sans tag CWE → findings non comparables, dette d'audit ASVS/PCI à 15-40 jours-homme.

Questions fréquentes

  • Quelle différence concrète entre CWE et CVE en pratique ?
    Un **CVE** est l'**instance** d'une vulnérabilité dans un produit donné (ex. CVE-2021-44228 Log4Shell dans Apache Log4j 2.x). Un **CWE** est la **classe de défaut** sous-jacente (ex. CWE-502 Deserialization of Untrusted Data + CWE-917 Expression Language Injection). En clair : le CVE répond à « quoi a été trouvé où », le CWE répond à « quel type de bug c'est ». Un même CWE peut être instancié par des milliers de CVE différents, CWE-79 (XSS) totalise plus de 23 000 CVE associés sur 25 ans. Inversement, un CVE peut référencer 2 à 4 CWE quand la vulnérabilité combine plusieurs classes. Mapping accessible dans le record CVE 5.1 via le champ `problemTypes[].descriptions[].cweId`.
  • Comment utiliser le Top 25 CWE pour prioriser le secure coding training ?
    Le **Top 25 Most Dangerous Software Weaknesses** publié annuellement par MITRE (édition 2024 publiée en novembre 2024) classe les CWE par fréquence et impact observés sur les CVE des deux dernières années. Recommandation pratique : aligner ton programme de secure coding training **dans l'ordre exact du Top 25**, pas selon des préférences internes. CWE-79 XSS (place 1 en 2024), CWE-787 Out-of-bounds Write (place 2), CWE-89 SQL Injection (place 3), couvrir ces trois ouvre 35-40 % de la surface des CVE annuels. Les CWE en bas du Top 25 (CWE-94 Code Injection, CWE-269 Improper Privilege Management) sont moins fréquents mais à fort impact, à traiter dans une seconde vague. Cible 2026 : couvrir Top 10 CWE en 6 mois, Top 25 complet sur 18 mois.
  • Quelle est la différence entre les vues CWE Research, Development et Architectural ?
    CWE propose plusieurs **vues** (Views) pour répondre à différents publics. La **Research View** (CWE-1000) organise hiérarchiquement les CWE par nature de défaut, utile pour les chercheurs académiques. La **Development View** (CWE-699) regroupe les CWE par phase du cycle de développement où ils peuvent être introduits, privilégier pour les équipes dev et SAST. L'**Architectural View** (CWE-1008) organise par décisions de conception, utile en threat modeling. La **Hardware Design View** (CWE-1194, ajoutée 2020) couvre les défauts au niveau silicium et chip. Pour un programme AppSec d'entreprise, je recommande la Development View (CWE-699) comme entrée principale parce qu'elle aligne directement les défauts sur les phases du SDLC, ce qui aide les developers à intérioriser quand introduire ou prévenir tel défaut.
  • Comment utiliser CWE en pentest et reporting de vulnérabilité ?
    Dans un rapport de pentest, chaque finding doit être taggé avec un ou plusieurs CWE pour normaliser la classification entre clients et entre missions. Recommandation pratique : utiliser le format `[CWE-NNN] Nom de la classe, Description findings spécifique`. Exemple : `[CWE-89] SQL Injection sur /api/users?id={input}, Permet l'extraction de la table users via UNION SELECT`. Cela permet (1) au client de comparer son rapport entre fournisseurs, (2) à un SOC de connecter le finding à une rule SAST/IAST, (3) à une équipe juridique de prouver la conformité ASVS/OWASP. Stack pentest 2026 : Burp Suite Professional propose le mapping CWE par défaut, OWASP ZAP idem, et Pentest-Tools.com génère un rapport CWE-tagged automatiquement.
  • Le score CWSS remplace-t-il CVSS pour scorer un CWE ?
    **Non, ils ne sont pas interchangeables.** **CVSS** (Common Vulnerability Scoring System) score une **instance** (un CVE concret avec contexte). **CWSS** (Common Weakness Scoring System) score une **classe** (un CWE en l'occurrence dans un contexte applicatif donné). CWSS sert au threat modeling et à la priorisation des classes à durcir avant qu'une faille concrète soit trouvée, par exemple, scorer CWE-89 SQL Injection sur un module dépendant lourdement de la DB. CWSS reste **moins utilisé en pratique** que CVSS parce que les scanners et CI/CD outputtent CVE+CVSS, pas CWE+CWSS. Adoption 2026 : CWSS reste cantonné aux outils MITRE et à quelques produits enterprise (CodeSonar, GrammaTech), pas grand public. Pour la priorisation classes, beaucoup d'équipes utilisent simplement le rang Top 25 CWE comme proxy.

Écrit par

Naim Aouaichia

Cyber Security Engineer et fondateur de Zeroday Cyber Academy

Ingénieur cybersécurité avec un parcours hybride : développement, DevOps Capgemini, DevSecOps IN Groupe (sécurité des documents d'identité régaliens), audits CAC 40. Fondateur de Hash24Security et Zeroday Cyber Academy. Présence LinkedIn 43 000 abonnés, Substack Zeroday Notes 23 000 abonnés.