Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE_2026_31694 — 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. | Kitploit
Outils/GitHubGitHub/zenzue/cve_2026_31694
Outils DéfensifsScanners de VulnérabilitésAnalyse des VulnérabilitésAudit de Configuration
GitHubzenzue/cve_2026_31694

CVE_2026_31694

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.

Voir le dépôt
3il y a 1 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2026-31694 Passive Scanner

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]


Table des matières

  • Aperçu
  • Résumé de la vulnérabilité
  • Modèle de sécurité
  • Fonctionnalités
  • Prérequis
  • Installation
  • Utilisation
  • Options de ligne de commande
  • Flux d'évaluation
  • Verdicts
  • Codes de sortie
  • Sources de détection
  • Support des distributions
  • Génération d'atténuations
  • Comportement en conteneur et WSL
  • Formats de rapport
  • Automatisation et intégration
  • Recommandations opérationnelles
  • Limites
  • Dépannage
Références

Aperçu

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 :

  • version du noyau en cours d'exécution ;
  • références de versions corrigées en amont ;
  • taille de page mémoire actuelle ;
  • configuration noyau CONFIG_FUSE_FS ;
  • types de systèmes de fichiers FUSE enregistrés ;
  • présence de /dev/fuse et accès utilisateur actuel ;
  • disponibilité de l'utilitaire de montage FUSE ;
  • montages FUSE actifs ;
  • inspection des sources du noyau installées ;
  • propriété du paquet noyau ;
  • preuves issues du changelog local des paquets ;
  • métadonnées de mise à jour de paquets en cache ;
  • comparaison entre noyau installé et noyau en cours d'exécution ;
  • détection de la distribution et du gestionnaire de paquets ;
  • détection de conteneur, de machine virtuelle et de WSL.

Le résultat est une évaluation de l'exposition, et non une preuve basée sur l'exploitation.


Résumé de la vulnérabilité

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.

Composant affecté```text

fs/fuse/readdir.c fuse_add_dirent_to_cache()

root@kitploit:~
### 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

root@kitploit:~
Ou invoquez-le avec Python :```bash
python3 cve_2026_31694_scanner.py

Aucune installation de package Python n'est requise.


Utilisation

Évaluation standard```bash

python3 cve_2026_31694_scanner.py

root@kitploit:~
### 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

root@kitploit:~
### Rapport Markdown```bash
python3 cve_2026_31694_scanner.py --format markdown

Enregistrer un rapport```bash

python3 cve_2026_31694_scanner.py
--format markdown
--output cve-2026-31694-report.md

root@kitploit:~
### Afficher uniquement les conseils de remédiation```bash
python3 cve_2026_31694_scanner.py --mitigation-only

Ignorer les requêtes de mise à jour de paquets```bash

python3 cve_2026_31694_scanner.py --no-package-query

root@kitploit:~
### 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.


Options de ligne de commande

OptionDescription
--format textSortie terminal lisible par un humain. C’est la valeur par défaut.
--format jsonRapport structuré complet au format JSON.
--format markdownRapport technique au format Markdown.
--jsonAlias de --format json.
--output PATHÉcrire le rapport dans un fichier au lieu de la sortie standard.
--mitigation-onlyNe renvoyer que la section de mitigation générée.
--no-package-queryIgnorer les requêtes de mise à jour du gestionnaire de paquets local.
--no-exit-statusToujours quitter avec le statut 0 après avoir généré la sortie.
-h, --helpAfficher l’aide de la commande.

Flux d’évaluation

Le scanner évalue les indices dans l’ordre suivant.

1. Détection du système d’exploitation et de l’environnement

Le scanner détermine :

  • si le système d’exploitation est Linux ;
  • l’identifiant et la famille de distribution ;
  • le gestionnaire de paquets ;
  • si le processus s’exécute sur :
    • un hôte normal ;
    • une machine virtuelle ;
    • un conteneur ;
    • WSL.

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.

2. Configuration FUSE

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

root@kitploit:~
Il évalue :```text
CONFIG_FUSE_FS=y
CONFIG_FUSE_FS=m
CONFIG_FUSE_FS is not set

