Zurück zu den Updates
New releaseJul 24, 2026

fleet-cve-scanner v1.1.0

Ein quelloffener, einzelskriptbasierter CVE-Scanner für RMM-verwaltete Flotten. Reines PowerShell 7 – kombiniert Ihre RMM-Softwareinventur mit NVD, CISA KEV, EPSS und SSVC, um die Frage zu beantworten: Ist diese Version anfällig und wie dringend ist das Problem?

Teilen

fleet-cve-scanner

Ein Open-Source, Ein-Skript-CVE-Scanner für RMM-verwaltete Flotten. Reines PowerShell 7, keine Agents, keine Appliances, keine Lizenzgebühren.

Es beantwortet eine Frage für jede Software auf jedem von Ihnen verwalteten Endpunkt: ist die installierte Version bekanntermaßen verwundbar und wie dringend ist es? — indem es das Software-Inventar Ihres RMM mit kostenlosen, autoritativen Sicherheitsfeeds abgleicht:

  • NIST NVD — bekannte CVEs + betroffene Versionsbereiche
  • CISA KEV — aktiv in freier Wildbahn ausgenutzt (umgeht den Score-Schwellenwert)
  • EPSS — Wahrscheinlichkeit der Ausnutzung in den nächsten 30 Tagen
  • CISA SSVC — Act / Attend / Track-Priorisierungsentscheidungen
  • MSRC — Nachweis, dass ein Microsoft-Patch den Fund bereits abdeckt
  • endoflife.date — Software, die nie wieder gepatcht wird

Ausgaben: ein CSV-Bericht pro Gerät, eine SQLite-Historie mit SLA-Uhren und Woche-über-Woche-Änderungsereignissen, ein in sich geschlossenes HTML-Dashboard und ein optionaler Markdown-Expositionsbericht.

Status

v1.0.0. Die Engine wurde sauber aus einem Scanner portiert, der wöchentlich in Produktion gegen eine Windows-Flotte lief (siehe docs/HISTORY.md). Vor dieser Veröffentlichung wurden beide gegen dieselbe Live-Flotte ausgeführt und zeilenweise verglichen: über Zehntausende von Funden, bei denen beide eine identische (device, software, version) sahen, stimmte jedes berechnete Feld — Status, CVSS, Schweregrad, KEV-Flag, SSVC-Entscheidung, Fix-Version — exakt überein.

Dieser Vergleich deckt die Urteilslogik ab. Er hat die Historie/SLA-Ebene nicht getestet und ersetzt nicht die Validierung des Tools in Ihrer eigenen Umgebung. Lesen Sie docs/known-limitations.md, bevor Sie ihm vertrauen — es ist ehrlich geschrieben, nicht schmeichelhaft.

Schnellstart

Sie benötigen PowerShell 7 (pwsh). Zwei Möglichkeiten zur Ausführung:

A. Live-NinjaOne-Scan

cp config.example.json config.json
# edit config.json: fill ninjaone.client_id / client_secret / base_url,
# set output.report_dir, and (recommended) nvd.api_key
pwsh -File fleet-cve-scan.ps1

B. Offline — beliebiges RMM, SCCM oder Intune (kein API-Zugriff)

Exportieren Sie Ihr Inventar in eine CSV-Datei mit den Spalten hostname, software, version (optional device_id, os), dann:

cp config.example.json config.json   # only output.report_dir is needed here
pwsh -File fleet-cve-scan.ps1 -InputCsv inventory.csv

-InputCsv führt null NinjaOne-Aufrufe durch — kein OAuth, keine API. Es fragt weiterhin NVD und die anderen öffentlichen Feeds ab, daher benötigen Sie weiterhin einen nvd.api_key in config.json und ein gültiges output.report_dir. Siehe docs/rmm-adapters.md für den Eingabevertrag und RMM-spezifische Exportrezepte.

