Glossaire cyber

CVSS - Scoring vulnérabilités v3.1 vs v4.0 en 2026

CVSS v3.1 et v4.0 : Base, Threat, Environmental, Supplemental, MacroVectors. Calcul, pièges, transition v3.1→v4.0 et usage en pipeline DevSecOps 2026.

Naim Aouaichia
16 min de lecture
  • Glossaire
  • CVSS
  • Vulnerability Management
  • Risk Scoring
  • FIRST
  • DevSecOps

Le CVSS (Common Vulnerability Scoring System) est le standard ouvert maintenu par FIRST.org pour scorer la sévérité technique d'une vulnérabilité, sur une échelle de 0.0 à 10.0. Quatre versions ont structuré son histoire : v1 (2005), v2 (2007), v3.0 (2015), v3.1 (juin 2019), et la dernière v4.0 publiée le 1er novembre 2023. En 2026, l'écosystème vit une transition partielle : le NVD et la majorité des CNAs scorent encore en v3.1, tandis que Red Hat, FIRST CERT, et plusieurs éditeurs critiques publient désormais en double v3.1 + v4.0, environ 25 à 30 % des CVE 2025 ont un score v4.0 publié. Comprendre la décomposition Base / Threat / Environmental / Supplemental, les MacroVectors v4.0, le piège Scope vs Vulnerable/Subsequent, et la différence entre CVSS et risque réel est fondamental pour ne pas piloter le vulnerability management dans le brouillard.

Pour le contexte adjacent : voir CVE - Définition, format, processus qui décrit l'identifiant et l'écosystème dans lequel le score CVSS s'applique, et IOC - Indicateurs de compromission pour la couche détection en aval.

1. CVSS, FIRST.org et l'historique des versions

CVSS n'est pas une norme ISO ni une RFC : c'est un standard maintenu par le FIRST (Forum of Incident Response and Security Teams), une organisation à but non lucratif qui anime depuis 1990 la coordination internationale des CSIRT. Le SIG CVSS (Special Interest Group) regroupe des contributeurs MITRE, NIST, Cisco, Red Hat, IBM, Oracle, JPCERT/CC, et plus de 30 autres organisations. Chaque version est publiée sous licence ouverte et accompagnée d'une specification document, d'un user guide et d'un examples document.

VersionDate publicationApport principalStatut 2026
CVSS v12005Premier framework de scoring unifiéObsolète, plus utilisé
CVSS v2juin 2007Stabilisation, adoption massive (NVD, RH, Cisco)Encore vu sur entrées historiques NVD
CVSS v3.0juin 2015Ajout Scope, refonte Privileges Required, User InteractionRemplacé par v3.1
CVSS v3.1juin 2019Clarifications spec sans changement de scoreStandard 2026 dominant
CVSS v4.01er novembre 2023Refonte profonde, MacroVectors, Supplemental, retrait ScopeAdoption en cours, ~25-30 % CVE 2025

Spec officielle v4.0 : https://www.first.org/cvss/v4-0/specification-document. Le calculator officiel est sur https://www.first.org/cvss/calculator/4.0.

2. Décomposition Base, Threat, Environmental, Supplemental

CVSS s'organise en groupes de métriques complémentaires. Comprendre quel groupe répond à quelle question est le mental model essentiel.

GroupeQuestion répondueQui l'évalue ?Évolue dans le temps ?
BaseSévérité intrinsèque de la vuln, hors contexteCNA / chercheurNon (immutable)
Threat (v4.0) / Temporal (v3.1)État de l'exploitation et du remèdeCNA, NVD, équipe secOui (évolue)
EnvironmentalAdaptation au contexte de l'organisation cibleÉquipe interneOui (par déploiement)
Supplemental (v4.0 only)Métadonnées d'aide à la décisionCNA / éditeurNon, n'impacte pas score