Interprétation :

ValeurSignification
yFUSE est intégré au noyau. Le blocage de modules ne peut pas le désactiver.
mFUSE est disponible en tant que module chargeable.
nFUSE est désactivé dans la configuration détectée.
unknownAucune source de configuration lisible n'était disponible.

3. Exposition à l'exécution

Le scanner vérifie :```text /proc/filesystems /dev/fuse PATH for fusermount3 or fusermount /proc/self/mountinfo

root@kitploit:~
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.

6. Preuves du paquet du noyau

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

root@kitploit:~
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.

9. État de redémarrage

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.

10. Génération des verdicts

La priorité des preuves est approximativement la suivante :

  1. preuve directe de correctif dans la source ou le paquet ;
  2. FUSE désactivé ;
  3. géométrie de page documentée non exposée ;
  4. base amont corrigée ou non affectée ;
  5. version amont potentiellement affectée ;
  6. preuve non concluante.

Verdicts

PATCHED

Des preuves locales directes indiquent que la correction existe.

Exemples :

  • garde de source correspondante dans le code source du noyau concerné ;
  • les métadonnées du paquet de noyau local référencent la CVE ou le correctif.

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_EXPOSED

La 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_GEOMETRY

La 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_SAFE

La 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_VULNERABLE

Le 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.

INCONCLUSIVE

Le scanner n'a pas pu obtenir suffisamment de preuves.

Causes courantes :

  • configuration du noyau indisponible ;
  • chaîne de version non reconnue ;
  • source ou métadonnées de paquet inaccessibles ;
  • distribution non prise en charge ;
  • exécution dans un conteneur ;
  • noyau géré par l'hôte ;
  • statut de rétroportage du fournisseur indisponible localement.

NOT_APPLICABLE

Le système d'exploitation actuel n'est pas Linux.


Codes de sortie

CodeSignification
0Preuve de correctif, base amont sûre, ou absence d'exposition documentée
1Potentiellement vulnérable
2Non concluant
3Erreur 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

root@kitploit:~
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

root@kitploit:~
### 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.

Famille Fedora et RHEL

Séquence typique générée :```bash sudo dnf upgrade --refresh sudo systemctl reboot

root@kitploit:~
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.

Alpine Linux

Séquence typique générée :```bash doas apk update doas apk upgrade doas reboot

root@kitploit:~
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.

Void Linux

Séquence générée typique :```bash sudo xbps-install -Suv sudo reboot

root@kitploit:~
### NixOS

Séquence générée typique :```bash
sudo nixos-rebuild switch --upgrade
sudo systemctl reboot

Contrôles temporaires

Lorsque le correctif ne peut pas être appliqué immédiatement, le scanner peut suggérer des contrôles temporaires.

Les recommandations possibles incluent :

  • décharger le module FUSE lorsqu'aucun montage FUSE n'est actif ;
  • mettre sur liste noire un module FUSE chargeable ;
  • restreindre temporairement /dev/fuse ;
  • supprimer /dev/fuse des conteneurs non fiables ;
  • supprimer CAP_SYS_ADMIN ;
  • éviter les conteneurs --privileged.

Ces contrôles peuvent perturber des charges de travail légitimes, notamment :

  • SSHFS ;
  • AppImage ;
  • les montages rclone ;
  • les portails de bureau ;
  • les outils de conteneurs rootless ;
  • les systèmes de fichiers en espace utilisateur.

Les restrictions temporaires ne doivent pas remplacer l'installation d'un noyau corrigé par le fournisseur.


Comportement des conteneurs et de WSL

Conteneurs

Les conteneurs partagent normalement le noyau de l'hôte.

Un scanner exécuté à l'intérieur d'un conteneur peut détecter :

  • la version du noyau de l'hôte ;
  • les métadonnées de paquets du système de fichiers du conteneur ;
  • l'absence de paquet de noyau hôte correspondant ;
  • l'absence de /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

root@kitploit:~
La configuration Compose équivalente devrait également être examinée:```yaml
devices:
  - /dev/fuse:/dev/fuse