Voraussetzungen installieren

  • PowerShell 7 — macOS: brew install powershell; Windows: winget install Microsoft.PowerShell; Debian/Ubuntu: aus dem Microsoft-Paket-Repo installieren (packages.microsoft.com).
  • sqlite3 (optional, ermöglicht Historie/Trends) — macOS: vorinstalliert oder brew install sqlite; Debian/Ubuntu: apt-get install sqlite3; Windows: das SQLite „Tools“-Bundle von sqlite.org herunterladen und sqlite3.exe in den PATH oder neben das Skript legen. Ohne es läuft der Scan trotzdem; first_seen fällt auf das Ausführungsdatum zurück.

Anforderungen

  • PowerShell 7 (7.4+ empfohlen). Der parallele Scan erfordert 7.0+.
  • sqlite3 — optional; ermöglicht die Historie-Datenbank, Trends und SLA first_seen-Verfolgung. Fehlt es = diese Funktionen werden übersprungen, der Scan wird trotzdem abgeschlossen.
  • Netzwerk-Ausgang zu NVD, CISA (KEV), epss.empiricalsecurity.com (dem EPSS-Bulk-Score-Host — FIRST hat das EPSS-Daten-Hosting dorthin verlegt), MSRC, endoflife.date und GitHub raw (CVE-Programm cvelistV5) — plus die NinjaOne API im Live-Modus.
  • Anmeldeinformationen — Live-Modus benötigt NinjaOne OAuth2-Client-ID/Secret; Offline-Modus benötigt nur ein Inventar-CSV. Ein NVD-API-Schlüssel ist technisch optional, aber im Flottenmaßstab praktisch erforderlich: NVD erlaubt 50 Anfragen/30s mit einem Schlüssel und nur 5/30s ohne. Der Scanner erkennt, welchen Sie haben, und drosselt entsprechend, sodass eine schlüssellose Ausführung korrekt, aber etwa 10x langsamer ist — in Ordnung für eine Handvoll Produkte, unpraktisch für eine echte Flotte. Schlüssel sind kostenlos.

Konfigurationsreferenz

Die Konfiguration ist eine JSON-Datei (standardmäßig config.json neben dem Skript; Überschreibung mit -ConfigPath). Beginnen Sie mit config.example.json. Jeder Schlüssel, den der Scanner liest, sein Standardwert, wenn er weggelassen wird, und was er tut:

ninjaone (Live-Modus)

KeyStandardZweck
ninjaone.client_id""NinjaOne API OAuth2-Client-ID. Erforderlich für Live-Scans; für -InputCsv leer lassen.
ninjaone.client_secret""NinjaOne API OAuth2-Client-Geheimnis.
ninjaone.base_url— (Beispiel liefert https://app.ninjarmm.com)NinjaOne API Basis-URL; erforderlich für Live-Scans, kein eingebauter Fallback. Verwenden Sie den Host Ihrer Region (z.B. eu.ninjarmm.com, oc.ninjarmm.com).

nvd

KeyStandardZweck
nvd.api_key""NVD-API-Schlüssel, als apiKey-Header gesendet. Leer läuft unauthentifiziert, was die Standardwerte für nvd_rate_limit und nvd_min_spacing_ms auf die anonyme Obergrenze von NVD (4/30s, 6500ms) anstatt auf die authentifizierte (48/30s, 700ms) setzt. Kostenlos und ~10x schneller.

Scan & Bewertung

KeyStandardZweck
cvss_threshold7.0Minimaler CVSS-Basiswert, damit ein bewertetes CVE als VULNERABLE gemeldet wird. KEV-gelistete CVEs umgehen diese Untergrenze.
ssvc_mission_prevalencehighSSVC Mission Prevalence Stakeholder-Eingabe (low / medium / high).
ssvc_public_wellbeinghighSSVC Public Well-being Stakeholder-Eingabe (low / medium / high).

Caching & Ratenbegrenzung

Kategorien