Les groupes Threat et Environmental sont systématiquement sous-utilisés dans la pratique. La majorité des équipes consomment uniquement le score Base publié au record CVE. C'est une perte d'information importante : le score CVSS-BT (Base + Threat) baisse typiquement de 0.5 à 1.5 points quand un patch officiel existe et que la maturité de l'exploit reste à Proof of Concept, différentiel qui change la décision de gating.

3. Métriques Base v3.1 et v4.0 - le tableau de référence

Métriques Base v3.1 (qui restent majoritaires en 2026) :

MétriqueCodeValeursDescription courte
Attack VectorAVN / A / L / PNetwork / Adjacent / Local / Physical
Attack ComplexityACL / HLow / High (conditions à remplir)
Privileges RequiredPRN / L / HNone / Low / High
User InteractionUIN / RNone / Required
ScopeSU / CUnchanged / Changed
ConfidentialityCN / L / HNone / Low / High
IntegrityIN / L / HNone / Low / High
AvailabilityAN / L / HNone / Low / High

Métriques Base v4.0 - changements clés :

Changement v4.0Détail
Scope (S) suppriméRemplacé par split Vulnerable System (VC, VI, VA) vs Subsequent System (SC, SI, SA)
Attack Requirements (AT) ajoutéSépare les conditions d'exécution (race condition, état système) des conditions d'attaque (déjà couvertes par AC)
User Interaction (UI) raffinéTrois valeurs : N (None), P (Passive), A (Active) au lieu de N/R
Modified metricsToujours présentes en Environmental, sur tous les attributs Base

Vector string v4.0 type : CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N. Le format est strict : chaque métrique doit apparaître dans l'ordre canonique, et toute valeur non-N/A doit être explicite (pas d'élision).

4. Les MacroVectors v4.0 - rupture algorithmique

Le changement le plus profond entre v3.1 et v4.0 n'est pas la liste de métriques, c'est la méthode de calcul du score Base. CVSS v3.1 utilise une formule continue avec arrondis spéciaux (roundUp non standard documenté en spec §5.1). CVSS v4.0 utilise des MacroVectors : huit dimensions catégorielles qui projettent la combinaison des métriques Base/Threat/Environmental dans un espace fini d'environ 270+ équivalences, avec une lookup table des scores correspondants.

Conséquences pratiques :

  1. Deux vulnérabilités au vector string différent peuvent recevoir le même score CVSS-B v4.0 si elles appartiennent au même MacroVector, phénomène inexistant en v3.1 où chaque combinaison produisait un score quasi unique.
  2. La transition v3.1 → v4.0 ne donne pas des scores comparables 1:1. La spec v4.0 §1.5 indique explicitement qu'il ne faut pas comparer un CVSS v3.1 et un CVSS v4.0 d'un même CVE.
  3. Recoder l'algo à la main est devenu encore plus risqué qu'en v3.1. Utiliser une lib certifiée FIRST (lib Python cvss v3.x supporte v4) ou le calculator officiel.

5. Plages de sévérité et seuils de décision

Plages officielles partagées par v3.x et v4.0 :

ScoreSévéritéCodes couleur usuelsAction typique
0.0NonegrisPas de risque, info uniquement
0.1 - 3.9LowbleuBacklog trimestriel
4.0 - 6.9MediumjauneTicket SLA mensuel
7.0 - 8.9HighorangePatch sous 14-30 jours
9.0 - 10.0CriticalrougePatch sous 7 jours, watch zero-day

Ces seuils sont conventionnels, pas réglementaires. Beaucoup d'organisations matures ont calibré leurs propres seuils : par exemple DORA (Digital Operational Resilience Act, applicable aux acteurs financiers UE depuis le 17 janvier 2025) impose à plusieurs entreprises financières de tracer chaque vulnérabilité ≥ 7.0 avec un SLA de remédiation explicite. NIST SP 800-40r4 (Guide to Enterprise Patch Management Planning, avril 2022) recommande de combiner CVSS avec la valeur de l'actif et l'exposition réseau pour fixer les SLA.