cap_add:
  - SYS_ADMIN

privileged: true

WSL

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

root@kitploit:~
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 :

  • résumé de l'hôte ;
  • vérifications des preuves ;
  • mises à jour de paquets lorsqu'elles sont visibles ;
  • verdict et confiance ;
  • guide d'atténuation ;
  • commandes de vérification ;
  • mises en garde ;
  • notes ;
  • code de sortie.

JSON

La sortie JSON contient le rapport complet basé sur les dataclasses.```bash python3 cve_2026_31694_scanner.py
--format json
--output report.json

root@kitploit:~
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"])
'

Markdown

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

root@kitploit:~
### 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.


Automatisation et intégration

Shell gate```bash

#!/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"

root@kitploit:~
### 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

Exemple Cron```cron

30 3 * * * /usr/bin/python3 /opt/security/cve_2026_31694_scanner.py --format json --output /var/log/cve-2026-31694.json --no-exit-status

root@kitploit:~
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.

Utilisation en flotte

Pour l'évaluation d'une flotte :

  1. placez le script sur chaque hôte Linux ;
  2. exécutez-le localement ;
  3. collectez la sortie JSON ;
  4. regroupez les résultats par :
    • distribution ;
    • version du noyau ;
    • verdict ;
    • confiance ;
    • type d'environnement ;
  5. vérifiez les hôtes potentiellement affectés par rapport aux avis des fournisseurs ;
  6. appliquez les correctifs et redémarrez ;
  7. effectuez une nouvelle analyse.

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.


Recommandations opérationnelles

Réponse recommandée en cas de POTENTIALLY_VULNERABLE

  1. Identifiez le noyau exact en cours d'exécution : ```bash uname -r

    root@kitploit:~
  2. Identifiez la distribution et la version installées : ```bash cat /etc/os-release

    root@kitploit:~
  3. Consultez l'état CVE du fournisseur de la distribution pour le paquet exact du noyau et sa variante.

  4. Actualisez les métadonnées des paquets.

  5. Installez le paquet du noyau corrigé pris en charge par le fournisseur.

  6. Redémarrez l'hôte.

  7. Vérifiez que le noyau en cours d'exécution a changé : ```bash uname -r

    root@kitploit:~
  8. Relancez le scanner.

Réponse recommandée à INCONCLUSIVE

Recueillez 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

root@kitploit:~
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

root@kitploit:~
### 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.


Limites

Aucune confirmation d'exploitation

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.

Rétroportages des fournisseurs

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.

Inadéquation de l'arborescence source

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

root@kitploit:~
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 :

  • exécution dans un conteneur ;
  • l'image du noyau n'est pas présente dans le système de fichiers actuel ;
  • noyau personnalisé ;
  • base de données des paquets indisponible ;
  • noyau fourni par la plateforme ;
  • permissions insuffisantes.

Vérifiez :```bash uname -r ls -l /boot ls -l /lib/modules/"$(uname -r)"

root@kitploit:~
### 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

root@kitploit:~
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.

La sortie du scanner est incomplète sous le sandboxing systemd

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

root@kitploit:~
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

root@kitploit:~
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/

References

  • CVE record: https://www.cve.org/CVERecord?id=CVE-2026-31694
  • NVD record: https://nvd.nist.gov/vuln/detail/CVE-2026-31694
  • Linux stable patch reference: https://git.kernel.org/stable/c/51a8de6c50bf947c8f534cd73da4c8f0a13e7bed
  • Ubuntu status: https://ubuntu.com/security/CVE-2026-31694
  • Debian security tracker: https://security-tracker.debian.org/tracker/CVE-2026-31694
  • Red Hat CVE database: https://access.redhat.com/security/cve/CVE-2026-31694
  • SUSE CVE database: https://www.suse.com/security/cve/CVE-2026-31694.html

Auteur

Aung Myat Thu [w01f]

Télécharger l’outil