
Scanner passivo di vulnerabilità per host Linux per CVE-2026-31694: verifica il kernel in esecuzione, la configurazione FUSE, i metadati dei pacchetti e le evidenze delle patch, quindi genera indicazioni di mitigazione personalizzate.
Uno strumento passivo di valutazione degli host Linux per CVE-2026-31694, una scrittura out-of-bounds nella cache readdir di FUSE nel kernel Linux.
Lo scanner valuta il kernel in esecuzione, l'esposizione a FUSE, i metadati dei pacchetti locali, le evidenze del sorgente del kernel, l'ambiente di esecuzione e la famiglia del sistema operativo. Quando l'host potrebbe essere interessato, genera una guida alla mitigazione personalizzata per la distribuzione rilevata.
Autore: Aung Myat Thu [w01f]
cve_2026_31694_scanner.py è un'utilità locale di valutazione delle vulnerabilità non basata su exploit.
Non conferma la vulnerabilità attivando il percorso di codice FUSE interessato. Combina invece molteplici indicatori passivi:
CONFIG_FUSE_FS;/dev/fuse e accesso per l'utente corrente;Il risultato è una valutazione dell'esposizione, non una prova basata su exploit.
CVE-2026-31694 riguarda la cache readdir di FUSE del kernel Linux.
La logica vulnerabile calcola la dimensione serializzata di una voce di directory a partire da una lunghezza del nome controllata dal server e copia il record in una singola pagina della page cache. Una voce di directory con una lunghezza del nome di 4095 può produrre una dimensione serializzata di 4120 byte.
Su un sistema con pagine da 4096 byte, quel record supera una pagina di 24 byte.
La correzione a monte rifiuta i record di directory che non possono stare in una singola pagina prima che avvenga la copia nella cache.
fs/fuse/readdir.c fuse_add_dirent_to_cache()
### Dati di baseline dello scanner
Lo scanner contiene le seguenti baseline di correzione dei rami stabili upstream:
| Serie del kernel | Baseline di correzione |
|---|---:|
| 5.10 | 5.10.258 |
| 5.15 | 5.15.209 |
| 6.1 | 6.1.175 |
| 6.6 | 6.6.136 |
| 6.12 | 6.12.84 |
| 6.18 | 6.18.25 |
| 7.0 | 7.0.2 |
| Mainline | 7.1 o successiva |
Queste versioni sono utilizzate come un input della valutazione. Non sono considerate l'unica fonte di verità perché i vendor delle distribuzioni potrebbero effettuare il backport della correzione mantenendo un numero di versione upstream più vecchio.
---
## Modello di sicurezza
Lo scanner è progettato per evitare di invocare l'operazione vulnerabile.
### Lo scanner non
- monta un filesystem FUSE;
- apre o comunica con `/dev/fuse`;
- avvia un server FUSE;
- invia record di directory appositamente costruiti;
- alloca memoria per test di posizionamento delle pagine;
- prepara gli allocatori del kernel;
- modifica `/etc/passwd`;
- modifica la configurazione del kernel;
- carica o scarica moduli del kernel;
- modifica i permessi di `/dev/fuse`;
- installa o rimuove pacchetti;
- riavvia il sistema;
- tenta l'escalation dei privilegi.
### Lo scanner può
- leggere file in `/proc`, `/boot`, `/lib/modules`, `/usr/lib/modules`, `/usr/src` e nelle directory dei metadati dei pacchetti;
- eseguire query sui pacchetti limitate e di sola lettura;
- ispezionare i mount attivi e la registrazione dei filesystem;
- scrivere un report solo quando `--output` viene fornito esplicitamente;
- stampare comandi di mitigazione per la revisione dell'amministratore.
I comandi di mitigazione sono output documentale. Non vengono mai eseguiti automaticamente.
---
## Funzionalità
### Identificazione di host e kernel
- Legge `platform.release()` e analizza la versione del kernel in stile upstream.
- Legge `/etc/os-release` o `/usr/lib/os-release`.
- Rileva l'architettura della CPU e la dimensione delle pagine di memoria.
- Identifica se il kernel analizzato appartiene al sistema operativo corrente.
### Valutazione dell'esposizione FUSE
- Legge `CONFIG_FUSE_FS` dalle fonti di configurazione del kernel disponibili.
- Rileva il supporto FUSE integrato e le configurazioni di modulo caricabile.
- Legge `/proc/filesystems`.
- Controlla i metadati di `/dev/fuse` e l'accesso in lettura/scrittura per l'utente corrente.
- Individua `fusermount3` o `fusermount`.
- Analizza i mount FUSE attivi da `/proc/self/mountinfo`.
### Evidenza della patch
- Confronta la versione in esecuzione con le baseline di correzione upstream.
- Cerca nel sorgente del kernel installato il controllo per i record sovradimensionati.
- Controlla i changelog locali dei pacchetti RPM o Debian per:
- `CVE-2026-31694`;
- il titolo della patch upstream.
### Stato dei pacchetti e del riavvio
- Tenta di identificare il pacchetto proprietario del kernel in esecuzione.
- Interroga i metadati locali del gestore pacchetti senza aggiornare i repository.
- Rileva un kernel installato più recente quando l'ambiente host è autorevole.
- Controlla `/var/run/reboot-required` dove applicabile.
### Consapevolezza dell'ambiente
- Rileva container compatibili con Docker.
- Rileva container compatibili con Podman.
- Rileva cgroups relativi ai container.
- Rileva WSL.
- Rileva macchine virtuali usando `systemd-detect-virt` quando disponibile.
### Reportistica
- Output di testo leggibile.
- Output JSON leggibile da macchina.
- Output di report in Markdown.
- Output di sole mitigazioni.
- Output opzionale su file.
- Codici di uscita del processo significativi.
---
## Requisiti
### Richiesti
- Linux per la valutazione del kernel.
- Python 3.9 o successivo.
- Accesso in lettura ai normali metadati di sistema.
Lo scanner utilizza solo la libreria standard di Python.
### Comandi opzionali
Ulteriori evidenze vengono raccolte quando sono presenti i seguenti strumenti:
| Tool | Scopo |
|---|---|
| `dpkg-query` | Rilevamento della proprietà del pacchetto kernel e dei changelog su Debian/Ubuntu |
| `rpm` | Ispezione della proprietà dei pacchetti e dei changelog su Fedora/RHEL/SUSE |
| `pacman` | Metadati dei pacchetti e degli aggiornamenti del kernel per la famiglia Arch |
| `apt` | Query sugli aggiornamenti in cache per la famiglia Debian |
| `dnf` o `dnf5` | Query sugli aggiornamenti in cache per Fedora/RHEL |
| `zypper` | Query sulle patch CVE in cache per SUSE |
| `apk` | Query su pacchetti/aggiornamenti per Alpine |
| `systemd-detect-virt` | Rilevamento di container e macchine virtuali |
Per la scansione normale non sono richiesti privilegi di root.
Alcune evidenze potrebbero non essere disponibili per un account senza privilegi a causa di permessi dei file specifici del sistema.
---
## Installazione