Position tranchée : aligner aveuglément le SLA de remédiation sur la plage CVSS produit du bruit. Une vulnérabilité 9.8 sur un service interne air-gappé n'a pas le même budget de réponse qu'une 7.4 sur une API exposée à Internet et déjà KEV-listed. Le scoring CVSS Base est un input au triage, pas la décision finale.

6. CVSS, EPSS, CISA KEV - la synthèse opérationnelle

CVSS répond à la question « à quel point cette vulnérabilité est-elle techniquement grave ? ». Deux autres signaux complètent l'image en 2026 :

SignalSourceQuestion répondueForceLimite
CVSS BaseCNA / NVDSévérité technique 0-10Universel, comparableIgnore exploitation réelle
CVSS ThreatCNA, équipe secMaturité exploit + remèdeCapture l'évolutionSous-utilisé
EPSSFIRST.orgProbabilité d'exploitation 30j (0-1)Modèle ML mis à jour quotidiennementProbabiliste, pas une preuve
CISA KEVCISAVuln exploitée in the wildPreuve, ~1200 entrées 2026Sous-ensemble étroit

Combinaison opérationnelle pragmatique :

Priorité = f(CVSS-BT, EPSS, KEV, ExpositionReseau, ValeurActif)
 
Top priority = (KEV present) OR (CVSS-BT >= 9.0 AND EPSS >= 0.5)
High         = CVSS-BT >= 7.0 AND (EPSS >= 0.3 OR ExposureFacing)
Medium       = CVSS-BT >= 4.0 AND (Patch dispo)
Low / defer  = reste

Cette grille est plus utile qu'un seuil CVSS unique. Elle correspond à la pratique observée chez les équipes vulnerability management matures (banque, e-commerce grand volume, opérateurs cloud), documentée notamment dans le rapport Verizon DBIR 2024 (section vulnerability exploitation) et dans plusieurs publications SANS 2024-2025.

7. Calcul pratique - lib Python et scripts

Installation et usage de la lib officielle Python :

pip install cvss
from cvss import CVSS3, CVSS4
 
# Score CVSS v3.1 - Log4Shell (CVE-2021-44228)
v31 = CVSS3('CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H')
print(v31.base_score)        # 10.0
print(v31.severities())       # ('Critical', None, None)
print(v31.clean_vector())     # 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H'
 
# Score CVSS v4.0 équivalent
v40 = CVSS4(
    'CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/'
    'VC:H/VI:H/VA:H/SC:H/SI:H/SA:H'
)
print(v40.base_score)        # 10.0
print(v40.severity)          # 'CRITICAL'
 
# Avec Threat metrics (Exploit Maturity = Attacked, Patch officiel disponible)
v40_bt = CVSS4(
    'CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/'
    'VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/E:A'
)
print(v40_bt.base_score)     # 10.0 (Threat n'abaisse pas si Attacked)

Script bash de bulk-scoring sur un export NVD ou cvelistV5 :

#!/usr/bin/env bash
# Recalcule les scores v3.1 et v4.0 pour tous les CVE 2025 Critical
# Utile en audit pour vérifier la cohérence CVSS publié vs recalculé.
 
set -euo pipefail
INPUT_DIR="cvelistV5/cves/2025"
 
find "$INPUT_DIR" -name "CVE-*.json" | while read -r f; do
  cve_id=$(jq -r '.cveMetadata.cveId' "$f")
  v31_vec=$(jq -r '.containers.cna.metrics[]?.cvssV3_1.vectorString // empty' "$f" | head -1)
  v40_vec=$(jq -r '.containers.cna.metrics[]?.cvssV4_0.vectorString // empty' "$f" | head -1)
 
  if [[ -n "$v31_vec" ]]; then
    score_v31=$(python -c "from cvss import CVSS3; print(CVSS3('$v31_vec').base_score)")
  else
    score_v31="-"
  fi
  if [[ -n "$v40_vec" ]]; then
    score_v40=$(python -c "from cvss import CVSS4; print(CVSS4('$v40_vec').base_score)")
  else
    score_v40="-"
  fi
 
  printf "%s\t%s\t%s\n" "$cve_id" "$score_v31" "$score_v40"
