
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?
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:
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.
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.
Ti serve PowerShell 7 (pwsh). Due modi per eseguirlo:
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
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.
brew install powershell; Windows: winget install Microsoft.PowerShell; Debian/Ubuntu: installa dal repository dei pacchetti Microsoft (packages.microsoft.com).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.first_seen. Se assente = quelle funzionalità vengono saltate, la scansione completa comunque.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.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)| Chiave | Predefinito | Scopo |
|---|---|---|
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| Chiave | Predefinito | Scopo |
|---|---|---|
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. |
| Chiave | Predefinito | Scopo |
|---|---|---|
cvss_threshold | 7.0 | Punteggio base CVSS minimo affinché un CVE con punteggio venga segnalato come VULNERABILE. I CVE presenti nell'elenco KEV bypassano questa soglia. |
ssvc_mission_prevalence | high | Input stakeholder SSVC Mission Prevalence (low / medium / high). |
ssvc_public_wellbeing | high | Input stakeholder SSVC Public Well-being (low / medium / high). |