
Scanner passif de vulnérabilités pour hôtes Linux pour CVE-2026-31694 : vérifie le noyau en cours d'exécution, la configuration FUSE, les métadonnées de paquets et les preuves de correctifs, puis génère des recommandations d'atténuation adaptées.
Un outil passif d'évaluation de hôtes Linux pour CVE-2026-31694, une écriture hors limites dans le cache readdir de FUSE dans le noyau Linux.
Le scanner évalue le noyau en cours d'exécution, l'exposition FUSE, les métadonnées locales des paquets, les preuves issues des sources du noyau, l'environnement d'exécution et la famille de systèmes d'exploitation. Lorsque l'hôte peut être affecté, il produit un guide d'atténuation adapté à la distribution détectée.
Auteur : Aung Myat Thu [w01f]
cve_2026_31694_scanner.py est un utilitaire local d'évaluation de vulnérabilités sans exploitation.
Il ne confirme pas la vulnérabilité en déclenchant le chemin de code FUSE affecté. Il combine plutôt plusieurs indicateurs passifs :
CONFIG_FUSE_FS ;/dev/fuse et accès utilisateur actuel ;Le résultat est une évaluation de l'exposition, et non une preuve basée sur l'exploitation.
CVE-2026-31694 affecte le cache readdir FUSE du noyau Linux.
La logique vulnérable calcule la taille sérialisée d'une entrée de répertoire à partir d'une longueur de nom contrôlée par le serveur et copie l'enregistrement dans une seule page du cache de pages. Une entrée de répertoire avec une longueur de nom de 4095 peut produire une taille sérialisée de 4120 octets.
Sur un système utilisant des pages de 4096 octets, cet enregistrement dépasse une page de 24 octets.
La correction en amont rejette les enregistrements de répertoire qui ne peuvent pas tenir dans une seule page avant que la copie dans le cache ne se produise.
fs/fuse/readdir.c fuse_add_dirent_to_cache()
### Données de référence du scanner
Le scanner contient les références amont stables corrigées suivantes :
| Série de noyau | Référence corrigée |
|---|---:|
| 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 ou plus récent |
Ces versions servent d’entrée d’évaluation. Elles ne sont pas considérées comme la seule source de vérité, car les éditeurs de distributions peuvent rétroporter la correction tout en conservant un numéro de version amont plus ancien.
---
## Modèle de sécurité
Le scanner est conçu pour éviter de déclencher l’opération vulnérable.
### Le scanner ne
- monte pas de système de fichiers FUSE ;
- ouvre ni ne communique avec `/dev/fuse` ;
- démarre pas de serveur FUSE ;
- soumet pas d’enregistrements de répertoire forgés ;
- alloue pas de mémoire pour les tests de placement de pages ;
- prépare pas les allocateurs du noyau ;
- modifie pas `/etc/passwd` ;
- modifie pas la configuration du noyau ;
- charge ni ne décharge des modules du noyau ;
- modifie pas les permissions de `/dev/fuse` ;
- installe ni ne supprime des paquets ;
- redémarre pas le système ;
- tente pas d’élévation de privilèges.
### Le scanner peut
- lire les fichiers situés sous `/proc`, `/boot`, `/lib/modules`, `/usr/lib/modules`, `/usr/src` et les répertoires de métadonnées de paquets ;
- exécuter des requêtes de paquets limitées et en lecture seule ;
- inspecter les montages actifs et l’enregistrement des systèmes de fichiers ;
- écrire un rapport uniquement lorsque `--output` est explicitement fourni ;
- afficher des commandes d’atténuation pour examen par l’administrateur.
Les commandes d’atténuation sont une sortie documentaire. Elles ne sont jamais exécutées automatiquement.
---
## Fonctionnalités
### Identification de l’hôte et du noyau
- Lit `platform.release()` et analyse la version du noyau au format amont.
- Lit `/etc/os-release` ou `/usr/lib/os-release`.
- Détecte l’architecture du processeur et la taille des pages mémoire.
- Détermine si le noyau analysé appartient au système d’exploitation actuel.
### Évaluation de l’exposition FUSE
- Lit `CONFIG_FUSE_FS` à partir des sources de configuration du noyau disponibles.
- Détecte la prise en charge intégrée de FUSE et les configurations de module chargeable.
- Lit `/proc/filesystems`.
- Vérifie les métadonnées de `/dev/fuse` et l’accès en lecture/écriture de l’utilisateur actuel.
- Localise `fusermount3` ou `fusermount`.
- Analyse les montages FUSE actifs à partir de `/proc/self/mountinfo`.
### Preuves de correctif
- Compare la version en cours d’exécution aux références corrigées amont.
- Recherche dans le source du noyau installé la protection contre les enregistrements surdimensionnés.
- Vérifie dans les journaux de modifications locaux des paquets RPM ou Debian :
- `CVE-2026-31694` ;
- le titre du correctif amont.
### État des paquets et du redémarrage
- Tente d’identifier le paquet propriétaire du noyau en cours d’exécution.
- Interroge les métadonnées locales du gestionnaire de paquets sans actualiser les dépôts.
- Détecte un noyau installé plus récent lorsque l’environnement hôte est autoritatif.
- Vérifie `/var/run/reboot-required` le cas échéant.
### Sensibilité à l’environnement
- Détecte les conteneurs compatibles Docker.
- Détecte les conteneurs compatibles Podman.
- Détecte les cgroups liés aux conteneurs.
- Détecte WSL.
- Détecte les machines virtuelles à l’aide de `systemd-detect-virt` lorsqu’il est disponible.
### Rapports
- Sortie texte lisible par l’humain.
- Sortie JSON lisible par machine.
- Sortie de rapport Markdown.
- Sortie atténuation uniquement.
- Sortie fichier optionnelle.
- Codes de sortie de processus explicites.
---
## Prérequis
### Requis
- Linux pour l’évaluation du noyau.
- Python 3.9 ou plus récent.
- Accès en lecture aux métadonnées système normales.
Le scanner n’utilise que la bibliothèque standard de Python.
### Commandes facultatives
Des preuves supplémentaires sont collectées lorsque les outils suivants sont présents :
| Outil | Fonction |
|---|---|
| `dpkg-query` | Découverte du paquet propriétaire du noyau et du journal des modifications pour Debian/Ubuntu |
| `rpm` | Inspection de la propriété des paquets et du journal des modifications pour Fedora/RHEL/SUSE |
| `pacman` | Paquet noyau et métadonnées de mise à jour pour la famille Arch |
| `apt` | Requête de mise à jour en cache pour la famille Debian |
| `dnf` ou `dnf5` | Requête de mise à jour en cache pour Fedora/RHEL |
| `zypper` | Requête de correctif CVE en cache pour SUSE |
| `apk` | Requête de paquet/mise à jour Alpine |
| `systemd-detect-virt` | Détection de conteneurs et de machines virtuelles |
Les privilèges root ne sont pas requis pour l’analyse normale.
Certaines preuves peuvent être indisponibles pour un compte non privilégié en raison des permissions de fichiers spécifiques au système.
---
## Installation
Placez le scanner dans un répertoire de travail :```bash
chmod +x cve_2026_31694_scanner.py
Exécutez-le directement :```bash ./cve_2026_31694_scanner.py
Ou invoquez-le avec Python :```bash
python3 cve_2026_31694_scanner.py
Aucune installation de package Python n'est requise.
python3 cve_2026_31694_scanner.py
### Sortie JSON```bash
python3 cve_2026_31694_scanner.py --format json
L'alias de compatibilité ci-dessous produit le même format :```bash python3 cve_2026_31694_scanner.py --json
### Rapport Markdown```bash
python3 cve_2026_31694_scanner.py --format markdown
python3 cve_2026_31694_scanner.py
--format markdown
--output cve-2026-31694-report.md
### Afficher uniquement les conseils de remédiation```bash
python3 cve_2026_31694_scanner.py --mitigation-only
python3 cve_2026_31694_scanner.py --no-package-query
### Toujours renvoyer un succès après le signalement```bash
python3 cve_2026_31694_scanner.py --no-exit-status
Cette option est utile lors de la collecte de rapports sans permettre à l’état de vulnérabilité de faire échouer un travail d’orchestration.
| Option | Description |
|---|---|
--format text | Sortie terminal lisible par un humain. C’est la valeur par défaut. |
--format json | Rapport structuré complet au format JSON. |
--format markdown | Rapport technique au format Markdown. |
--json | Alias de --format json. |
--output PATH | Écrire le rapport dans un fichier au lieu de la sortie standard. |
--mitigation-only | Ne renvoyer que la section de mitigation générée. |
--no-package-query | Ignorer les requêtes de mise à jour du gestionnaire de paquets local. |
--no-exit-status | Toujours quitter avec le statut 0 après avoir généré la sortie. |
-h, --help | Afficher l’aide de la commande. |
Le scanner évalue les indices dans l’ordre suivant.
Le scanner détermine :
La détection de l’environnement modifie l’interprétation des données relatives aux paquets et aux redémarrages.
Par exemple, un conteneur peut voir le noyau de l’hôte, mais ne peut normalement pas déterminer le paquet du noyau hôte à partir du système de fichiers du conteneur.
Le scanner recherche une configuration du noyau en cours d’exécution dans :```text /proc/config.gz /boot/config-$(uname -r) /lib/modules/$(uname -r)/build/.config /usr/lib/modules/$(uname -r)/build/.config
Il évalue :```text
CONFIG_FUSE_FS=y
CONFIG_FUSE_FS=m
CONFIG_FUSE_FS is not set
Interprétation :
| Valeur | Signification |
|---|---|
y | FUSE est intégré au noyau. Le blocage de modules ne peut pas le désactiver. |
m | FUSE est disponible en tant que module chargeable. |
n | FUSE est désactivé dans la configuration détectée. |
| unknown | Aucune source de configuration lisible n'était disponible. |
Le scanner vérifie :```text /proc/filesystems /dev/fuse PATH for fusermount3 or fusermount /proc/self/mountinfo
L'absence de `/dev/fuse` ou de `fusermount3` réduit l'utilisabilité immédiate dans l'environnement actuel, mais ne prouve pas que le noyau est corrigé.
### 4. Géométrie des pages mémoire
L'enregistrement surdimensionné documenté est de `4120` octets.
Lorsque la taille de page de l'hôte est d'au moins `4120` octets, l'enregistrement documenté ne franchit pas de limite de page. Le scanner peut indiquer que le système n'est pas exposé selon la géométrie de page documentée.
Cette conclusion ne s'applique qu'à l'enregistrement documenté et au comportement d'implémentation évalué. Il ne s'agit pas d'une affirmation générale selon laquelle tous les problèmes de sécurité mémoire de FUSE sont impossibles sur les systèmes à pages plus grandes.
### 5. Inspection du code source installé
Lorsque le code source installé est disponible, le scanner recherche :```text
fs/fuse/readdir.c
Il recherche la fonction affectée et une garde équivalente au rejet de reclen > PAGE_SIZE.
La preuve directe par le code source offre une confiance plus élevée que la comparaison de versions.
Le code source inspecté doit correspondre au noyau en cours d'exécution pour que le résultat soit fiable. Les arborescences de sources des distributions sous /usr/src peuvent représenter un noyau installé différent.
Le scanner tente d'associer l'image du noyau en cours d'exécution au paquet qui la possède, en utilisant la base de données de paquets de la distribution détectée.
Les mécanismes possibles incluent :```text dpkg-query -S rpm -qf pacman -Qo apk info -W
Lorsqu'un paquet est identifié, les métadonnées locales du changelog peuvent être inspectées pour trouver l'identifiant CVE ou le titre du correctif.
L'absence de correspondance dans le changelog ne prouve pas une vulnérabilité. Les fournisseurs n'incluent pas toujours des références CVE individuelles dans les changelogs installés localement.
### 7. Comparaison des versions en amont
La version du noyau analysée est comparée à la table de référence fixe du scanner.
La comparaison des versions produit un résultat heuristique car :
- les noyaux des fournisseurs peuvent contenir des backports ;
- les révisions de versions des paquets de noyau sont spécifiques à chaque distribution ;
- les noyaux cloud, temps réel, durcis et d'activation matérielle peuvent avoir des calendriers de correctifs distincts ;
- une chaîne de version peut représenter une branche maintenue par le fournisseur plutôt qu'une version en amont non modifiée.
### 8. Métadonnées de mise à jour des paquets
Là où c'est pris en charge, le scanner exécute des requêtes en lecture seule sur les métadonnées locales existantes.
Il ne rafraîchit pas les dépôts.
Exemples :```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 résultat indiquant qu'aucune mise à jour n'est disponible n'est pas plus à jour que les métadonnées du dépôt en cache.
Sur un hôte normal ou une machine virtuelle, le scanner compare le noyau en cours d'exécution avec les noyaux installés détectés et vérifie le marqueur de redémarrage utilisé par les systèmes de la famille Debian.
Dans un conteneur ou un invité WSL, cette vérification est marquée comme contrôlée par l'hôte au lieu de comparer les fichiers de l'invité avec le noyau hôte.
La priorité des preuves est approximativement la suivante :
PATCHEDDes preuves locales directes indiquent que la correction existe.
Exemples :
La confiance est généralement élevée, mais l'alignement entre la source et le noyau en cours d'exécution doit encore être vérifié.
NOT_EXPOSEDLa configuration du noyau en cours d'exécution détectée a FUSE désactivé.
Il s'agit d'un résultat d'exposition, pas d'une preuve que le code source du noyau contient lui-même la correction.
NOT_EXPOSED_BY_DOCUMENTED_PAGE_GEOMETRYLa taille de page mémoire est suffisante pour contenir l'enregistrement documenté de 4120 octets sans franchir une limite de page.
Ce verdict est limité à la géométrie de vulnérabilité documentée.
UPSTREAM_BASELINE_SAFELa version en cours d'exécution analysée correspond à une base amont corrigée connue ou est antérieure à l'implémentation affectée.
La vérification du paquet du fournisseur reste préférable.
POTENTIALLY_VULNERABLELe noyau analysé se situe dans une plage amont affectée et aucune preuve locale directe de correctif n'a été trouvée.
Ce résultat nécessite de consulter l'avis de sécurité du fournisseur du système d'exploitation avant de déclarer le noyau installé vulnérable.
INCONCLUSIVELe scanner n'a pas pu obtenir suffisamment de preuves.
Causes courantes :
NOT_APPLICABLELe système d'exploitation actuel n'est pas Linux.
| Code | Signification |
|---|---|
0 | Preuve de correctif, base amont sûre, ou absence d'exposition documentée |
1 | Potentiellement vulnérable |
2 | Non concluant |
3 | Erreur du scanner ou de génération du rapport |
Exemple :```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
Lorsque `--no-exit-status` est spécifié, le scanner renvoie `0` après avoir produit le rapport.
---
## Sources de détection
Le scanner utilise les sources locales suivantes lorsqu’elles sont disponibles :
| Source | Informations |
|---|---|
| `/etc/os-release` | Identité de la distribution |
| `/usr/lib/os-release` | Identité de la distribution (repli) |
| `/proc/version` | Indicateurs du noyau et de WSL |
| `/proc/config.gz` | Configuration du noyau en cours d’exécution |
| `/boot/config-*` | Configuration du noyau |
| `/lib/modules/*/build/.config` | Configuration de compilation du noyau |
| `/proc/filesystems` | Systèmes de fichiers enregistrés |
| `/proc/self/mountinfo` | Points de montage FUSE actifs |
| `/proc/1/cgroup` | Indicateurs de conteneur |
| `/dev/fuse` | Présence et permissions du périphérique |
| `/usr/src/*/fs/fuse/readdir.c` | Preuve facultative de correctif au niveau source |
| `/lib/modules` | Inventaire des noyaux installés |
| `/usr/lib/modules` | Inventaire des noyaux installés |
| `/boot/vmlinuz-*` | Inventaire des noyaux installés |
| `/var/run/reboot-required` | Indicateur de redémarrage pour la famille Debian |
| base de données des paquets | Propriété des paquets du noyau |
| journaux des modifications des paquets | Preuve locale facultative de rétroportage |
| cache des paquets | Preuve facultative de disponibilité des mises à jour |
---
## Prise en charge des distributions
### Détection de la famille de distribution
| Famille | Distributions reconnues |
|---|---|
| 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 |
| Inconnue | Conseils génériques pour Linux |
### Prise en charge des requêtes de mise à jour locales
| Famille | Requête de mise à jour en lecture seule |
|---|---|
| Debian/Ubuntu | `apt list --upgradable` |
| Arch | `pacman -Qu` |
| Fedora/RHEL | `dnf check-upgrade` en cache |
| SUSE | liste des correctifs CVE en cache avec `zypper` |
| Alpine | `apk version -l <` |
| Gentoo | Non implémenté |
| Void | Non implémenté |
| NixOS | Non implémenté |
| Inconnue | Non implémenté |
L’absence d’une mise à jour localement visible ne signifie pas qu’un paquet corrigé est indisponible. Les métadonnées du dépôt peuvent être obsolètes ou la distribution peut ne pas avoir encore publié de paquet.
---
## Génération des mesures d’atténuation
Les recommandations d’atténuation sont sélectionnées selon :
- la famille de distribution ;
- le gestionnaire de paquets ;
- le statut de conteneur ou WSL ;
- la configuration FUSE ;
- la disponibilité de `/dev/fuse` ;
- les points de montage FUSE actifs ;
- l’état de redémarrage ;
- le verdict final.
Le scanner affiche les commandes mais ne les exécute jamais.
### Famille Debian et Ubuntu
Séquence typique générée :```bash
sudo apt update
sudo apt full-upgrade
sudo reboot
Examinez la transaction de paquets proposée avant de l'approuver.
Après redémarrage:```bash uname -r python3 cve_2026_31694_scanner.py
### Famille Arch et Manjaro
Séquence typique générée :```bash
sudo pacman -Syu
sudo reboot
Les systèmes de la famille Arch nécessitent une mise à niveau complète du système. Ne rafraîchissez pas les bases de données de paquets avec pacman -Sy puis n'installez pas des paquets sélectionnés sans avoir terminé la mise à niveau.
Séquence typique générée :```bash sudo dnf upgrade --refresh sudo systemctl reboot
Les systèmes utilisant `yum` peuvent recevoir la commande `yum` correspondante.
### Famille SUSE
Séquence générée typique :```bash
sudo zypper refresh
sudo zypper patch --cve=CVE-2026-31694
sudo zypper patch --category security
sudo systemctl reboot
Le correctif spécifique au CVE peut ne pas être disponible en tant que transaction distincte sur chaque produit SUSE ou état de référentiel.
Séquence typique générée :```bash doas apk update doas apk upgrade doas reboot
Le préfixe de privilège dépend du fait que le scanner trouve `sudo`, `doas` ou une session déjà root.
### Gentoo Linux
Séquence type générée :```bash
sudo emaint sync -a
sudo emerge --ask --update --deep --newuse @world
L'installation et l'activation du noyau dépendent du flux de travail du noyau Gentoo configuré sur l'hôte.
Séquence générée typique :```bash sudo xbps-install -Suv sudo reboot
### NixOS
Séquence générée typique :```bash
sudo nixos-rebuild switch --upgrade
sudo systemctl reboot
Lorsque le correctif ne peut pas être appliqué immédiatement, le scanner peut suggérer des contrôles temporaires.
Les recommandations possibles incluent :
/dev/fuse ;/dev/fuse des conteneurs non fiables ;CAP_SYS_ADMIN ;--privileged.Ces contrôles peuvent perturber des charges de travail légitimes, notamment :
Les restrictions temporaires ne doivent pas remplacer l'installation d'un noyau corrigé par le fournisseur.
Les conteneurs partagent normalement le noyau de l'hôte.
Un scanner exécuté à l'intérieur d'un conteneur peut détecter :
/dev/fuse, même lorsque l'hôte a FUSE activé.Pour cette raison, le scanner marque les preuves dépendantes de l'hôte comme non autoritatives et oriente l'atténuation vers l'hôte du conteneur.
Exécutez le scanner directement sur l'hôte pour une évaluation autoritative des paquets et du redémarrage.
Les recommandations de durcissement des conteneurs incluent la suppression de :```text --device /dev/fuse --cap-add SYS_ADMIN --privileged
La configuration Compose équivalente devrait également être examinée:```yaml
devices:
- /dev/fuse:/dev/fuse
cap_add:
- SYS_ADMIN
privileged: true
Le noyau WSL est géré par Windows plutôt que par le paquet de noyau de la distribution invitée Linux.
Recommandation typique générée :```powershell wsl --update wsl --shutdown
Exécutez ces commandes depuis Windows PowerShell, redémarrez la distribution, puis relancez le scanner.
La mise à jour des seuls paquets invités avec `apt`, `dnf`, ou un autre gestionnaire de paquets Linux ne remplace pas le noyau WSL.
### Machines virtuelles
Une machine virtuelle possède normalement son propre noyau invité. Les vérifications des paquets et des redémarrages spécifiques à la distribution restent applicables dans l'invité.
L'hôte hyperviseur doit être évalué séparément.
---
## Formats de rapport
### Texte
La sortie texte est destinée à une utilisation directe dans le terminal.```bash
python3 cve_2026_31694_scanner.py --format text
Le rapport contient :
La sortie JSON contient le rapport complet basé sur les dataclasses.```bash
python3 cve_2026_31694_scanner.py
--format json
--output report.json
Exemple de sélection de champ :```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"])
'
La sortie Markdown convient aux enregistrements techniques, aux tickets et aux rapports d'évaluation.```bash
python3 cve_2026_31694_scanner.py
--format markdown
--output report.md
### Rapport de mitigation uniquement```bash
python3 cve_2026_31694_scanner.py \
--mitigation-only \
--format markdown
Avec le format JSON, le mode atténuation seule renvoie l'objet d'atténuation plutôt que le rapport hôte complet.
#!/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"
### Collecte de rapports sans faire échouer 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
Cela écrase le même fichier de rapport. Utilisez un script wrapper lorsque des rapports historiques sont nécessaires.
### Exemple de service 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
Le scanner a besoin d'un accès en lecture aux métadonnées du noyau et des paquets. Des restrictions supplémentaires du sandbox peuvent masquer des preuves et produire un rapport non concluant.
Pour l'évaluation d'une flotte :
Ne considérez pas une analyse effectuée lors de la construction d'une image conteneur comme une évaluation du noyau de l'hôte.
POTENTIALLY_VULNERABLEIdentifiez le noyau exact en cours d'exécution : ```bash uname -r
Identifiez la distribution et la version installées : ```bash cat /etc/os-release
Consultez l'état CVE du fournisseur de la distribution pour le paquet exact du noyau et sa variante.
Actualisez les métadonnées des paquets.
Installez le paquet du noyau corrigé pris en charge par le fournisseur.
Redémarrez l'hôte.
Vérifiez que le noyau en cours d'exécution a changé : ```bash uname -r
Relancez le scanner.
INCONCLUSIVERecueillez les preuves manquantes :```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
Vérifiez ensuite le paquet kernel exact par rapport à l'avis du fournisseur.
### Vérification du redémarrage
L'installation d'un paquet kernel corrigé ne modifie pas le kernel en cours d'exécution.
Vérifiez à la fois les kernels installés et en cours d'exécution, puis redémarrez si nécessaire.
Exemples :```bash
uname -r
ls -1 /lib/modules
Les systèmes de type Debian peuvent également fournir :```bash test -e /var/run/reboot-required && cat /var/run/reboot-required
### Examen de la dépendance FUSE
Avant de décharger ou de bloquer temporairement FUSE :```bash
findmnt -t fuse,fuseblk,fusectl
lsmod | grep '^fuse'
ps aux | grep -E '[f]usermount|[s]shfs|[r]clone'
Ne déchargez pas le module pendant que des systèmes de fichiers FUSE actifs sont montés.
Le scanner ne déclenche pas intentionnellement le chemin de code vulnérable.
Un verdict POTENTIALLY_VULNERABLE signifie que les preuves passives disponibles sont cohérentes avec une exposition. Ce n'est pas une preuve que l'exploitation réussira.
Les noyaux des distributions rétroportent fréquemment des correctifs de sécurité.
Une version amont d'apparence ancienne peut être corrigée.
L'avis du fournisseur et la version exacte du paquet font autorité pour les noyaux gérés par la distribution.
Une arborescence source située sous /usr/src peut ne pas correspondre au noyau en cours d'exécution.
Les preuves de correctifs sources doivent être validées par rapport à :```bash uname -r
et le paquet source ou le répertoire de compilation utilisé pour ce noyau exact.
### Métadonnées de paquets obsolètes
Le scanner ne rafraîchit pas les dépôts.
Les vérifications de mise à jour des paquets dépendent de l'état du cache local existant.
Utilisez les commandes de rafraîchissement et de mise à niveau générées, spécifiques à la distribution, pour une décision de paquet à jour.
### Conteneurs
Un conteneur voit le noyau hôte mais possède normalement des métadonnées de paquets différentes.
Exécutez le scanner sur l'hôte.
### WSL
L'état des paquets de l'invité Linux ne détermine pas le statut des correctifs du noyau WSL.
Mettez à jour WSL depuis Windows.
### Noyaux personnalisés
Les noyaux personnalisés, embarqués, d'appliance, de fournisseur ou auto-compilés peuvent ne pas avoir de métadonnées de paquets ni de chaînes de version reconnaissables.
Inspectez le commit source réel ou les notes de version du fournisseur.
### Correctifs en direct
Le scanner ne détermine pas si un framework de correctifs en direct a appliqué cette correction spécifique au noyau en cours d'exécution.
Utilisez les outils de statut et les données d'avis du fournisseur de correctifs en direct.
### Secure Boot et état du chargeur d'amorçage
Le scanner ne vérifie pas :
- quel noyau le chargeur d'amorçage sélectionnera ensuite ;
- si Secure Boot accepte l'image installée ;
- si un nouvel initramfs a été généré correctement ;
- si la machine a redémarré avec succès sur le noyau attendu.
### Systèmes de fichiers distribués et espaces de noms
Le scanner évalue l'espace de noms du processus actuel.
Les montages ou l'accès aux périphériques masqués par les espaces de noms peuvent ne pas apparaître dans le rapport.
---
## Dépannage
### `Kernel configuration could not be determined`
Vérifiez si l'un de ces fichiers existe :```bash
ls -l /proc/config.gz
ls -l /boot/config-"$(uname -r)"
ls -l /lib/modules/"$(uname -r)"/build/.config
Certaines distributions n'exposent pas la configuration en cours d'exécution via /proc/config.gz.
Le paquet du noyau en cours d'exécution n'a pas pu être identifiéCauses possibles :
Vérifiez :```bash uname -r ls -l /boot ls -l /lib/modules/"$(uname -r)"
### La requête de mise à jour des paquets ne signale aucune mise à jour
Actualisez les métadonnées des paquets à l'aide du guide d'atténuation généré, puis relancez le scanner.
Le scanner passif n'actualise pas automatiquement les dépôts.
### `POTENTIALLY_VULNERABLE` après l'installation des mises à jour
Confirmez que le nouveau noyau est en cours d'exécution :```bash
uname -r
Comparez-le avec les répertoires du noyau installés :```bash ls -1 /lib/modules
Un redémarrage peut encore être nécessaire.
Vérifiez également l'avis du fournisseur, car un backport corrigé peut ne pas correspondre à la ligne de base de la version amont.
### FUSE est intégré au noyau
Lorsque le rapport indique :```text
CONFIG_FUSE_FS=y
modprobe -r fuse et le blacklistage de modules ne peuvent pas désactiver FUSE.
Utilisez un noyau patché ou un noyau compilé sans support FUSE.
Le scanner peut nécessiter un accès en lecture à :```text /proc /boot /lib/modules /usr/lib/modules /usr/src package database directories package cache directories
Ajustez le durcissement du service pour que ces chemins restent lisibles.
---
## Structure des fichiers
Disposition recommandée du projet :```text
cve-2026-31694-scanner/
├── README.md
└── cve_2026_31694_scanner.py
Disposition d'installation recommandée :```text /opt/security/cve-2026-31694/ ├── README.md └── cve_2026_31694_scanner.py
Exemple :```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/
Aung Myat Thu [w01f]