done | tee scoring_audit_2025.tsv

Ce script produit un TSV avec, pour chaque CVE 2025, son score Base v3.1 et v4.0 si publiés. Permet de mesurer en interne l'écart entre les deux versions sur ton scope, et d'identifier les CVE où la transition modifierait le triage.

8. Erreurs fréquentes et anti-patterns CVSS

ErreurSymptômeFix
Confondre CVSS et risque« Cette vuln est un 9.8, urgence absolue »Risque = Sévérité × Probabilité × Valeur, combiner CVSS-BT + EPSS + KEV + exposition
Utiliser Base seul en gatingVolume ingérable de tickets, gate désactivéPasser à CVSS-BT, ajouter filtre KEV-driven
Recoder l'algo à la mainScores divergents de 0.1-0.5 pointsUtiliser lib officielle FIRST (Python cvss, Rust cvss-rs)
Ignorer le Scope v3.1 / Vulnerable vs Subsequent v4.0Sous-estimation impact escalation cross-systemLire la métrique S (v3) ou SC/SI/SA (v4) attentivement
Comparer CVSS v3.1 et v4.0 directement« Le score est passé de 9.8 à 7.5 ! »Spec v4.0 §1.5 interdit explicitement la comparaison cross-version
Pas de re-scoring EnvironmentalToutes les vulns priorisées identiquement quel que soit le contexteCalculer CVSS-BE par déploiement (modified metrics)
Source de score ambigüe (CNA vs NVD)Décisions contestéesDocumenter explicitement la source du score utilisé en gate
Ignorer les Supplemental Metrics v4.0Perte d'info Safety, Automatable, RecoveryLire au moins Automatable et Provider Urgency pour priorisation

9. Adoption v4.0 et ce qui change vraiment en pipeline

État de l'adoption observé en 2026 :

ActeurStatut v4.0Détail
NVDRe-scoring v4.0 partielBacklog NVD 2024-2025 limite la couverture
MicrosoftPublie en v3.1, v4.0 sur certains advisoriesTransition progressive
Red HatPublie en double v3.1 + v4.0Référence pour le double scoring
GitHub Advisoryv4.0 supporté côté recordAdoption depuis 2024
ApplePas de CVSS public officielCommunique via score interne
Cisco PSIRTv3.1 prédominantv4.0 progressif
Trivy / Grype / SnykLecture v3.1 majoritaireSupport v4.0 ajouté en 2024

Implication concrète : un pipeline qui décide uniquement à partir du score Base v3.1 reste viable en 2026 pour la majorité des CVE, mais commence à manquer de signal sur les CVE scorés exclusivement v4.0 (cas Red Hat principalement). Une stratégie défensive consiste à lire les deux versions dans le scanner et appliquer la règle « score le plus élevé entre v3.1 et v4.0 ». Inversement, certaines équipes choisissent v4.0 comme source de référence dès qu'il est disponible parce que la précision MacroVector capture mieux le différentiel Vulnerable/Subsequent.

Position tranchée : forcer une migration v3.1 → v4.0 brutale en 2026 dans une organisation qui n'est pas mature CVSS est inutile et coûteux. Mieux vaut rester en v3.1 par défaut et lire v4.0 quand publié, en attendant que le NVD termine son rattrapage et que les scanners SCA stabilisent leur support v4.0. Les bénéfices marginaux du nouveau scoring sont réels mais ne justifient pas une refonte du pipeline avant 2027.

10. Cas concrets - vulnérabilités marquantes et leur scoring

