~11 minutes
🎯 Nous y voilà. Après avoir décortiqué CVE, CVSS, EPSS, et KEV, il est temps de tout assembler.
Aujourd’hui, on construit la matrice de priorisation qui va vous permettre de passer de “42 000 CVE à patcher” à “42 CVE à patcher cette semaine, dans cet ordre précis” 🚀.
Plus de panique, plus de “on patche au hasard”. Juste une méthodologie claire, automatisable, et défendable devant un audit.
Rappel : Les quatre piliers
| Indicateur | Organisation | Ce qu’il mesure | Type |
|---|---|---|---|
| CVE | MITRE / CNA | Identifiant unique de la vulnérabilité | ID |
| CVSS | FIRST | Sévérité technique (impact théorique) | Score (0-10) |
| EPSS | FIRST | Probabilité d’exploitation (30 jours) | Score (0-1) |
| KEV | CISA | Exploitation réelle confirmée | Booléen (oui/non) |
Le schéma complet
┌─────────────────────────────────────────────────────────────┐
│ ÉCOSYSTÈME VULNÉRABILITÉS │
└─────────────────────────────────────────────────────────────┘
│
┌─────────▼─────────┐
│ CVE-2026-1234 │ ← Identifiant unique
│ (MITRE / CNA) │
└─────────┬─────────┘
│
┌────────────────┼────────────────┐
│ │ │
┌─────────▼─────────┐ ┌───▼────────┐ ┌────▼──────────┐
│ CVSS: 9.8 │ │ EPSS: 0.87 │ │ KEV: Présente │
│ (Sévérité tech.) │ │ (Proba 87%)│ │ (Exploitée !) │
│ [FIRST] │ │ [FIRST] │ │ [CISA] │
└───────────────────┘ └────────────┘ └───────────────┘
│ │ │
└────────────────┼────────────────┘
│
┌─────────▼─────────┐
│ + VOTRE CONTEXTE│
│ (Exposition, │
│ Criticité métier│
│ Impact business)│
└─────────┬─────────┘
│
┌─────────▼─────────┐
│ DÉCISION DE │
│ PRIORISATION │
│ (P0, P1, P2, P3)│
└───────────────────┘
La matrice de priorisation
Voici une grille de décision qui croise tous les indicateurs :
🔴 Niveau 1 : KEV = Priorité absolue
Règle d’or : Si une CVE est dans KEV, c’est P0 (urgence), quel que soit son CVSS ou son EPSS.
| CVE | CVSS | EPSS | KEV | Exposition | Priorité | Délai |
|---|---|---|---|---|---|---|
| CVE-A | 9.8 | 0.95 | ✅ | Internet | P0 | 24-48h |
| CVE-B | 6.5 | 0.88 | ✅ | Interne | P0 | 3-5 jours |
| CVE-C | 7.2 | 0.12 | ✅ | Isolé | P1 | 1 semaine |
- KEV = exploitation confirmée dans la nature 🔥
- Vous n'êtes plus "à risque", vous êtes en danger 🚨
- Le "Due Date" de KEV est une obligation (légale pour les agences US, contractuelle pour certains secteurs) ⚖️
🟠 Niveau 2 : EPSS élevé (sans KEV)
Si la CVE n’est pas (encore) dans KEV, mais que l’EPSS est élevé :
| CVE | CVSS | EPSS | KEV | Exposition | Priorité | Délai |
|---|---|---|---|---|---|---|
| CVE-D | 9.2 | 0.90+ | ❌ | Internet | P1 | 1 semaine |
| CVE-E | 7.5 | 0.80-0.89 | ❌ | Internet | P1 | 10 jours |
| CVE-F | 8.1 | 0.70-0.79 | ❌ | Interne | P2 | 2 semaines |
- EPSS > 0.80 = forte probabilité d'exploitation imminente ⏰
- Mieux vaut patcher avant que la CVE n'entre dans KEV 🛡️
🟡 Niveau 3 : CVSS élevé (EPSS faible)
Si le CVSS est élevé mais l’EPSS est faible :
| CVE | CVSS | EPSS | KEV | Exposition | Priorité | Délai |
|---|---|---|---|---|---|---|
| CVE-G | 9.8 | 0.05 | ❌ | Interne | P2 | 2-3 semaines |
| CVE-H | 9.2 | 0.02 | ❌ | Isolé | P3 | Cycle normal |
- Grave techniquement, mais peu de risque d'exploitation réelle 📊
- Peut-être un PoC complexe, ou un produit très niche 🔬
🟢 Niveau 4 : Tout le reste
| CVE | CVSS | EPSS | KEV | Exposition | Priorité | Délai |
|---|---|---|---|---|---|---|
| CVE-I | 6.5 | 0.30 | ❌ | Interne | P3 | Cycle normal |
| CVE-J | 5.2 | 0.10 | ❌ | Isolé | P4 | Backlog |
- Risque faible, impact limité 😌
- On patche dans le cadre du cycle de maintenance habituel 🔄
Le contexte : La variable manquante
CVSS, EPSS et KEV donnent des indicateurs globaux. Mais le risque réel dépend de votre contexte.
Les questions à se poser
Pour chaque CVE, demandez-vous :
1. Exposition
| Niveau | Description | Multiplicateur |
|---|---|---|
| Internet 🌍 | Accessible publiquement | x2 |
| DMZ 🚪 | Accessible depuis Internet via VPN/bastion | x1.5 |
| Interne 🏢 | Réseau interne, pas d’accès direct | x1 |
| Isolé 🔒 | Air-gapped, segmenté | x0.5 |
2. Criticité métier
| Niveau | Description | Multiplicateur |
|---|---|---|
| Critique 🔥 | Prod, revenue-generating, données sensibles | x2 |
| Important ⚠️ | Services internes essentiels | x1.5 |
| Standard 📋 | Services non-critiques | x1 |
| Dev/Test 🧪 | Environnements non-prod | x0.5 |
3. Facilité de mitigation
| Difficulté | Description | Ajustement |
|---|---|---|
| Facile ✅ | Patch simple, sans dépendance | Aucun |
| Moyenne ⚙️ | Patch avec tests requis | +3 jours |
| Difficile ⚠️ | Patch complexe, risque de casse | +1 semaine |
| Impossible 🚫 | Pas de patch, EOL, workaround seulement | Mitigation |
Le workflow complet
Lundi matin (30 min)
1. Récupérer les données
import requests
import pandas as pd
# Récupérer KEV
kev_url = "https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json"
kev_data = requests.get(kev_url).json()
kev_df = pd.DataFrame(kev_data['vulnerabilities'])
# Récupérer EPSS pour vos CVE
cve_list = ["CVE-2024-1234", "CVE-2024-5678"] # Depuis votre scanner
epss_scores = {}
for cve in cve_list:
response = requests.get(f"https://api.first.org/data/v1/epss?cve={cve}")
data = response.json()
if data['status'] == 'OK' and len(data['data']) > 0:
epss_scores[cve] = {
'epss': float(data['data'][0]['epss']),
'percentile': float(data['data'][0]['percentile'])
}
# Croiser avec les résultats de votre scanner (Nessus, Qualys...)
# qui contient déjà CVE + CVSS + Assets
2. Identifier les P0 (KEV)
# CVE de votre scanner qui sont dans KEV
your_cves_in_kev = kev_df[kev_df['cveID'].isin(cve_list)]
if len(your_cves_in_kev) > 0:
print("⚠️ ALERTE : CVE dans KEV détectées !")
print(your_cves_in_kev[['cveID', 'vendorProject', 'product', 'dueDate']])
# → Envoi d'une alerte Slack/Teams/Email
3. Trier par EPSS décroissant
# Créer une liste triée
prioritized_cves = sorted(
epss_scores.items(),
key=lambda x: x[1]['epss'],
reverse=True
)
for cve, scores in prioritized_cves[:10]: # Top 10
print(f"{cve}: EPSS={scores['epss']:.3f} (Percentile {scores['percentile']:.1f}%)")
Mardi-Jeudi (Action)
1. P0 (KEV) : Patch immédiat
- Mardi matin : Identification des assets vulnérables.
- Mardi après-midi : Tests du patch en pré-prod.
- Mercredi : Déploiement en prod (ou mitigation si pas de patch).
2. P1 (EPSS > 0.80) : Cette semaine
- Mercredi : Tests.
- Jeudi : Déploiement.
🟡 3. P2 (CVSS élevé, EPSS moyen) : Ce mois-ci
- Planification pour les 2-3 semaines suivantes 📆.
🟢 4. P3 (Le reste) : Cycle normal
- Ajout au backlog de patch management 📋.
Vendredi (Documentation)
Documentez :
- Quelles CVE ont été patchées ? (ID, date, assets concernés).
- Quelles CVE n’ont PAS été patchées, et pourquoi ? (pas de patch, risque de casse, système en EOL…).
- Quelles mitigations temporaires ont été mises en place ? (firewall, WAF, désactivation de fonctionnalité…).
Outils :
- JIRA / Confluence pour le tracking.
- Tableau Excel / Google Sheets (si vous êtes old school).
- Dashboard de votre outil de patch management (Ivanti, ManageEngine…).
Les outils pour automatiser
Scanners de vulnérabilités (gratuits/open-source)
| Outil | CVSS | EPSS | KEV | Licence | Notes |
|---|---|---|---|---|---|
| Greenbone OpenVAS | ✅ | ❌ | ❌ | Open Source | Scanner complet, feeds gratuits |
| Vuls | ✅ | ✅ | ❌ | Open Source | Scanner léger, multi-OS |
| Trivy | ✅ | ❌ | ❌ | Open Source | Spécialisé containers/IaC |
| Nuclei | ✅ | ❌ | ❌ | Open Source | Template-based, rapide |
| OWASP Dependency-Track | ✅ | ✅ | ✅ | Open Source | Plateforme SCA continue |
Il existe pour Trivy des outils permettant de vous générer des rapports avec l’EPSS. Par exemple : Trivy - Scan2html
APIs et feeds
| Source | URL | Format | Mise à jour |
|---|---|---|---|
| CISA KEV | JSON Feed | JSON | Continu |
| FIRST EPSS | API | JSON/CSV | Quotidien |
| NVD | API | JSON | Continu |
| CIRCL CVE Search | API | JSON | Quotidien |
Les pièges à éviter (le best-of)
1. L’obsession du CVSS
Problème : Une CVE à 6.5 avec EPSS 0.95 et dans KEV est infiniment plus dangereuse qu’une 9.8 avec EPSS 0.01 et hors KEV.
Solution : Arrêtez de fétichiser le CVSS. C’est UN indicateur parmi 4+.
2. Ignorer le contexte
3. La paralysie par l’analyse
4. Croire que KEV est exhaustif
5. Patcher sans tester
- Isolez le système vulnérable (firewall, segmentation) 🔒
- Testez le patch en pré-prod 🧪
- Déployez si OK, sinon appliquez des mitigations temporaires 🛡️
6. Négliger la communication
- Alertes 🚨 : Si une CVE dans KEV touche un système critique, informez immédiatement.
- Reporting hebdomadaire 📊 : Dashboard des CVE patchées et en cours.
- Documentation 📝 : Pour les audits et les certifications (ISO 27001, SOC 2...).
Cas d’usage réels
Cas 1 : La tempête parfaite
CVE-2024-XXXX : RCE dans nginx (utilisé pour tous vos reverse proxies).
| Indicateur | Valeur |
|---|---|
| CVSS | 9.8 |
| EPSS | 0.92 |
| KEV | ✅ (ajouté ce matin) |
| Exposition | Internet (tous vos serveurs web) |
| Criticité métier | Critique (prod, transactions clients) |
Cas 2 : Le faux positif
CVE-2024-YYYY : SQLi dans un plugin WordPress obscur.
| Indicateur | Valeur |
|---|---|
| CVSS | 8.1 |
| EPSS | 0.85 |
| KEV | ❌ |
| Exposition | Vous n’utilisez pas WordPress |
- Priorité : P4 (ignorée) 🚫
- Raison : Pas de WordPress dans votre stack ✅
Cas 3 : L’escalade rapide
CVE-2024-ZZZZ : Privilege escalation dans sudo.
| Indicateur | Jour 1 | Jour 3 | Jour 7 |
|---|---|---|---|
| CVSS | 7.8 | 7.8 | 7.8 |
| EPSS | 0.10 | 0.75 | 0.95 |
| KEV | ❌ | ❌ | ✅ |
- Jour 1 : P3 (cycle normal, surveillance) 👀
- Jour 3 : P1 (EPSS monte, un PoC est publié) ⚠️
- Jour 7 : P0 (KEV, exploitation confirmée par ransomwares) 🔥
La checklist du lundi matin
Étape 1 : Récupérer KEV (5 min)
curl -o kev.json https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json
Filtrez les CVE ajoutées cette semaine :
kev_df['dateAdded'] = pd.to_datetime(kev_df['dateAdded'])
recent = kev_df[kev_df['dateAdded'] >= '2026-01-15']
Étape 2 : Croiser avec vos assets (10 min)
Votre scanner de vulnérabilités vous donne une liste de CVE détectées. Croisez avec KEV :
your_cves = ['CVE-2024-1234', 'CVE-2024-5678', ...]
cves_in_kev = kev_df[kev_df['cveID'].isin(your_cves)]
if len(cves_in_kev) > 0:
print("⚠️ URGENCE : CVE dans KEV !")
# Envoi alerte Slack/Teams
Étape 3 : Récupérer EPSS (10 min)
Pour toutes vos CVE non présentes dans KEV, récupérez le score EPSS :
for cve in your_cves:
epss = get_epss_score(cve) # Fonction que vous avez créée
print(f"{cve}: EPSS={epss}")
Étape 4 : Trier et prioriser (5 min)
Créez votre liste de priorités :
| Priorité | Critères | Action |
|---|---|---|
| P0 | KEV = ✅ | Patch immédiat (24-48h) |
| P1 | EPSS > 0.80 + Internet | Patch cette semaine |
| P2 | CVSS > 8.0 + EPSS > 0.50 | Patch ce mois-ci |
| P3 | Le reste | Cycle normal |
Étape 5 : Communiquer (5 min)
Envoyez un résumé à votre équipe et à votre RSSI :
Bonjour,
Rapport hebdomadaire des vulnérabilités (Semaine 3 - Janvier 2026) :
✅ CVE patchées la semaine dernière : 12
⚠️ CVE dans KEV détectées : 2 (CVE-2024-XXXX, CVE-2024-YYYY)
🔴 CVE prioritaires cette semaine : 5 (EPSS > 0.80)
📊 Backlog : 27 CVE
Actions en cours :
- CVE-2024-XXXX : Patch en test, déploiement mercredi.
- CVE-2024-YYYY : Mitigation temporaire appliquée (WAF), patch prévu vendredi.
Dashboard : https://grafana.company.com/vuln-management
Ce qu’il faut retenir
Conclusion : Le patch management en 2026
On est en 2026 . On a des IA qui génèrent du code , des containers qui s’auto-scalent , et des dashboards qui clignotent en temps réel . Mais on a aussi 50 000 CVE par an , dont des milliers marquées “Critical” .
Et si vous ne les utilisez pas encore, sachez que vos concurrents (et vos attaquants) le font déjà .
- Ouvrez KEV
- Triez par EPSS
- Contextualisez avec votre infra
- Attaquez dans l'ordre
Vous ne sauverez pas le monde , mais vous sauverez peut-être votre boîte .
Ressources supplémentaires
Pour réviser les bases :
- CVE-2026-0544 : L’injection SQL qui ne meurt jamais
- La base CVE : Mode d’emploi
- CVSS : Le thermomètre cassé
Ressources officielles :