Score CVSS : comprendre le calcul, le vecteur et
ses limites
Le score CVSS compresse huit décisions en un nombre. On décortique le vecteur v3.1 métrique par métrique, la formule, un calculateur interactif et trois CVE réelles, puis ses limites.
own2pwn10 min de lecture

Le score ne dit pas si vous êtes exposé
La surveillance de surface d'attaque externe corrèle les CVE à ce qui est réellement joignable depuis Internet, et priorise par exploitabilité, pas par note brute.
Voir la surveillance de surfaceUn score CVSS, c'est huit décisions binaires ou presque, écrasées en un seul nombre entre 0.0 et 10.0. La compression est brutale, et elle cache autant qu'elle informe. Prenez trois failles réelles : Log4Shell note 10.0, la RCE pré-authentifiée du cœur de WordPress notée 9.8, et PwnKit, l'escalade de privilèges de pkexec, notée 7.8. Trois nombres proches, trois situations qui n'ont presque rien à voir. Pour les départager, il faut ouvrir le capot.
Cet article décompose le vecteur CVSS métrique par métrique, montre la formule officielle du score de base en v3.1, l'implémente dans un calculateur interactif que vous manipulez plus bas, puis décortique trois CVE vérifiées. On finit par la partie que tout le monde saute : pourquoi le score, seul, ne suffit jamais à décider quoi corriger en premier.
CVSS, ce que le score mesure vraiment
CVSS veut dire Common Vulnerability Scoring System. C'est un standard ouvert maintenu par le FIRST (Forum of Incident Response and Security Teams), et c'est la note que vous voyez sur chaque fiche NVD, dans les avis d'éditeurs et dans la sortie de votre scanner. La notation CVSS se décline en trois groupes de métriques : le groupe de base, qui décrit la gravité intrinsèque et immuable d'une faille, un groupe temporel (rebaptisé menace en v4.0) qui suit l'évolution de l'exploit, et un groupe environnemental qui pondère selon votre déploiement.
Dans la quasi-totalité des usages, quand on dit "le score CVSS d'une CVE", on parle du score de base. C'est celui que publie la NVD, celui qui alimente les tableaux de bord, et le seul qui ne dépend pas de votre contexte. Il se calcule à partir d'un vecteur : une chaîne compacte du type CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H. Le vecteur est la vérité, le score n'en est que le résumé. Deux failles au même score peuvent avoir des vecteurs très différents, et c'est là que se joue la compréhension.
Le vecteur CVSS v3.1, métrique par métrique
Le score de base v3.1 se répartit en deux sous-scores : l'exploitabilité (à quel point la faille est facile à déclencher) et l'impact (ce qu'on obtient une fois qu'elle est déclenchée). Quatre métriques nourrissent l'exploitabilité, trois l'impact, et une huitième, le Scope, articule les deux. Voici les huit, avec les poids exacts de la table 16 de la spécification.
| Métrique | Valeurs (poids) | Ce qu'elle capture |
|---|---|---|
| AV Attack Vector | Network 0.85, Adjacent 0.62, Local 0.55, Physical 0.20 | La distance depuis laquelle on attaque. Une faille joignable depuis Internet pèse le plus lourd. |
| AC Attack Complexity | Low 0.77, High 0.44 | Les conditions hors du contrôle de l'attaquant. High = il faut gagner une course, deviner un secret, etc. |
| PR Privileges Required | None 0.85, Low 0.62, High 0.27 | Le niveau de compte nécessaire avant l'attaque. None = pré-authentifié. Les poids Low et High montent si le Scope change. |
| UI User Interaction | None 0.85, Required 0.62 | Faut-il qu'une victime clique ou ouvre un fichier ? None = l'attaque est autonome. |
| S Scope | Unchanged, Changed | La faille déborde-t-elle du composant vulnérable vers d'autres ressources ? Changed amplifie tout le reste. |
| C / I / A Impacts | High 0.56, Low 0.22, None 0 | Ce qu'on casse : confidentialité, intégrité, disponibilité. Trois fois High = compromission totale. |
Le Scope mérite un arrêt, parce que c'est la métrique la plus mal comprise et celle qui fait basculer un score. Scope Unchanged : l'impact reste dans le périmètre d'autorité du composant touché. Scope Changed : l'exploitation déborde, comme une évasion de conteneur qui compromet l'hôte, ou une injection dans un composant qui pilote un autre système. Un Scope changé relève les poids de PR et applique un facteur 1.08 au total, ce qui permet à une faille d'atteindre 10.0. Sans lui, le plafond effectif d'un vecteur classique tourne autour de 9.8.
Comment le score CVSS v3.1 est calculé (la formule)
Contrairement à ce que laisse croire l'étiquette "score", ce n'est pas une moyenne. C'est une suite de multiplications définie mot pour mot dans la spécification FIRST v3.1. Trois étapes : un sous-score d'impact (ISS), un sous-score d'exploitabilité, puis leur combinaison avec un arrondi particulier.
# Sous-score d'impact
ISS = 1 - [ (1 - C) × (1 - I) × (1 - A) ]
# Impact, selon le Scope
Impact(S:U) = 6.42 × ISS
Impact(S:C) = 7.52 × (ISS - 0.029) - 3.25 × (ISS - 0.02)^15
# Exploitabilité
Exploitability = 8.22 × AV × AC × PR × UI
# Score de base
BaseScore(S:U) = Roundup( min(Impact + Exploitability, 10) )
BaseScore(S:C) = Roundup( min(1.08 × (Impact + Exploitability), 10) )
# Roundup = le plus petit nombre à 1 décimale >= à l'entréeLe Roundup n'est pas un arrondi standard : il arrondit toujours vers le haut à la première décimale. C'est pour ça qu'un calcul intermédiaire de 7.7077 ressort à 7.8 et non à 7.7. Déroulons PwnKit à la main, vecteur AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H. ISS vaut 1 - (1 - 0.56)³ = 0.9148. L'impact en Scope Unchanged vaut 6.42 × 0.9148 = 5.8731. L'exploitabilité vaut 8.22 × 0.55 × 0.77 × 0.62 × 0.85 = 1.8346. La somme fait 7.7077, on arrondit vers le haut : 7.8. La note tombe pile sur ce que publie la NVD.
Plutôt que de vous croire sur parole, manipulez-le. Le calculateur ci-dessous implémente exactement ces équations, poids compris, et recalcule le score et le vecteur à chaque clic, en local. Il est pré-rempli sur la RCE WordPress à 9.8 : basculez S sur Changed et regardez le score franchir 10.0, ou passez AV de Network à Local pour voir l'exploitabilité s'effondrer.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HCalcul local, sans envoi réseau. Groupe de métriques de base uniquement (les groupes Threat et Environnemental ne sont pas inclus). Formule et poids : spécification FIRST CVSS v3.1.
Groupe de base uniquement
Trois CVE décomposées vecteur par vecteur
Rien ne vaut de vrais vecteurs pour sentir ce que le score cache. Voici trois CVE au score de base élevé, chacune vérifiée sur sa fiche NVD, avec un profil de vecteur radicalement différent. Le tableau donne le vecteur, la ligne de prose qui suit explique ce que chaque note dit et ne dit pas.
| CVE | Score | Vecteur v3.1 | Point saillant |
|---|---|---|---|
| CVE-2021-44228 Log4Shell | 10.0 | AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H | Le S:C qui débloque le 10.0 : la charge JNDI déborde du logger vers tout le processus. |
| CVE-2026-63030 RCE cœur WordPress | 9.8 | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H | Le patron de la RCE pré-authentifiée. Scope inchangé, donc plafonnée à 9.8. |
| CVE-2021-4034 PwnKit / pkexec | 7.8 | AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H | Impact total mais AV:L et PR:L : il faut déjà un pied sur la machine. |
Log4Shell et la RCE WordPress partagent le même sous-score d'impact, et pourtant l'une note 10.0 et l'autre 9.8. La seule différence tient dans une lettre : S:Ccontre S:U. Log4Shell débordait du composant de logging vers l'ensemble du processus Java via une résolution JNDI, ce que le Scope Changed traduit numériquement. La RCE de WordPress, décrite par sa fiche NVD comme un défaut de routage de l'API REST combiné à une injection SQL, reste dans son périmètre applicatif. On approfondit sa mécanique dans l'analyse de la RCE pré-auth qui touche le cœur de WordPress.
PwnKit raconte l'histoire inverse. Impact maximal sur les trois axes, comme les deux autres, mais un vecteur d'attaque Local et des privilèges Low requis : il faut déjà un compte sur la machine pour la déclencher. Ces deux métriques divisent l'exploitabilité par plus de deux, et le score tombe à 7.8, dans la bande High. Un scanner qui trie par note descendante l'affichera loin derrière une pile de failles Critical. On verra pourquoi c'est une erreur de le reléguer.
CVSS v4.0 : la fin de la formule unique
Publiée par le FIRST, la version 4.0 change la donne sur un point structurant : il n'y a plus de formule arithmétique fermée. Là où v3.1 se calcule au crayon, v4.0 repose sur un MacroVector et une table de correspondance. Les vecteurs sont regroupés en classes d'équivalence (six EQ), chaque classe pointe vers un score de référence, et un vecteur donné est interpolé selon sa distance de sévérité à l'intérieur de sa classe. Impossible de reproduire ça avec quatre multiplications, d'où le renvoi au calculateur officiel plus haut : c'est la seule implémentation qui embarque la table complète.
Les métriques de base bougent aussi. Le Scope disparaît en tant que tel et se scinde en deux jeux d'impact : le système vulnérable (VC/VI/VA) et le système suivant, en aval (SC/SI/SA). Une nouvelle métrique Attack Requirements (AT) capte les conditions de déploiement, comme une course à gagner. Et User Interaction passe de deux à trois valeurs : None, Passive, Active. Le tout se lit à travers une nomenclature qui indique enfin quels groupes de métriques ont réellement servi au score.
Les bandes qualitatives, elles, ne changent pas d'une version à l'autre : None à 0.0, Low de 0.1 à 3.9, Medium de 4.0 à 6.9, High de 7.0 à 8.9, Critical de 9.0 à 10.0. Un 8.9 reste un cheveu sous le rouge, un 9.0 bascule dedans, et cette frontière arbitraire pilote plus de décisions de patch qu'elle ne le devrait.
En pratique, v3.1 reste la version que vous croiserez le plus. La plupart des fiches, des scanners et des politiques internes raisonnent encore en v3.1, et de nombreuses CVE portent les deux vecteurs en parallèle, l'un du fournisseur, l'autre de la NVD. Savoir lire les deux notations n'est donc pas optionnel : une même faille peut afficher un score v3.1 et un score v4.0 qui ne tombent pas sur la même valeur, ni parfois sur la même bande de sévérité, sans que l'une des deux soit fausse. Elles ne mesurent simplement pas tout à fait la même chose.
Pourquoi le score CVSS ne suffit pas à prioriser
Voilà le vrai sujet. Le score de base mesure une gravité intrinsèque, volontairement détachée de tout contexte. C'est une qualité pour comparer des failles dans l'absolu, et un défaut pour décider quoi corriger lundi matin. Trier un backlog par CVSS décroissant, c'est traiter une faille Critical sur un serveur interne éteint avant une faille High sur un actif exposé et déjà attaqué. Deux signaux corrigent ce biais, et aucun des deux n'est dans le score.
Le premier est l'EPSS (Exploit Prediction Scoring System), également maintenu par le FIRST : une probabilité, mise à jour chaque jour, qu'une CVE soit exploitée dans les trente prochains jours. Une même note CVSS peut couvrir un EPSS de 0,1 % et un EPSS de 95 %. Le second est le catalogue CISA KEV (Known Exploited Vulnerabilities), la liste des failles pour lesquelles une exploitation en conditions réelles est prouvée. PwnKit, notre 7.8, y figure depuis 2022 : moins gravement noté que n'importe quel 9.8, mais massivement exploité, trivial à automatiser une fois un accès obtenu. Le score le range en second, la réalité le range en premier.
La règle de terrain
Le troisième signal, celui que ni CVSS ni EPSS ne portent, c'est votre exposition. Une CVE ne compte que si l'actif qui la porte est joignable et vous appartient. C'est tout l'objet d'une surveillance de surface d'attaque externe : corréler chaque CVE à un actif réellement exposé sur Internet, par bannière et version, et remonter en priorité ce qui est à la fois grave, exploité et atteignable. Ce croisement est aussi le cœur d'un programme EASM, là où un scanner de vulnérabilité classique s'arrête souvent à la note brute.
Concrètement, le score CVSS entre comme un ingrédient dans une gestion des vulnérabilités qui le dépasse : il alimente la sévérité de départ, l'EPSS et le KEV ajustent l'urgence, l'exposition tranche, et le tout se traduit en échéances dans un plan de remédiation puis en patch management discipliné. Le score n'est pas la décision, c'est une de ses entrées.
À retenir
- Le vecteur prime sur le score. Deux failles à 9.8 peuvent avoir des profils opposés. Lisez toujours
AV/AC/PR/UI/S/C/I/A, pas seulement le nombre. - Le score v3.1 est une formule fermée. Impact via l'ISS, exploitabilité via un produit de poids, combinaison et arrondi vers le haut. Le Scope Changed est ce qui débloque le 10.0.
- CVSS v4.0 n'a plus de formule. MacroVector et table de correspondance, Scope éclaté en VC/VI/VA et SC/SI/SA, nouvelle métrique AT, et une nomenclature B / BT / BE / BTE qui dit ce que le score contient.
- Le score de base ignore le contexte. Il mesure la gravité intrinsèque, pas la probabilité d'exploitation ni votre exposition.
- Prioriser, c'est croiser. CVSS pour la gravité, EPSS et CISA KEV pour la menace, la surface d'attaque pour l'exposition. Une High exploitée et exposée passe avant une Critical inatteignable.
Le score CVSS est un point de départ honnête et un point d'arrivée trompeur. Si vous voulez transformer une liste de CVE en file de correctifs qui a du sens, il faut le confronter à ce qui est réellement joignable chez vous : c'est exactement ce que fait la surveillance de surface d'attaque externe d'own2pwn, qui rapproche chaque vulnérabilité de l'actif exposé qui la porte et priorise par exploitabilité. Pour un regard humain sur les failles que la note sous-estime, un pentest automatisé complète le tableau. Pour en discuter, il suffit de prendre contact.
Questions fréquentes sur le score CVSS
Que signifie un score CVSS de 9.8 ?
Un score CVSS de 9.8 tombe dans la bande Critical (9.0 à 10.0). En v3.1, il correspond presque toujours à une faille exploitable à distance, sans authentification ni interaction, avec impact total sur la confidentialité, l'intégrité et la disponibilité. Le vecteur typique est AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H. La note dit la gravité potentielle, pas la probabilité d'exploitation ni votre exposition réelle.
Quelle différence entre CVSS v3.1 et CVSS v4.0 ?
CVSS v3.1 repose sur une formule arithmétique fermée. CVSS v4.0 remplace la métrique Scope par deux jeux d'impact (système vulnérable VC/VI/VA et système suivant SC/SI/SA), ajoute Attack Requirements, affine User Interaction en Passive/Active, et surtout n'a plus de formule fermée : le score vient d'un MacroVector et d'une table de correspondance. La nomenclature CVSS-B, BT, BE, BTE indique quels groupes de métriques ont servi.
Comment lire un vecteur CVSS ?
Un vecteur v3.1 s'écrit CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H. Chaque paire est une métrique et sa valeur : AV le vecteur d'attaque, AC la complexité, PR les privilèges requis, UI l'interaction utilisateur, S le scope, puis C, I, A pour les impacts confidentialité, intégrité et disponibilité. Le vecteur est la source, le score n'en est que le résumé chiffré.
Le score CVSS suffit-il à prioriser les correctifs ?
Non. Le score de base mesure une gravité intrinsèque, hors contexte. Pour prioriser, il faut le croiser avec la probabilité d'exploitation (EPSS de FIRST), la preuve d'exploitation active (catalogue CISA KEV) et votre exposition réelle : une faille Critical sur un service non joignable depuis Internet passe après une faille High sur un actif exposé et déjà attaqué.
Qu'est-ce que la métrique Scope (S) en CVSS ?
Le Scope indique si la faille peut affecter des ressources au-delà du composant vulnérable. Scope Unchanged (S:U) : l'impact reste dans le périmètre de sécurité du composant. Scope Changed (S:C) : l'exploitation déborde, par exemple une évasion de sandbox ou une compromission d'hôte depuis un conteneur. Un scope changé augmente le score, et c'est ce qui permet à une faille d'atteindre 10.0 en v3.1.
Où trouver le vecteur CVSS officiel d'une CVE ?
Sur la fiche NVD de la CVE (nvd.nist.gov/vuln/detail), qui publie le score de base et le vecteur complet, parfois avec une valeur primaire du fournisseur et une valeur secondaire de la NVD. Le registre CVE (cve.org) et les avis des éditeurs portent aussi le vecteur. Ce sont ces vecteurs qu'un calculateur permet de vérifier et de recomposer soi-même.
Veille sécurité
La suite, une fois par mois
Ce qui bouge vraiment sur la surface d'attaque externe, NIS2 et la sécurité applicative, écrit par le pentester qui signe ces articles. Un envoi par mois, désinscription en un clic.
Votre adresse ne sert qu'à cet envoi. Voir la politique de confidentialité.
Articles liés
appsec
Gestion des vulnérabilités (vulnerability management) : le guide
Un scan crache 4 000 findings, 600 en "critique". La gestion des vulnérabilités n'est pas un scan mais un cycle de vie : priorisation CVSS + EPSS + KEV et exposition réelle de l'actif.
appsec
Faille zero-day : le vrai délai avant exploitation de vos équipements exposés
Une faille zero-day sur un VPN SSL, un Exchange ou un NetScaler exposé n'attend pas. Mesure sur le catalogue CISA KEV : écart médian divulgation vers exploitation de 6 jours. Quatre cas datés.
appsec
Patch management : arbitrer, parce qu'on ne patchera jamais tout à temps
Le patch management ne bute pas sur le geste technique mais sur l'arbitrage : fenêtre d'exposition réelle, actifs non patchables, correctifs qui cassent la production.