CVEVulnérabilitéCVSS v3.1 BaseCVSS v4.0 BaseParticularité
CVE-2021-44228Log4Shell (Apache Log4j JNDI)10.010.0Trivial à exploiter, KEV immédiat
CVE-2014-0160Heartbleed (OpenSSL)7.5n/a (antérieur v4)Sous-évalué historiquement vs impact réel
CVE-2017-0144EternalBlue (SMBv1)8.1n/aScore v3.1 sous-estime selon DBIR
CVE-2024-3094xz-utils backdoor10.010.0Score max mais détectée hors SCA
CVE-2024-6387regreSSHion (OpenSSH)8.18.1Race condition complexe → AC:H
CVE-2024-21413MonikerLink Outlook9.89.3v4.0 raffine sur Subsequent
CVE-2025-21298Microsoft OLE9.89.3Idem, v4.0 légèrement plus bas
CVE-2025-31324SAP NetWeaver10.010.0RCE non auth, KEV immédiat

Le cas Heartbleed (CVE-2014-0160) avec CVSS v3.1 = 7.5 est éclairant : le score capturait correctement la confidentialité (impact sur les clés privées et sessions), mais le risque réel observé en exploitation a été largement supérieur à ce que la note 7.5 suggère. C'est un exemple de la limite intrinsèque du Base score isolé, il faut combiner avec EPSS, KEV et exposition.

11. Pour aller plus loin

12. Points clés à retenir

  • CVSS = sévérité technique 0.0-10.0, pas le risque réel. Risque = Sévérité × Probabilité × Valeur de l'actif.
  • v4.0 publiée le 1er novembre 2023 par FIRST.org. Adoption 2026 ~25-30 % des CVE 2025, v3.1 reste majoritaire.
  • Quatre groupes : Base (intrinsèque, immutable), Threat / Temporal (état exploit + patch), Environmental (contexte org), Supplemental (v4 only, ne change pas le score).
  • Nomenclature v4.0 : CVSS-B, CVSS-BT, CVSS-BE, CVSS-BTE, l'utiliser pour éviter l'ambiguïté.
  • Changement majeur v4.0 : retrait de Scope, split Vulnerable/Subsequent System (VC/VI/VA + SC/SI/SA), ajout Attack Requirements (AT), Supplemental Metrics (Safety, Automatable, Recovery, Value Density, Vulnerability Response Effort, Provider Urgency).
  • MacroVectors v4.0 : ~270 équivalences, lookup table, scores non comparables 1:1 avec v3.1 (interdit explicitement par spec §1.5).
  • CNA score vs NVD score : 15-20 % de divergence avec écart moyen 1.0-2.0 points. Documenter la source choisie.
  • Plages : 0.0 None, 0.1-3.9 Low, 4.0-6.9 Medium, 7.0-8.9 High, 9.0-10.0 Critical. Conventionnelles, pas réglementaires.
  • Anti-pattern n°1 : utiliser Base seul en gating CI. Préférer CVSS-BT × EPSS × KEV × exposition × valeur.
  • Lib Python cvss : référence pour calcul programmé en v3.1 et v4.0. pip install cvss.
  • Safety metric (v4.0 Supplemental) : critique pour OT, ICS, médical, automotive, escalader systématiquement même si Base est moyen.
  • Recommandation 2026 : rester en v3.1 par défaut, lire v4.0 quand disponible, attendre stabilisation NVD et scanners avant migration totale.

