
Passiver Linux-Host-Schwachstellenscanner für CVE-2026-31694: prüft den laufenden Kernel, die FUSE-Konfiguration, Paket-Metadaten und Patch-Nachweise und erstellt anschließend maßgeschneiderte Empfehlungen zur Schadensbegrenzung.
Ein passives Linux-Host-Bewertungstool für CVE-2026-31694, einen FUSE-readdir-Cache-Out-of-Bounds-Write im Linux-Kernel.
Der Scanner bewertet den laufenden Kernel, die FUSE-Exposition, lokale Paketmetadaten, Kernel-Quellbelege, die Ausführungsumgebung und die Betriebssystemfamilie. Wenn der Host möglicherweise betroffen ist, erstellt er einen auf die erkannte Distribution zugeschnittenen Minderungsleitfaden.
Autor: Aung Myat Thu [w01f]
cve_2026_31694_scanner.py ist ein lokales, nicht-exploitativer Schwachstellenbewertungsdienstprogramm.
Es bestätigt die Schwachstelle nicht durch Auslösen des betroffenen FUSE-Codepfads. Stattdessen kombiniert es mehrere passive Indikatoren:
CONFIG_FUSE_FS;/dev/fuse und Zugriff des aktuellen Benutzers;Das Ergebnis ist eine Expositionsbewertung, kein auf Exploits basierender Nachweis.
CVE-2026-31694 betrifft den FUSE-readdir-Cache des Linux-Kernels.
Die anfällige Logik berechnet die serialisierte Größe eines Verzeichniseintrags aus einer servergesteuerten Namenslänge und kopiert den Datensatz in eine einzelne Page-Cache-Seite. Ein Verzeichniseintrag mit einer Namenslänge von 4095 kann eine serialisierte Größe von 4120 Bytes erzeugen.
Auf einem System mit 4096-Byte-Seiten überschreitet dieser Datensatz eine Seite um 24 Bytes.
Die Korrektur stromaufwärts lehnt Verzeichnisdatensätze ab, die nicht in eine einzelne Seite passen, bevor der Cache-Kopievorgang erfolgt.
fs/fuse/readdir.c fuse_add_dirent_to_cache()
### Scanner-Basisdaten
Der Scanner enthält die folgenden festgelegten stabilen Upstream-Basislinien:
| Kernel-Serie | Feste Basislinie |
|---|---:|
| 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 oder neuer |
Diese Versionen werden als eine Bewertungsgrundlage verwendet. Sie werden nicht als einzige Quelle der Wahrheit behandelt, da Distributionsanbieter die Korrektur zurückportieren können, während sie eine ältere Upstream-Versionsnummer beibehalten.
---
## Sicherheitsmodell
Der Scanner wurde entwickelt, um den angreifbaren Vorgang nicht auszulösen.
### Was der Scanner nicht tut
- mountet kein FUSE-Dateisystem;
- öffnet `/dev/fuse` nicht und kommuniziert nicht damit;
- startet keinen FUSE-Server;
- übermittelt keine präparierten Verzeichnisdatensätze;
- reserviert keinen Speicher für Page-Placement-Tests;
- präpariert keine Kernel-Allokatoren;
- ändert `/etc/passwd` nicht;
- ändert die Kernelkonfiguration nicht;
- lädt oder entlädt keine Kernelmodule;
- ändert die Berechtigungen von `/dev/fuse` nicht;
- installiert oder entfernt keine Pakete;
- startet das System nicht neu;
- unternimmt keinen Privilegienerweiterungsversuch.
### Was der Scanner tun darf
- Dateien unter `/proc`, `/boot`, `/lib/modules`, `/usr/lib/modules`, `/usr/src` und Paketmetadaten-Verzeichnissen lesen;
- begrenzte, schreibgeschützte Paketabfragen ausführen;
- aktive Mounts und Dateisystemregistrierung untersuchen;
- einen Bericht nur dann schreiben, wenn `--output` explizit angegeben wird;
- Mitigationsbefehle zur Prüfung durch den Administrator ausgeben.
Mitigationsbefehle sind Dokumentationsausgabe. Sie werden niemals automatisch ausgeführt.
---
## Funktionen
### Host- und Kernel-Identifikation
- Liest `platform.release()` und parst die Kernel-Version im Upstream-Stil.
- Liest `/etc/os-release` oder `/usr/lib/os-release`.
- Erkennt CPU-Architektur und Speicherseitengröße.
- Ermittelt, ob der gescannte Kernel zum aktuellen Betriebssystem gehört.
### Bewertung der FUSE-Exposition
- Liest `CONFIG_FUSE_FS` aus verfügbaren Kernel-Konfigurationsquellen.
- Erkennt integrierte FUSE-Unterstützung und Konfigurationen für ladbare Module.
- Liest `/proc/filesystems`.
- Überprüft die Metadaten von `/dev/fuse` und den Lese-/Schreibzugriff des aktuellen Benutzers.
- Lokalisiert `fusermount3` oder `fusermount`.
- Analysiert aktive FUSE-Mounts aus `/proc/self/mountinfo`.
### Patch-Nachweise
- Vergleicht die laufende Version mit den festgelegten Upstream-Basislinien.
- Durchsucht den installierten Kernelquelltext nach dem Schutz für übergroße Datensätze.
- Überprüft lokale RPM- oder Debian-Paket-Changelogs auf:
- `CVE-2026-31694`;
- den Titel des Upstream-Patches.
### Paket- und Neustartstatus
- Versucht, das Paket zu ermitteln, das den laufenden Kernel besitzt.
- Fragt lokale Paketmanager-Metadaten ab, ohne Repositorien zu aktualisieren.
- Erkennt einen neueren installierten Kernel, wenn die Host-Umgebung maßgeblich ist.
- Prüft `/var/run/reboot-required`, sofern zutreffend.
### Umgebungserkennung
- Erkennt Docker-kompatible Container.
- Erkennt Podman-kompatible Container.
- Erkennt containerbezogene Cgroups.
- Erkennt WSL.
- Erkennt virtuelle Maschinen mithilfe von `systemd-detect-virt`, sofern verfügbar.
### Berichterstattung
- Für Menschen lesbare Textausgabe.
- Maschinenlesbare JSON-Ausgabe.
- Markdown-Berichtsausgabe.
- Ausgabe nur mit Mitigationsmaßnahmen.
- Optionale Dateiausgabe.
- Aussagekräftige Prozess-Exitcodes.
---
## Anforderungen
### Erforderlich
- Linux für die Kernel-Bewertung.
- Python 3.9 oder neuer.
- Lesezugriff auf normale Systemmetadaten.
Der Scanner verwendet nur die Python-Standardbibliothek.
### Optionale Befehle
Zusätzliche Nachweise werden gesammelt, wenn die folgenden Werkzeuge vorhanden sind:
| Tool | Zweck |
|---|---|
| `dpkg-query` | Ermittlung des Kernel-Paketbesitzes und Changelog-Erkennung für Debian/Ubuntu |
| `rpm` | Paketbesitz- und Changelog-Prüfung für Fedora/RHEL/SUSE |
| `pacman` | Kernelpaket- und Update-Metadaten für Arch-basierte Systeme |
| `apt` | Abfrage gecachter Updates für Debian-basierte Systeme |
| `dnf` oder `dnf5` | Abfrage gecachter Updates für Fedora/RHEL |
| `zypper` | Abfrage gecachter CVE-Patches für SUSE |
| `apk` | Paket-/Update-Abfrage für Alpine |
| `systemd-detect-virt` | Erkennung von Containern und virtuellen Maschinen |
Für den normalen Scan sind keine Root-Rechte erforderlich.
Einige Nachweise können für ein unprivilegiertes Konto aufgrund systemspezifischer Dateiberechtigungen nicht verfügbar sein.
---
## Installation