Torna agli aggiornamenti
New releaseJul 24, 2026

fleet-cve-scanner v1.1.0

Uno scanner CVE open-source e a script singolo per flotte gestite con RMM. Puro PowerShell 7 — unisce l'inventario software del tuo RMM con NVD, CISA KEV, EPSS e SSVC per rispondere: questa versione è vulnerabile e quanto è urgente?

Condividi

fleet-cve-scanner

Uno scanner CVE open-source e a script singolo per flotte gestite tramite RMM. Puro PowerShell 7, senza agenti, senza appliance, senza costi di licenza.

Risponde a una domanda per ogni software su ogni endpoint che gestisci: la versione installata è nota come vulnerabile e quanto è urgente? — unendo l'inventario software del tuo RMM con feed di sicurezza gratuiti e autorevoli:

  • NIST NVD — CVE note + intervalli di versione interessati
  • CISA KEV — sfruttate attivamente in libertà (supera la soglia del punteggio)
  • EPSS — probabilità di sfruttamento nei prossimi 30 giorni
  • CISA SSVC — decisioni di priorità agisci / presidia / monitora
  • MSRC — prova che una patch Microsoft copre già la scoperta
  • endoflife.date — software che non riceverà più patch

Output: un report CSV per dispositivo, uno storico SQLite con orologi SLA ed eventi di modifica settimana su settimana, un dashboard HTML autonomo e un report opzionale in markdown sulle esposizioni.

Stato

v1.0.0. Il motore è stato portato da zero da uno scanner eseguito settimanalmente in produzione su una flotta Windows (vedi docs/HISTORY.md). Prima di questo rilascio, i due sono stati eseguiti sulla stessa flotta live e confrontati riga per riga: su decine di migliaia di rilevamenti in cui entrambi vedevano lo stesso (dispositivo, software, versione), ogni campo calcolato — stato, CVSS, gravità, flag KEV, decisione SSVC, versione di fix — corrispondeva esattamente.

Tale confronto copre la logica di verdetto. Non ha esercitato il livello storico/SLA e non sostituisce la validazione dello strumento nel tuo ambiente. Leggi docs/known-limitations.md prima di fidarti — è scritto per essere onesto, non lusinghiero.

Avvio rapido

Ti serve PowerShell 7 (pwsh). Due modi per eseguirlo:

A. Scansione NinjaOne live

cp config.example.json config.json
# modifica config.json: inserisci ninjaone.client_id / client_secret / base_url,
# imposta output.report_dir e (consigliato) nvd.api_key
pwsh -File fleet-cve-scan.ps1

B. Offline — qualsiasi RMM, SCCM o Intune (nessun accesso API)

Esporta il tuo inventario in un CSV con colonne hostname, software, version (opzionale device_id, os), quindi:

cp config.example.json config.json   # qui serve solo output.report_dir
pwsh -File fleet-cve-scan.ps1 -InputCsv inventory.csv

-InputCsv non effettua nessuna chiamata NinjaOne — niente OAuth, niente API. Interroga comunque NVD e gli altri feed pubblici, quindi ti serve comunque un nvd.api_key in config.json e un output.report_dir valido. Vedi docs/rmm-adapters.md per il contratto di input e le ricette di esportazione per RMM specifici.

Installazione dei prerequisiti

  • PowerShell 7 — macOS: brew install powershell; Windows: winget install Microsoft.PowerShell; Debian/Ubuntu: installa dal repository dei pacchetti Microsoft (packages.microsoft.com).
  • sqlite3 (opzionale, abilita storico/trend) — macOS: preinstallato o brew install sqlite; Debian/Ubuntu: apt-get install sqlite3; Windows: scarica il bundle "tools" di SQLite da sqlite.org e metti sqlite3.exe nel PATH o accanto allo script. Senza di esso la scansione funziona comunque; first_seen viene impostato alla data di esecuzione.

Requisiti

  • PowerShell 7 (7.4+ consigliato). La scansione parallela richiede 7.0+.
  • sqlite3 — opzionale; abilita il DB storico, i trend e il tracciamento SLA first_seen. Se assente = quelle funzionalità vengono saltate, la scansione completa comunque.
  • Traffico di rete in uscita verso NVD, CISA (KEV), epss.empiricalsecurity.com (l'host del punteggio bulk EPSS — FIRST ha spostato lì l'hosting dei dati EPSS), MSRC, endoflife.date e raw.github.com (CVE Program cvelistV5) — oltre all'API NinjaOne in modalità live.
  • Credenziali — modalità live necessita di client id/secret OAuth2 di NinjaOne; modalità offline necessita solo di un CSV di inventario. Una chiave API NVD è tecnicamente opzionale ma di fatto richiesta a scala di flotta: NVD consente 50 richieste/30s con chiave e solo 5/30s senza. Lo scanner rileva quale hai e si adatta di conseguenza, quindi un'esecuzione senza chiave è corretta ma circa 10x più lenta — va bene per una manciata di prodotti, impraticabile per una flotta reale. Le chiavi sono gratuite.

Riferimento configurazione

La configurazione è un file JSON (predefinito config.json accanto allo script; sovrascrivere con -ConfigPath). Inizia da config.example.json. Ogni chiave che lo scanner legge, il suo valore predefinito quando omessa e cosa fa:

ninjaone (modalità live)

ChiavePredefinitoScopo
ninjaone.client_id""ID client OAuth2 API NinjaOne. Richiesto per scansioni live; lascia vuoto per -InputCsv.
ninjaone.client_secret""Segreto client OAuth2 API NinjaOne.
ninjaone.base_url— (l'esempio fornisce https://app.ninjarmm.com)URL base API NinjaOne; richiesto per scansioni live, nessun fallback predefinito. Usa l'host della tua regione (es. eu.ninjarmm.com, oc.ninjarmm.com).

nvd

ChiavePredefinitoScopo
nvd.api_key""Chiave API NVD, inviata come header apiKey. Vuota esegue autenticazione non autenticata, che abbassa i valori predefiniti per nvd_rate_limit e nvd_min_spacing_ms al limite anonimo di NVD (4/30s, 6500ms) invece di quello autenticato (48/30s, 700ms). Gratuito e ~10x più veloce.

Scansione e punteggio

ChiavePredefinitoScopo
cvss_threshold7.0Punteggio base CVSS minimo affinché un CVE con punteggio venga segnalato come VULNERABILE. I CVE presenti nell'elenco KEV bypassano questa soglia.
ssvc_mission_prevalencehighInput stakeholder SSVC Mission Prevalence (low / medium / high).
ssvc_public_wellbeinghighInput stakeholder SSVC Public Well-being (low / medium / high).

Caching e limitazione della velocità

Categorie