CISA KEV - Known Exploited Vulnerabilities Catalog
Der CISA KEV (Known Exploited Vulnerabilities) Catalog ist eine von der US-Behörde CISA gepflegte Liste aktiv ausgenutzter Schwachstellen. Alle US-Bundesbehörden müssen KEV-Schwachstellen innerhalb definierter Fristen patchen. Für Unternehmen: Priorisierungshilfe über CVSS hinaus - wenn eine Schwachstelle in KEV steht, wird sie aktiv ausgenutzt. API-Zugriff und Integration in Patch-Management, SIEM und Schwachstellenscanner.
CISA KEV (Known Exploited Vulnerabilities) ist ein kostenloser Catalog der US-Cybersecurity and Infrastructure Security Agency (CISA) der Schwachstellen listet die aktiv in realen Angriffen ausgenutzt werden. Im Gegensatz zu CVSS (das nur theoretisches Schweregrad bewertet) gibt KEV eine klare Aussage: “Diese Schwachstelle wird JETZT ausgenutzt.” Für Priorisierungsentscheidungen im Patch-Management ist KEV oft relevanter als CVSS allein.
Warum CISA KEV wichtig ist
Das Problem mit CVSS-Priorisierung
- 20.000+ neue CVEs pro Jahr
- 60-70% aller CVEs: CVSS ≥ 7.0 (High/Critical)
- Unmöglich: alle high/critical sofort patchen
- Ergebnis: Priorisierung nach CVSS = Raten im Dunkeln
CISA KEV als Lösung
- “Diese Schwachstelle wird aktiv in Angriffen genutzt”
- Quelldaten: CISA-Telemetrie, FBI, Partner-ISACs, öffentliche Berichte
- Stand März 2026: ~1.200 Einträge (von 200.000+ CVEs!)
- 1.200 von 200.000 = 0,6% → diese Schwachstellen SOFORT patchen
KEV vs. CVSS: Beispiele
| CVE | CVSS | KEV | Empfehlung |
|---|---|---|---|
| CVE-2021-44228 (Log4Shell) | 10.0 Critical | JA | Sofort patchen |
| CVE-2019-11043 (PHP-FPM RCE) | 9.8 Critical | JA | Wirklich aktiv genutzt! |
| Theoretische Critical | 9.5 Critical | NEIN | Kein öffentlicher Exploit - nach KEV-Einträgen priorisieren |
US-Bundesbehörden-Pflicht (BOD 22-01)
- Federal Civilian Executive Branch (FCEB) Agencies MÜSSEN patchen
- Fristen: 2 Wochen (Most) oder 6 Monate (Older)
- Compliance-Nachweis gegenüber CISA
KEV-Catalog Struktur
API-Endpoint
https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json
Beispiel-Eintrag (JSON)
{
"cveID": "CVE-2021-44228",
"vendorProject": "Apache",
"product": "Log4j2",
"vulnerabilityName": "Apache Log4j2 Remote Code Execution Vulnerability",
"dateAdded": "2021-12-10",
"shortDescription": "Apache Log4j2 contains a vulnerability where JNDI features used in configuration, log messages, and parameters do not protect against attacker-controlled LDAP and other JNDI related endpoints.",
"requiredAction": "Apply updates per vendor instructions.",
"dueDate": "2021-12-24",
"knownRansomwareCampaignUse": "Known"
}
Felder im Überblick
| Feld | Bedeutung |
|---|---|
| cveID | CVE-Nummer |
| vendorProject | Hersteller |
| product | Betroffenes Produkt |
| dateAdded | Wann in KEV aufgenommen |
| dueDate | Patch-Deadline (für Behörden) |
| knownRansomwareCampaignUse | ”Known” = Ransomware-Gruppen nutzen es! |
Statistiken (März 2026)
- ~1.200 KEV-Einträge gesamt
- ~100 neue Einträge pro Monat
- Top-Kategorien: Web-Server, VPN, Exchange, Citrix
- Ransomware-Verknüpfung: ~30% der Einträge
- Durchschnittliche CVSS: 8.5 (KEV-Einträge sind im Schnitt high/critical)
- ~15% haben CVSS < 7.0 (würde normale Priorisierung übersehen!)
KEV in Patch-Management integrieren
1. KEV-API täglich abfragen
#!/bin/bash
KEV_URL="https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json"
LAST_CHECKED=$(cat /var/lib/kev/last_checked.txt 2>/dev/null || echo "1970-01-01")
TODAY=$(date +%Y-%m-%d)
curl -s "$KEV_URL" | jq -r \
--arg last "$LAST_CHECKED" \
'.vulnerabilities[] | select(.dateAdded > $last) | .cveID + " - " + .vulnerabilityName' \
> /tmp/new_kev_entries.txt
if [ -s /tmp/new_kev_entries.txt ]; then
echo "Neue KEV-Einträge:" >> /tmp/new_kev_entries.txt
mail -s "CISA KEV Update - $(wc -l < /tmp/new_kev_entries.txt) neue CVEs" \
security@example.com < /tmp/new_kev_entries.txt
fi
echo "$TODAY" > /var/lib/kev/last_checked.txt
2. KEV gegen eigenes Asset-Inventar matchen
import requests, json
# KEV laden
kev_data = requests.get(
"https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json"
).json()
kev_cves = {v['cveID'] for v in kev_data['vulnerabilities']}
# Eigene Schwachstellendaten (z.B. Tenable CSV-Export)
import csv
with open('vuln_export.csv') as f:
reader = csv.DictReader(f)
for row in reader:
if row['CVE'] in kev_cves:
print(f"KEV MATCH: {row['CVE']} auf {row['hostname']} - SOFORT PATCHEN!")
3. Schwachstellenscanner-Integration
Tenable.io:
- Filter: “CISA KEV” in Vulnerability Findings
- Dashboard-Widget: KEV-Schwachstellen nach Asset
Qualys VMDR:
- CISA KEV-Label in Schwachstellenliste
- Asset-Risiko-Score berücksichtigt KEV
OpenVAS/Greenbone:
- CISA KEV als Custom-Tag über API
4. Patch-Priorisierungs-Matrix
| Priorität | Kriterium | Frist |
|---|---|---|
| 1 - Sofort | KEV + CVSS Critical + öffentlicher Exploit | ≤ 24h |
| 2 - Diese Woche | KEV (alle, unabhängig von CVSS!) | 7 Tage |
| 3 - Dieser Monat | CVSS Critical + EPSS > 0.5 | 30 Tage |
| 4 - Quartalsweise | CVSS High ohne KEV/Exploit | 90 Tage |
| 5 - Kontinuierlich | CVSS Medium/Low | laufend |
KEV und EPSS kombinieren
EPSS (Exploit Prediction Scoring System)
- 0.0-1.0: Wahrscheinlichkeit dass CVE in 30 Tagen exploitiert wird
- EPSS > 0.5 = 50% Exploit-Wahrscheinlichkeit → patchen!
Kombiniertes Modell
| CVE in KEV? | EPSS-Score | Priorität |
|---|---|---|
| JA | > 0.5 | KRITISCH (Sofort!) |
| JA | 0.1-0.5 | HOCH (Diese Woche) |
| JA | < 0.1 | HOCH (Diese Woche) - KEV übersteuert EPSS! |
| NEIN | > 0.9 | HOCH |
| NEIN | 0.5-0.9 | MITTEL |
| NEIN | < 0.5 | NIEDRIG |
Python: EPSS-Scores für KEV-CVEs holen
import requests
kev_resp = requests.get(
"https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json"
).json()
kev_cves = [v['cveID'] for v in kev_resp['vulnerabilities']]
# EPSS-API (first.org)
cve_string = ','.join(kev_cves[:100]) # Max 100 per Request
epss_resp = requests.get(
f"https://api.first.org/data/v1/epss?cve={cve_string}"
).json()
for item in epss_resp['data']:
if float(item['epss']) > 0.5:
print(f"HIGH PRIORITY: {item['cve']} EPSS={item['epss']:.2f} (KEV + High EPSS!)")
KEV-Statistik (Forschung)
- CISA KEV-Einträge: durchschnittlich 94% haben EPSS > 0.1 nach 30 Tagen
- Ohne KEV: 94% aller CVEs haben EPSS < 0.01 (nie ausgenutzt!)
- KEV ist der stärkste Priorisierungsindikator überhaupt
KEV im SIEM und Alerting
Microsoft Sentinel
// Watchlist: KEV-CVEs importieren
// Sentinel → Watchlists → New → Upload CSV
// Felder: CVE-ID, Vendor, Product, DateAdded, DueDate
// KQL: Alerts wenn vulnerable Systeme erkannt
let KevCves = _GetWatchlist('CISA-KEV') | project CVE=CVEId;
SecurityAlert
| where AlertName contains "CVE-"
| where AlertName in (KevCves)
| project TimeGenerated, SystemAlertId, AlertName, Entities
| extend Priority = "CRITICAL - KEV Match!"
Splunk
| lookup kev_lookup cve_id OUTPUT vulnerability_name due_date
| where isnotnull(due_date)
| eval days_until_due = round((strptime(due_date, "%Y-%m-%d") - now()) / 86400, 0)
| where days_until_due <= 14 // Alerte 14 Tage vor Fälligkeit
Alerting bei neuen KEV-Einträgen
# Slack-Webhook wenn neuer KEV-Eintrag
NEW_KEV=$(curl -s "$KEV_URL" | jq -r \
--arg last "$LAST_CHECKED" \
'.vulnerabilities[] | select(.dateAdded == (now | strftime("%Y-%m-%d"))) | .cveID')
if [ -n "$NEW_KEV" ]; then
curl -X POST -H 'Content-type: application/json' \
--data "{\"text\":\"CISA KEV Update: Neue CVEs $NEW_KEV - sofort prüfen!\"}" \
"$SLACK_WEBHOOK_URL"
fi