Questions fréquentes

  • Quelle différence concrète entre CVSS v3.1 et v4.0 en pratique ?
    Trois changements lourds. Premièrement, la métrique **Scope (S)** disparaît en v4.0 et est remplacée par une distinction explicite **Vulnerable System** vs **Subsequent System** (VC/VI/VA pour vulnerable, SC/SI/SA pour subsequent). Deuxièmement, v4.0 introduit **Attack Requirements (AT)** qui sépare les conditions d'exécutabilité des conditions d'attaque (race conditions, état du système). Troisièmement, v4.0 ajoute des **Supplemental Metrics** (Safety, Automatable, Recovery, Value Density, Vulnerability Response Effort, Provider Urgency) qui ne modifient pas le score mais enrichissent le contexte. Adoption 2026 : v3.1 reste majoritaire dans le NVD et chez la plupart des CNAs (Microsoft, Apple, Cisco), v4.0 progresse côté Red Hat et chercheurs CERT mais reste minoritaire, environ 25-30 % des CVE 2025 ont un score v4.0 publié en plus du v3.1.
  • Pourquoi le CVSS du CNA et celui du NVD sont-ils parfois différents pour le même CVE ?
    Parce que ce sont deux scorings indépendants. Le **CNA** (CVE Numbering Authority, ex. Microsoft, Red Hat) score en fonction du contexte connu du produit, parfois en sous-évaluant l'impact pour des raisons de communication. Le **NVD** (NIST) re-score systématiquement en mode **worst-case** sur la base de la description publique, ce qui tend à produire des scores plus hauts. Une étude interne d'un éditeur SCA a observé en 2024 que 15 à 20 % des CVE avec double scoring présentaient un écart d'au moins 1.0 point. Règle pratique : pour un gate CI/CD, choisir une source unique (le CNA pour cohérence avec l'advisory officiel, le NVD pour worst-case) et la documenter explicitement, sinon les décisions deviennent contestables.
  • Faut-il utiliser CVSS Temporal/Threat ou rester sur le score Base ?
    Le score **Base seul** est insuffisant pour une décision opérationnelle. Il ignore l'existence de PoC public, de patch officiel, et la confiance dans le rapport. Le score **Threat** (anciennement Temporal en v3.1) ajoute Exploit Maturity, Remediation Level et Report Confidence, typiquement le score Base baisse de 0.5 à 1.5 points quand un patch officiel existe et qu'aucun exploit public n'est publié. En pipeline DevSecOps, j'utilise systématiquement le score CVSS-BT (Base + Threat) plutôt que Base seul, et je le combine avec **EPSS** (probabilité d'exploitation) et **CISA KEV** (preuve d'exploitation observée). Le triplet CVSS-BT × EPSS × KEV est plus robuste que CVSS Base seul.
  • Comment calculer un CVSS rapidement à partir d'un vector string ?
    Trois options. Première : le **calculator officiel FIRST** sur https://www.first.org/cvss/calculator/4.0 (v4.0) ou /3.1 (v3.1). Deuxième : la lib Python `cvss` (`pip install cvss`) qui supporte v2, v3.0, v3.1 et v4.0 et donne le score Base, Threat, Environmental en quelques lignes. Troisième : la lib Rust `cvss-rs` pour intégration scanner haute performance. Ne **jamais** recoder l'algo à la main, la formule v3.1 contient un `roundUp` non standard et v4.0 utilise des **MacroVectors** (8 vecteurs équivalents) avec une lookup table de 270+ entrées. Une implémentation custom risque de produire des scores divergents de 0.1 à 0.5 points et invalider les comparaisons inter-équipes.
  • CVSS mesure-t-il vraiment le risque ou juste la sévérité technique ?
    **Sévérité technique uniquement.** CVSS quantifie l'impact d'une exploitation réussie sur un système hypothétique sans considérer la valeur de l'actif protégé, l'existence d'exploits actifs, la probabilité d'exploitation, ni le contexte business. Le score Base est explicitement **agnostique du contexte**. Le **Risque réel** = Sévérité × Probabilité × Valeur de l'actif. Pour la probabilité, utiliser **EPSS** (Exploit Prediction Scoring System, FIRST.org). Pour la valeur, utiliser une cartographie d'actifs interne. Pour l'exploitation observée, utiliser **CISA KEV**. Confondre CVSS et Risque est l'erreur de débutant la plus coûteuse en vulnerability management, beaucoup d'organisations matures ont migré vers un scoring composite à partir de 2023-2024.

É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.