
Auditor de configuración de seguridad del kernel de Linux de solo lectura y sin agente (local y SSH). Enfoque inicial: comprobaciones de migración TCP / MPTCP para CVE-2026-98432.
Una herramienta ligera y de código abierto para auditar la seguridad de Linux, escrita en Python.
Audita servidores Linux locales y remotos a través de SSH sin instalar agentes ni modificar la configuración del sistema.
Este es un auditor de configuración y estado de parches, no un escáner de exploits. Informa sobre la configuración del kernel y el uso asociados a una vulnerabilidad, y compara el paquete del kernel en ejecución con la versión corregida del proveedor. Nunca intenta desencadenar una vulnerabilidad.
| Característica | v0.2.0 |
|---|---|
| Python 3.8+, sin dependencias de terceros | ✅ |
| Auditoría local de Linux | ✅ |
| Auditoría remota a través de SSH (sin agente) | ✅ |
| Escaneo de múltiples servidores en paralelo | ✅ |
| Ubuntu / Debian / Rocky / AlmaLinux / RHEL / Fedora | ✅ |
| Inspección de la migración de sockets de petición TCP | ✅ |
| Inspección de la configuración y el uso de MPTCP | ✅ |
| Detección de kernel, distribución y reinicio pendiente | ✅ |
| Informes en JSON / CSV | ✅ |
| Verificación de parches CVE del kernel (Ubuntu, Debian, RHEL, Rocky, AlmaLinux, CentOS) | ✅ |
| Actualizaciones de seguridad automáticas | ❌ nunca |
| Modificación de la configuración del servidor | ❌ nunca |
El controlador (tu estación de trabajo Mac o Linux) construye un pequeño script
POSIX sh a partir de las comprobaciones seleccionadas y lo canaliza a sh -s en cada objetivo a través de
SSH. No se copia ni se instala nada en el objetivo. El script imprime
hechos en formato key=value; toda la evaluación ocurre en el controlador, que trata
la salida del objetivo como no confiable (se eliminan los caracteres de control, se truncan los valores,
se neutraliza la inyección de fórmulas en CSV).
Revisa exactamente lo que se ejecutará en tus servidores antes de ejecutarlo:
python3 netviser_cve_audit.py --print-script
Los objetivos solo necesitan sh y herramientas estándar (ss de iproute2, awk,
grep, sed). No se requiere Python en los objetivos.
El controlador necesita Python 3.8+ y 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
La herramienta también se puede instalar (pip install .) y ejecutar como netviser-audit
o python3 -m netviser_audit.
Consulte examples/servers.example.txt para el
formato del archivo de hosts. Los puertos por host usan ssh://user@host:port o un
alias de ~/.ssh/config.
| Opción | Descripción |
|---|---|
--local / --host H / --hosts FILE | Qué auditar |
--checks IDS | Subconjunto separado por comas (consulte --list-checks); las dependencias se añaden automáticamente |
--cve IDS | También informa del estado del parche del kernel para estos CVE (repetible o separado por comas) |
--offline | No descargar datos de avisos del proveedor |
--advisories FILE | Usar datos de avisos guardados previamente; los registros faltantes se siguen descargando a menos que se use --offline |
--save-advisories FILE | Guardar los datos de avisos utilizados, para ejecuciones sin conexión o repetibles |
--sudo | Ejecutar el recolector con sudo -n (nunca solicita contraseña) |
--sample-interval N | Leer los contadores de MPTCP dos veces, con N segundos de diferencia |
--output PREFIX | Prefijo del informe (por defecto netviser_audit → .json, .csv) |
--no-report | Mostrar solo en la terminal |
--fail-on-review | Salir con código 3 cuando exista algún hallazgo REVIEW (para CI / cron) |
-v, --verbose | Mostrar todos los hallazgos, no solo REVIEW / UNKNOWN |
Las ejecuciones SSH usan BatchMode=yes (solo autenticación basada en claves) y
StrictHostKeyChecking=accept-new.
Estado de salida: 0 éxito, 1 no se pudo escanear un objetivo, 2 error de uso,
3 hallazgos de revisión presentes (solo con --fail-on-review).
| Id | Qué inspecciona |
|---|---|
kernel | Distribución, versión del kernel, paquete del kernel en ejecución, kernel instalado más reciente / reinicio requerido |
patch | Estado del parche de cada CVE para el paquete del kernel en ejecución, a partir de los datos de avisos del proveedor |
tcp_migration | net.ipv4.tcp_migrate_req; programas BPF sk_reuseport cargados (root + bpftool) |
mptcp | net.mptcp.enabled, gestor de rutas, CONFIG_MPTCP, sockets y procesos MPTCP, contadores de handshake, uso de mptcpize |
cve_2026_98432 | Configuración relacionada para CVE-2026-98432; su estado de parche es patch.CVE-2026-98432 |
Cada hallazgo tiene un estado — OK, INFO, REVIEW o UNKNOWN — y un
veredicto legible por máquina (p. ej. mptcp.usage = IN_USE).
La comprobación patch responde una pregunta por cada CVE: ¿está el kernel que se está ejecutando
ahora mismo corregido según el proveedor de la distribución?
dpkg-query / rpm -qf): su nombre, versión exacta y paquete
fuente. También enumera los identificadores de CVE mencionados en el changelog de ese paquete y en
los livepatches cargados (canonical-livepatch, kpatch-patch).~
se manejan correctamente.| Distribución | Fuente de avisos |
|---|---|
| Ubuntu | Ubuntu Security API — por versión y sabor de kernel (linux, linux-hwe-*, linux-aws, …) |
| Debian | Datos del Debian Security Tracker vía OSV |
| RHEL, Rocky Linux, AlmaLinux, CentOS | Red Hat Security Data API — flujo principal de RHEL |
Solo se envían identificadores de CVE a estos servicios; nada sobre sus hosts
sale del controlador. Para uso en entornos aislados, ejecute una vez con
--save-advisories adv.json y posteriormente con --offline --advisories adv.json.