
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
Posiziona lo scanner in una directory di lavoro:```bash
chmod +x cve_2026_31694_scanner.py
Eseguilo direttamente:```bash ./cve_2026_31694_scanner.py
Oppure invocalo con Python:```bash
python3 cve_2026_31694_scanner.py
Nessuna installazione di pacchetti Python è richiesta.
python3 cve_2026_31694_scanner.py
### Output JSON```bash
python3 cve_2026_31694_scanner.py --format json
L'alias di compatibilità di seguito produce lo stesso formato:```bash python3 cve_2026_31694_scanner.py --json
### Report Markdown```bash
python3 cve_2026_31694_scanner.py --format markdown
python3 cve_2026_31694_scanner.py
--format markdown
--output cve-2026-31694-report.md
### Stampa solo le indicazioni di remediation```bash
python3 cve_2026_31694_scanner.py --mitigation-only
python3 cve_2026_31694_scanner.py --no-package-query
### Restituisci sempre successo dopo la segnalazione```bash
python3 cve_2026_31694_scanner.py --no-exit-status
Questa opzione è utile quando si raccolgono report senza consentire che lo stato di vulnerabilità possa far fallire un job di orchestrazione.
Lo scanner valuta le evidenze nel seguente ordine.
Lo scanner determina:
Il rilevamento dell'ambiente modifica l'interpretazione dei dati relativi ai pacchetti e ai riavvii.
Ad esempio, un container può vedere il kernel dell'host ma normalmente non può determinare il pacchetto del kernel dell'host dal filesystem del container.
Lo scanner cerca una configurazione del kernel in esecuzione in:```text /proc/config.gz /boot/config-$(uname -r) /lib/modules/$(uname -r)/build/.config /usr/lib/modules/$(uname -r)/build/.config
Valuta:```text
CONFIG_FUSE_FS=y
CONFIG_FUSE_FS=m
CONFIG_FUSE_FS is not set
Interpretazione:
| Valore | Significato |
|---|---|
y | FUSE è integrato nel kernel. La blacklist dei moduli non può disabilitarlo. |
m | FUSE è disponibile come modulo caricabile. |
Lo scanner verifica:```text /proc/filesystems /dev/fuse PATH for fusermount3 or fusermount /proc/self/mountinfo
L'assenza di `/dev/fuse` o `fusermount3` riduce l'usabilità immediata nell'ambiente corrente, ma non dimostra che il kernel sia stato patchato.
### 4. Geometria della dimensione di pagina
Il record sovradimensionato documentato è di `4120` byte.
Quando la dimensione della pagina host è di almeno `4120` byte, il record documentato non attraversa un confine di pagina. Lo scanner può segnalare che il sistema non risulta esposto secondo la geometria di pagina documentata.
Questa conclusione si applica solo al record documentato e al comportamento valutato dell'implementazione. Non è un'affermazione generale secondo cui tutti i problemi di sicurezza della memoria di FUSE siano impossibili sui sistemi con pagine più grandi.
### 5. Ispezione del sorgente installato
Quando il sorgente installato è disponibile, lo scanner cerca:```text
fs/fuse/readdir.c
It looks for the affected function and a guard equivalent to rejecting reclen > PAGE_SIZE.
Direct source evidence has higher confidence than version comparison.
The inspected source must correspond to the running kernel for the result to be authoritative. Distribution source trees under /usr/src may represent a different installed kernel.
The scanner attempts to map the running kernel image to its owning package using the detected distribution's package database.
Possible mechanisms include:```text dpkg-query -S rpm -qf pacman -Qo apk info -W
Quando un pacchetto viene identificato, i metadati del changelog locale possono essere ispezionati per l'ID CVE o il titolo della patch.
La mancata corrispondenza nel changelog non è una prova di vulnerabilità. I vendor non includono sempre i riferimenti CVE individuali nei changelog installati localmente.
### 7. Confronto con la versione upstream
La versione del kernel analizzata viene confrontata con la tabella baseline fissa dello scanner.
Il confronto delle versioni produce un risultato euristico perché:
- i kernel dei vendor possono contenere backport;
- le revisioni di rilascio dei pacchetti kernel sono specifiche della distribuzione;
- i kernel cloud, real-time, induriti e di abilitazione hardware possono avere tempistiche di patch separate;
- una stringa di versione può rappresentare un branch mantenuto dal vendor piuttosto che una release upstream non modificata.
### 8. Metadati degli aggiornamenti dei pacchetti
Dove supportato, lo scanner esegue query di sola lettura sui metadati locali esistenti.
Non aggiorna i repository.
Esempi:```text
apt list --upgradable
pacman -Qu
dnf --cacheonly --quiet check-upgrade
zypper --no-refresh list-patches --all --cve=CVE-2026-31694
apk version -l <
Un risultato che mostra che non è disponibile alcun aggiornamento è aggiornato solo quanto i metadati del repository in cache.
Su un host normale o una macchina virtuale, lo scanner confronta il kernel in esecuzione con i kernel installati rilevati e verifica il marcatore di riavvio utilizzato dai sistemi della famiglia Debian.
All'interno di un container o di un guest WSL, questo controllo è indicato come controllato dall'host anziché confrontare i file del guest con il kernel dell'host.
La precedenza delle prove è approssimativamente:
PATCHEDLe prove locali dirette indicano che la correzione esiste.
Esempi:
La fiducia è generalmente alta, ma l'allineamento tra sorgente e kernel in esecuzione dovrebbe comunque essere verificato.
NOT_EXPOSEDLa configurazione rilevata del kernel in esecuzione ha FUSE disabilitato.
Questo è un risultato di esposizione, non una prova che il sorgente del kernel stesso contenga la correzione.
NOT_EXPOSED_BY_DOCUMENTED_PAGE_GEOMETRYLa dimensione della pagina di memoria è sufficiente a contenere il record documentato di 4120 byte senza attraversare il confine di una pagina.
Questo verdetto è limitato alla geometria di vulnerabilità documentata.
UPSTREAM_BASELINE_SAFELa versione in esecuzione analizzata soddisfa una baseline upstream corretta nota o precede l'implementazione interessata.
La verifica del pacchetto del fornitore rimane preferibile.
POTENTIALLY_VULNERABLEIl kernel analizzato rientra in un intervallo upstream interessato e non è stata trovata alcuna prova diretta di patch locale.
Questo risultato richiede il controllo dell'avviso di sicurezza del fornitore del sistema operativo prima di dichiarare vulnerabile il kernel installato.
INCONCLUSIVELo scanner non ha potuto ottenere prove sufficienti.
Cause comuni:
NOT_APPLICABLEIl sistema operativo corrente non è Linux.
| Code | Meaning |
|---|---|
0 | Prove di patch, baseline upstream sicura o esposizione documentata assente |
Esempio:```bash python3 cve_2026_31694_scanner.py status=$?
case "$status" in 0) echo "No actionable exposure detected by the scanner" ;; 1) echo "Potential exposure detected" ;; 2) echo "Assessment inconclusive" ;; 3) echo "Scanner execution failed" ;; esac
Quando viene specificato `--no-exit-status`, lo scanner restituisce `0` dopo aver generato il report.
---
## Fonti di rilevamento
Lo scanner utilizza le seguenti fonti locali, quando disponibili:
| Sorgente | Informazioni |
|---|---|
| `/etc/os-release` | Identità della distribuzione |
| `/usr/lib/os-release` | Identità della distribuzione (fallback) |
| `/proc/version` | Indicatori kernel e WSL |
| `/proc/config.gz` | Configurazione del kernel in esecuzione |
| `/boot/config-*` | Configurazione del kernel |
| `/lib/modules/*/build/.config` | Configurazione di build del kernel |
| `/proc/filesystems` | Filesystem registrati |
| `/proc/self/mountinfo` | Mount FUSE attivi |
| `/proc/1/cgroup` | Indicatori di container |
| `/dev/fuse` | Presenza e permessi del dispositivo |
| `/usr/src/*/fs/fuse/readdir.c` | Prova facoltativa di patch a livello di sorgente |
| `/lib/modules` | Inventario dei kernel installati |
| `/usr/lib/modules` | Inventario dei kernel installati |
| `/boot/vmlinuz-*` | Inventario dei kernel installati |
| `/var/run/reboot-required` | Indicatore di riavvio per la famiglia Debian |
| database dei pacchetti | Proprietà dei pacchetti del kernel |
| changelog dei pacchetti | Prova facoltativa locale di backport |
| cache dei pacchetti | Prova facoltativa di disponibilità di aggiornamenti |
---
## Supporto distribuzioni
### Rilevamento della famiglia di distribuzione
| Famiglia | Distribuzioni riconosciute |
|---|---|
| Ubuntu | Ubuntu, Linux Mint, Pop!_OS, elementary OS, Zorin OS |
| Debian | Debian, Kali Linux, Raspbian, Parrot OS |
| Arch | Arch Linux, Manjaro, Garuda Linux, EndeavourOS, CachyOS |
| Fedora | Fedora Linux |
| RHEL | RHEL, CentOS, Rocky Linux, AlmaLinux, Oracle Linux, Amazon Linux |
| SUSE | openSUSE Tumbleweed, openSUSE Leap, SLES, SLED |
| Alpine | Alpine Linux |
| Gentoo | Gentoo Linux |
| Void | Void Linux |
| NixOS | NixOS |
| Sconosciuta | Guida generica per Linux |
### Supporto per la query di aggiornamento locale
| Famiglia | Query di aggiornamento in sola lettura |
|---|---|
| Debian/Ubuntu | `apt list --upgradable` |
| Arch | `pacman -Qu` |
| Fedora/RHEL | `dnf check-upgrade` in cache |
| SUSE | elenco di patch CVE in cache con `zypper` |
| Alpine | `apk version -l <` |
| Gentoo | Non implementato |
| Void | Non implementato |
| NixOS | Non implementato |
| Sconosciuta | Non implementato |
L'assenza di un aggiornamento visibile localmente non significa che un pacchetto corretto non sia disponibile. I metadati del repository potrebbero essere obsoleti oppure la distribuzione potrebbe non aver ancora pubblicato un pacchetto.
---
## Generazione delle mitigazioni
Le indicazioni di mitigazione vengono selezionate in base a:
- famiglia di distribuzione;
- gestore di pacchetti;
- stato del container o WSL;
- configurazione FUSE;
- disponibilità di `/dev/fuse`;
- mount FUSE attivi;
- stato di riavvio;
- verdetto finale.
Lo scanner stampa i comandi ma non li esegue mai.
### Famiglia Debian e Ubuntu
Sequenza tipica generata:```bash
sudo apt update
sudo apt full-upgrade
sudo reboot
Rivedi la transazione del pacchetto proposta prima di approvarla.
Dopo il riavvio:```bash uname -r python3 cve_2026_31694_scanner.py
### Famiglia Arch e Manjaro
Sequenza tipica generata:```bash
sudo pacman -Syu
sudo reboot
I sistemi della famiglia Arch richiedono un aggiornamento completo del sistema. Non aggiornare i database dei pacchetti con pacman -Sy e poi installare pacchetti selezionati senza completare l'aggiornamento.
Sequenza tipica generata:```bash sudo dnf upgrade --refresh sudo systemctl reboot
Systems using `yum` may receive the corresponding `yum` command.
### Famiglia SUSE
Sequenza tipica generata:```bash
sudo zypper refresh
sudo zypper patch --cve=CVE-2026-31694
sudo zypper patch --category security
sudo systemctl reboot
La patch specifica per la CVE potrebbe non essere disponibile come transazione separata su ogni prodotto SUSE o stato del repository.
Sequenza generata tipica:```bash doas apk update doas apk upgrade doas reboot
Il prefisso dei privilegi dipende dal fatto che lo scanner trovi `sudo`, `doas` o una sessione già avviata come root.
### Gentoo Linux
Sequenza tipica generata:```bash
sudo emaint sync -a
sudo emerge --ask --update --deep --newuse @world
L'installazione e l'attivazione del kernel dipendono dal flusso di lavoro del kernel Gentoo configurato sull'host.
Sequenza tipica generata:```bash sudo xbps-install -Suv sudo reboot
### NixOS
Sequenza tipica generata:```bash
sudo nixos-rebuild switch --upgrade
sudo systemctl reboot
Quando la patch non può essere completata immediatamente, lo scanner può suggerire controlli temporanei.
Le raccomandazioni possibili includono:
/dev/fuse;/dev/fuse dai container non fidati;CAP_SYS_ADMIN;--privileged.Questi controlli possono interrompere carichi di lavoro legittimi, inclusi:
Le restrizioni temporanee non devono sostituire l'installazione di un kernel corretto dal fornitore.
I container normalmente condividono il kernel dell'host.
Uno scanner eseguito all'interno di un container può rilevare:
/dev/fuse, anche quando l'host ha FUSE abilitato.Per questo motivo, lo scanner contrassegna le prove dipendenti dall'host come non autorevoli e indirizza la mitigazione all'host del container.
Esegui lo scanner direttamente sull'host per una valutazione autorevole dei pacchetti e del riavvio.
Le linee guida per l'hardening dei container includono la rimozione di:```text --device /dev/fuse --cap-add SYS_ADMIN --privileged
Anche la configurazione Compose equivalente dovrebbe essere revisionata:```yaml
devices:
- /dev/fuse:/dev/fuse
cap_add:
- SYS_ADMIN
privileged: true
Il kernel WSL è gestito da Windows anziché dal pacchetto kernel della distribuzione guest Linux.
Esempio tipico di guida generata:```powershell wsl --update wsl --shutdown
Esegui questi comandi da Windows PowerShell, riavvia la distribuzione e riesegui lo scanner.
L'aggiornamento dei soli pacchetti guest con `apt`, `dnf` o un altro gestore di pacchetti Linux non sostituisce il kernel WSL.
### Macchine virtuali
Una macchina virtuale normalmente possiede il proprio kernel guest. I controlli di aggiornamento e riavvio specifici della distribuzione rimangono applicabili all'interno del guest.
L'host hypervisor dovrebbe essere valutato separatamente.
---
## Formati di report
### Testo
L'output di testo è pensato per l'uso diretto da terminale.```bash
python3 cve_2026_31694_scanner.py --format text
Il rapporto contiene:
L'output JSON contiene il report completo basato su dataclass.```bash
python3 cve_2026_31694_scanner.py
--format json
--output report.json
Esempio di selezione dei campi:```bash
python3 cve_2026_31694_scanner.py --format json --no-exit-status |
python3 -c '
import json
import sys
report = json.load(sys.stdin)
print(report["hostname"])
print(report["verdict"])
print(report["confidence"])
print(report["kernel_release"])
'
L'output Markdown è adatto per registri tecnici, ticket e report di valutazione.```bash
python3 cve_2026_31694_scanner.py
--format markdown
--output report.md
### Report di sola mitigazione```bash
python3 cve_2026_31694_scanner.py \
--mitigation-only \
--format markdown
Con il formato JSON, la modalità solo-mitigazione restituisce l'oggetto di mitigazione anziché il report completo dell'host.
#!/usr/bin/env bash
set -u
report="cve-2026-31694-$(hostname)-$(date +%Y%m%d-%H%M%S).json"
python3 cve_2026_31694_scanner.py
--format json
--output "$report"
status=$?
case "$status" in 0) echo "Assessment completed without a potential-vulnerability verdict" ;; 1) echo "Potential CVE-2026-31694 exposure detected: $report" >&2 ;; 2) echo "Assessment inconclusive: $report" >&2 ;; *) echo "Scanner failure: $report" >&2 ;; esac
exit "$status"
### Raccolta dei report senza far fallire un job```bash
python3 cve_2026_31694_scanner.py \
--format json \
--output /var/tmp/cve-2026-31694.json \
--no-exit-status
30 3 * * * /usr/bin/python3 /opt/security/cve_2026_31694_scanner.py --format json --output /var/log/cve-2026-31694.json --no-exit-status
Questo sovrascrive lo stesso file di report. Usa uno script wrapper quando sono necessari report storici.
### Esempio di servizio Systemd```ini
[Unit]
Description=Passive CVE-2026-31694 assessment
After=local-fs.target
[Service]
Type=oneshot
ExecStart=/usr/bin/python3 /opt/security/cve_2026_31694_scanner.py --format json --output /var/log/cve-2026-31694.json --no-exit-status
NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=strict
ProtectHome=yes
ReadWritePaths=/var/log
The scanner needs read access to kernel and package metadata. Additional sandbox restrictions may hide evidence and produce an inconclusive report.
For fleet assessment:
Do not treat a scan from a container image build as a host-kernel assessment.
POTENTIALLY_VULNERABLEIdentify the exact running kernel: ```bash uname -r
Identificare la distribuzione e la versione installate: ```bash cat /etc/os-release
Verifica lo stato CVE del vendor della distribuzione per il pacchetto kernel esatto e il flavor.
Aggiorna i metadati dei pacchetti.
installa il pacchetto kernel corretto supportato dal vendor.
Riavvia l'host.
Conferma che il kernel in esecuzione è cambiato:
bash
uname -r
8. Riesegui lo scanner.
### Risposta consigliata a `INCONCLUSIVE`
Raccogli le prove mancanti:```bash
uname -a
getconf PAGE_SIZE
cat /etc/os-release
grep CONFIG_FUSE_FS /boot/config-"$(uname -r)" 2>/dev/null
cat /proc/filesystems
ls -l /dev/fuse 2>/dev/null
findmnt -t fuse,fuseblk,fusectl
Quindi verifica il pacchetto kernel esatto rispetto all'avviso del fornitore.
L'installazione di un pacchetto kernel corretto non modifica il kernel attualmente in esecuzione.
Verifica sia il kernel installato che quello in esecuzione, quindi riavvia come necessario.
Esempi:```bash uname -r ls -1 /lib/modules
I sistemi della famiglia Debian possono anche fornire:```bash
test -e /var/run/reboot-required && cat /var/run/reboot-required
Prima di scaricare o bloccare temporaneamente FUSE:```bash findmnt -t fuse,fuseblk,fusectl lsmod | grep '^fuse' ps aux | grep -E '[f]usermount|[s]shfs|[r]clone'
Non rimuovere il modulo mentre sono montati filesystem FUSE attivi.
---
## Limitazioni
### Nessuna conferma di exploit
Lo scanner non innesca intenzionalmente il percorso di codice vulnerabile.
Un verdetto `POTENTIALLY_VULNERABLE` significa che le prove passive disponibili sono coerenti con l'esposizione. Non è una prova che lo sfruttamento avrà successo.
### Backport dei fornitori
I kernel delle distribuzioni spesso includono backport delle correzioni di sicurezza.
Una versione upstream dall'aspetto più vecchio potrebbe essere già stata corretta.
L'avviso del fornitore e la versione esatta del pacchetto sono fonti autorevoli per i kernel gestiti dalla distribuzione.
### Disallineamento dell'albero dei sorgenti
Un albero dei sorgenti trovato in `/usr/src` potrebbe non corrispondere al kernel in esecuzione.
L'evidenza delle patch nei sorgenti dovrebbe essere validata rispetto a:```bash
uname -r
and the source package or build directory used for that exact kernel.
The scanner does not refresh repositories.
Package update checks depend on existing local cache state.
Use the generated distribution-specific refresh and upgrade commands for an up-to-date package decision.
A container sees the host kernel but normally has different package metadata.
Run the scanner on the host.
Linux guest package state does not determine WSL kernel patch status.
Update WSL from Windows.
Custom, embedded, appliance, vendor, and self-built kernels may not have package metadata or recognizable version strings.
Inspect the actual source commit or vendor release notes.
The scanner does not determine whether a live-patch framework has applied this specific correction to the running kernel.
Use the live-patch vendor's status tools and advisory data.
The scanner does not verify:
The scanner assesses the current process namespace.
Mounts or device access hidden by namespaces may not appear in the report.
Kernel configuration could not be determinedCheck whether one of these files exists:```bash ls -l /proc/config.gz ls -l /boot/config-"$(uname -r)" ls -l /lib/modules/"$(uname -r)"/build/.config
Alcune distribuzioni non espongono la configurazione corrente tramite `/proc/config.gz`.
### `Running kernel package could not be identified`
Possibili cause:
- in esecuzione all'interno di un container;
- l'immagine del kernel non è presente nel filesystem corrente;
- kernel personalizzato;
- database dei pacchetti non disponibile;
- kernel fornito dalla piattaforma;
- permessi insufficienti.
Controlla:```bash
uname -r
ls -l /boot
ls -l /lib/modules/"$(uname -r)"
Aggiorna i metadati dei pacchetti utilizzando la guida alla mitigazione generata, quindi esegui nuovamente lo scanner.
Lo scanner passivo non aggiorna i repository automaticamente.
POTENTIALLY_VULNERABLE dopo l'installazione degli aggiornamentiConferma che il nuovo kernel sia in esecuzione:```bash uname -r
Confrontalo con le directory dei kernel installati:```bash
ls -1 /lib/modules
Potrebbe essere ancora necessario un riavvio.
Controlla anche l'avviso del fornitore perché un backport corretto potrebbe non corrispondere alla baseline della versione upstream.
Quando il report mostra:```text CONFIG_FUSE_FS=y
`modprobe -r fuse` e la blacklist dei moduli non possono disabilitare FUSE.
Usa un kernel patchato o un kernel compilato senza supporto FUSE.
### L'output dello scanner è incompleto con il sandboxing di systemd
Lo scanner potrebbe aver bisogno di accesso in lettura a:```text
/proc
/boot
/lib/modules
/usr/lib/modules
/usr/src
package database directories
package cache directories
Regola l'hardening del servizio affinché questi percorsi rimangano leggibili.
Layout di progetto consigliato:```text cve-2026-31694-scanner/ ├── README.md └── cve_2026_31694_scanner.py
Layout di installazione consigliato:```text
/opt/security/cve-2026-31694/
├── README.md
└── cve_2026_31694_scanner.py
Esempio:```bash sudo install -d -m 0755 /opt/security/cve-2026-31694
sudo install -m 0755
cve_2026_31694_scanner.py
/opt/security/cve-2026-31694/
sudo install -m 0644
README.md
/opt/security/cve-2026-31694/
---
## Riferimenti
- Record CVE: <https://www.cve.org/CVERecord?id=CVE-2026-31694>
- Record NVD: <https://nvd.nist.gov/vuln/detail/CVE-2026-31694>
- Riferimento alla patch stabile Linux: <https://git.kernel.org/stable/c/51a8de6c50bf947c8f534cd73da4c8f0a13e7bed>
- Stato Ubuntu: <https://ubuntu.com/security/CVE-2026-31694>
- Tracker di sicurezza Debian: <https://security-tracker.debian.org/tracker/CVE-2026-31694>
- Database CVE Red Hat: <https://access.redhat.com/security/cve/CVE-2026-31694>
- Database CVE SUSE: <https://www.suse.com/security/cve/CVE-2026-31694.html>
---
## Autore
**Aung Myat Thu [w01f]**
| Opzione | Descrizione |
|---|
--format text | Output di terminale leggibile dall'uomo. Questo è il valore predefinito. |
--format json | Report strutturato completo in JSON. |
--format markdown | Report tecnico in Markdown. |
--json | Alias per --format json. |
--output PATH | Scrive il report su un file invece che sull'output standard. |
--mitigation-only | Restituisce solo la sezione di mitigazione generata. |
--no-package-query | Salta le interrogazioni locali di aggiornamento del gestore dei pacchetti. |
--no-exit-status | Termina sempre con stato 0 dopo aver generato l'output. |
-h, --help | Mostra l'aiuto del comando. |
n | FUSE è disabilitato nella configurazione rilevata. |
| unknown | Nessuna fonte di configurazione leggibile era disponibile. |
1 |
| Potenzialmente vulnerabile |
2 | Inconcludente |
3 | Errore dello scanner o della generazione del report |