
Schreibgeschützter, agentenloser Prüfer für die Sicherheitskonfiguration des Linux-Kernels (lokal & SSH). Schwerpunkt zunächst: TCP-Migration / MPTCP-Prüfungen für CVE-2026-98432.
Ein leichtgewichtiges, quelloffenes Linux-Sicherheitsaudit-Tool, geschrieben in Python.
Prüfen Sie lokale und entfernte Linux-Server über SSH, ohne Agents zu installieren oder die Systemkonfiguration zu verändern.
Dies ist ein Konfigurations- und Patch-Status-Auditor, kein Exploit-Scanner. Er meldet Kernel-Einstellungen und Nutzung im Zusammenhang mit einer Schwachstelle und vergleicht das laufende Kernel-Paket mit der korrigierten Version des Herstellers. Er versucht niemals, eine Schwachstelle auszulösen.
| Funktion | v0.2.0 |
|---|---|
| Python 3.8+, keine Drittanbieter-Abhängigkeiten | ✅ |
| Lokales Linux-Audit | ✅ |
| Remote-Audit über SSH (agentenlos) | ✅ |
| Paralleles Scannen mehrerer Server | ✅ |
| Ubuntu / Debian / Rocky / AlmaLinux / RHEL / Fedora | ✅ |
| Inspektion der TCP-Request-Socket-Migration | ✅ |
| Inspektion der MPTCP-Konfiguration und -Nutzung | ✅ |
| Erkennung von Kernel, Distribution und ausstehendem Neustart | ✅ |
| JSON-/CSV-Berichterstattung | ✅ |
| Überprüfung von Kernel-CVE-Patches (Ubuntu, Debian, RHEL, Rocky, AlmaLinux, CentOS) | ✅ |
| Automatische Sicherheitsupdates | ❌ niemals |
| Änderung der Serverkonfiguration | ❌ niemals |
Der Controller (Ihre Mac- oder Linux-Workstation) erstellt aus den ausgewählten Prüfungen ein kleines POSIX-sh-Skript und leitet es über SSH per Pipe an sh -s auf jedem Ziel weiter. Nichts wird auf das Ziel kopiert oder dort installiert. Das Skript gibt key=value-Fakten aus; die gesamte Auswertung erfolgt auf dem Controller, der die Ausgabe des Ziels als nicht vertrauenswürdig behandelt (Steuerzeichen entfernt, Werte gekürzt, CSV-Formelinjektion neutralisiert).
Prüfen Sie genau, was auf Ihren Servern ausgeführt wird, bevor Sie es ausführen:
python3 netviser_cve_audit.py --print-script
Ziele benötigen nur sh und Standardwerkzeuge (ss aus iproute2, awk,
grep, sed). Python ist auf den Zielen nicht erforderlich.
Der Controller benötigt Python 3.8+ und OpenSSH (macOS oder 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
Das Tool kann auch installiert (pip install .) und als netviser-audit
oder python3 -m netviser_audit ausgeführt werden.
Das Format der Hosts-Datei finden Sie in examples/servers.example.txt.
Ports pro Host verwenden ssh://user@host:port oder einen
~/.ssh/config-Alias.
| Option | Beschreibung |
|---|---|
--local / --host H / --hosts FILE | Was geprüft werden soll |
--checks IDS | Kommagetrennte Teilmenge (siehe --list-checks); Abhängigkeiten werden automatisch hinzugefügt |
--cve IDS | Zusätzlich den Kernel-Patch-Status dieser CVEs melden (wiederholbar oder kommagetrennt) |
--offline | Hersteller-Advisory-Daten nicht herunterladen |
--advisories FILE | Zuvor gespeicherte Advisory-Daten verwenden; fehlende Einträge werden trotzdem heruntergeladen, sofern nicht --offline |
--save-advisories FILE | Die verwendeten Advisory-Daten speichern, für Offline- oder wiederholbare Läufe |
--sudo | Den Collector mit sudo -n ausführen (fragt nie nach) |
--sample-interval N | MPTCP-Zähler zweimal im Abstand von N Sekunden auslesen |
--output PREFIX | Berichtspräfix (Standard netviser_audit → .json, .csv) |
--no-report | Nur im Terminal ausgeben |
--fail-on-review | Mit Exit-Code 3 beenden, wenn ein REVIEW-Befund vorliegt (für CI / cron) |
-v, --verbose | Alle Befunde anzeigen, nicht nur REVIEW / UNKNOWN |
SSH-Läufe erfolgen mit BatchMode=yes (nur schlüsselbasierte Authentifizierung) und
StrictHostKeyChecking=accept-new.
Exit-Status: 0 Erfolg, 1 ein Ziel konnte nicht gescannt werden, 2 Nutzungsfehler,
3 Review-Befunde vorhanden (nur mit --fail-on-review).
| Id | Was geprüft wird |
|---|---|
kernel | Distribution, Kernel-Release, laufendes Kernel-Paket, neuerer installierter Kernel / Neustart erforderlich |
patch | Patch-Status jeder CVE für das laufende Kernel-Paket, aus Hersteller-Advisory-Daten |
tcp_migration | net.ipv4.tcp_migrate_req; geladene sk_reuseport-BPF-Programme (root + bpftool) |
mptcp | net.mptcp.enabled, Path Manager, CONFIG_MPTCP, MPTCP-Sockets und -Prozesse, Handshake-Zähler, mptcpize-Nutzung |
cve_2026_98432 | Zugehörige Konfiguration für CVE-2026-98432; dessen Patch-Status ist patch.CVE-2026-98432 |
Jeder Befund hat einen Status — OK, INFO, REVIEW oder UNKNOWN — und ein
maschinenlesbares Urteil (z. B. mptcp.usage = IN_USE).
Die Prüfung patch beantwortet pro CVE eine Frage: Ist der aktuell laufende
Kernel gemäß dem Distributionshersteller gepatcht?
dpkg-query / rpm -qf): dessen Namen, exakte Version und Quell-
paket. Außerdem listet er CVE-IDs auf, die im Changelog dieses Pakets und in
geladenen Livepatches (canonical-livepatch, kpatch-patch) genannt werden.~-Versionen
korrekt behandelt werden.| Distribution | Advisory-Quelle |
|---|---|
| Ubuntu | Ubuntu Security API — pro Release und Kernel-Flavour (linux, linux-hwe-*, linux-aws, …) |
| Debian | Debian Security Tracker-Daten über OSV |
| RHEL, Rocky Linux, AlmaLinux, CentOS | Red Hat Security Data API — Haupt-RHEL-Stream |
Nur CVE-Identifikatoren werden an diese Dienste gesendet; nichts über Ihre Hosts
verlässt den Controller. Für Air-Gapped-Nutzung führen Sie das Tool einmal mit
--save-advisories adv.json und später mit --offline --advisories adv.json aus.