
Auditor di configurazione della sicurezza del kernel Linux in sola lettura e senza agente (locale e SSH). Focus iniziale: controlli su migrazione TCP / MPTCP per CVE-2026-98432.
Uno strumento leggero e open-source per l'audit di sicurezza di Linux, scritto in Python.
Esegui l'audit di server Linux locali e remoti tramite SSH senza installare agenti o modificare la configurazione del sistema.
Questo è un auditor di configurazione e stato delle patch, non uno scanner di exploit. Riporta le impostazioni del kernel e l'utilizzo associati a una vulnerabilità, e confronta il pacchetto del kernel in esecuzione con la versione corretta dal fornitore. Non tenta mai di attivare una vulnerabilità.
| Funzionalità | v0.2.0 |
|---|---|
| Python 3.8+, nessuna dipendenza di terze parti | ✅ |
| Audit locale di Linux | ✅ |
| Audit remoto tramite SSH (senza agente) | ✅ |
| Scansione di più server in parallelo | ✅ |
| Ubuntu / Debian / Rocky / AlmaLinux / RHEL / Fedora | ✅ |
| Ispezione della migrazione dei socket di richiesta TCP | ✅ |
| Ispezione della configurazione e dell'utilizzo di MPTCP | ✅ |
| Rilevamento di kernel, distribuzione e riavvio in sospeso | ✅ |
| Reportistica JSON / CSV | ✅ |
| Verifica delle patch CVE del kernel (Ubuntu, Debian, RHEL, Rocky, AlmaLinux, CentOS) | ✅ |
| Aggiornamenti di sicurezza automatici | ❌ mai |
| Modifica della configurazione del server | ❌ mai |
Il controller (la tua workstation Mac o Linux) costruisce un piccolo script POSIX sh
a partire dai controlli selezionati e lo invia tramite pipe a sh -s su ciascun target via
SSH. Nulla viene copiato o installato sul target. Lo script stampa
fatti in formato key=value; tutta la valutazione avviene sul controller, che tratta
l'output del target come non attendibile (caratteri di controllo rimossi, valori troncati,
iniezione di formule CSV neutralizzata).
Esamina esattamente cosa verrà eseguito sui tuoi server prima di eseguirlo:
python3 netviser_cve_audit.py --print-script
I target richiedono solo sh e strumenti standard (ss da iproute2, awk,
grep, sed). Python non è richiesto sui target.
Il controller richiede Python 3.8+ e OpenSSH (macOS o Linux).
git clone https://github.com/maxigentr/netviser-linux-security-auditor.git
cd netviser-linux-security-auditor
# Audit this Linux machine
python3 netviser_cve_audit.py --local
# Audit a remote server
python3 netviser_cve_audit.py --host [email protected]
# Custom SSH port and key
python3 netviser_cve_audit.py --host [email protected] --port 2290 --identity ~/.ssh/audit_ed25519
# Multiple servers, 10 in parallel
python3 netviser_cve_audit.py --hosts servers.txt --workers 10
# Non-root SSH user with passwordless sudo, for full process and BPF visibility
python3 netviser_cve_audit.py --host admin@web01 --sudo
# Watch MPTCP counters for 60 seconds to see if MPTCP is used right now
python3 netviser_cve_audit.py --hosts servers.txt --sample-interval 60
# Also check whether other kernel CVEs are patched
python3 netviser_cve_audit.py --hosts servers.txt --cve CVE-2024-1086,CVE-2024-26925
Lo strumento può anche essere installato (pip install .) ed eseguito come netviser-audit
o python3 -m netviser_audit.
Vedi examples/servers.example.txt per il
formato del file degli host. Le porte per host usano ssh://user@host:port o un
alias in ~/.ssh/config.
| Opzione | Descrizione |
|---|---|
--local / --host H / --hosts FILE | Cosa verificare |
--checks IDS | Sottoinsieme separato da virgole (vedi --list-checks); le dipendenze vengono aggiunte automaticamente |
--cve IDS | Segnala anche lo stato delle patch del kernel per queste CVE (ripetibile o separato da virgole) |
--offline | Non scaricare i dati degli avvisi del fornitore |
--advisories FILE | Usa i dati degli avvisi salvati in precedenza; i record mancanti vengono comunque scaricati a meno che non sia specificato --offline |
--save-advisories FILE | Salva i dati degli avvisi utilizzati, per esecuzioni offline o ripetibili |
--sudo | Esegue il collector con sudo -n (non richiede mai la password) |
--sample-interval N | Legge i contatori MPTCP due volte, a N secondi di distanza |
--output PREFIX | Prefisso del report (predefinito netviser_audit → .json, .csv) |
--no-report | Stampa solo sul terminale |
--fail-on-review | Esce con codice 3 quando esiste un qualsiasi risultato REVIEW (per CI / cron) |
-v, --verbose | Mostra tutti i risultati, non solo REVIEW / UNKNOWN |
Le esecuzioni SSH usano BatchMode=yes (solo autenticazione basata su chiave) e
StrictHostKeyChecking=accept-new.
Codice di uscita: 0 successo, 1 impossibile scansionare un target, 2 errore di utilizzo,
3 risultati di revisione presenti (solo con --fail-on-review).
| Id | Cosa ispeziona |
|---|---|
kernel | Distribuzione, release del kernel, pacchetto del kernel in esecuzione, kernel installato più recente / riavvio necessario |
patch | Stato delle patch di ciascuna CVE per il pacchetto del kernel in esecuzione, dai dati degli avvisi del fornitore |
tcp_migration | net.ipv4.tcp_migrate_req; programmi BPF sk_reuseport caricati (root + bpftool) |
mptcp | net.mptcp.enabled, path manager, CONFIG_MPTCP, socket e processi MPTCP, contatori di handshake, utilizzo di mptcpize |
cve_2026_98432 | Configurazione correlata per CVE-2026-98432; il suo stato delle patch è patch.CVE-2026-98432 |
Ogni risultato ha uno stato — OK, INFO, REVIEW o UNKNOWN — e un
verdetto leggibile dalla macchina (ad es. mptcp.usage = IN_USE).
Il controllo patch risponde a una domanda per ogni CVE: il kernel attualmente in esecuzione
è corretto secondo il fornitore della distribuzione?
dpkg-query / rpm -qf): il suo nome, la versione esatta e il pacchetto sorgente. Elenca anche gli id CVE menzionati nel changelog di quel pacchetto e nei
livepatch caricati (canonical-livepatch, kpatch-patch).~
vengono gestiti correttamente.| Distribuzione | Fonte degli avvisi |
|---|---|
| Ubuntu | Ubuntu Security API — per release e variante del kernel (linux, linux-hwe-*, linux-aws, …) |
| Debian | Dati del Debian Security Tracker tramite OSV |
| RHEL, Rocky Linux, AlmaLinux, CentOS | Red Hat Security Data API — canale principale RHEL |
Solo gli identificatori CVE vengono inviati a questi servizi; nessuna informazione sui tuoi host
lascia il controller. Per l'uso in ambienti air-gapped, esegui una volta con
--save-advisories adv.json e successivamente con --offline --advisories adv.json.