
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
Platzieren Sie den Scanner in einem Arbeitsverzeichnis:```bash
chmod +x cve_2026_31694_scanner.py
Führen Sie es direkt aus:```bash ./cve_2026_31694_scanner.py
Oder rufe es mit Python auf:```bash
python3 cve_2026_31694_scanner.py
Es ist keine Installation von Python-Paketen erforderlich.
python3 cve_2026_31694_scanner.py
### JSON-Ausgabe```bash
python3 cve_2026_31694_scanner.py --format json
Der untenstehende Kompatibilitäts-Alias erzeugt dasselbe Format:```bash python3 cve_2026_31694_scanner.py --json
### Markdown-Bericht```bash
python3 cve_2026_31694_scanner.py --format markdown
python3 cve_2026_31694_scanner.py
--format markdown
--output cve-2026-31694-report.md
### Nur Behebungsanleitungen ausgeben```bash
python3 cve_2026_31694_scanner.py --mitigation-only
python3 cve_2026_31694_scanner.py --no-package-query
### Nach der Meldung immer Erfolg zurückgeben```bash
python3 cve_2026_31694_scanner.py --no-exit-status
Diese Option ist nützlich, wenn Berichte gesammelt werden sollen, ohne dass der Schwachstellenstatus einen Orchestrierungsjob fehlschlagen lässt.
Der Scanner wertet Beweise in der folgenden Reihenfolge aus.
Der Scanner ermittelt:
Die Umgebungserkennung ändert die Interpretation von Paket- und Neustartdaten.
Beispielsweise kann ein Container den Host-Kernel sehen, aber normalerweise nicht das Host-Kernel-Paket aus dem Container-Dateisystem ermitteln.
Der Scanner sucht nach einer Konfiguration des laufenden Kernels in:```text /proc/config.gz /boot/config-$(uname -r) /lib/modules/$(uname -r)/build/.config /usr/lib/modules/$(uname -r)/build/.config
Es bewertet:```text
CONFIG_FUSE_FS=y
CONFIG_FUSE_FS=m
CONFIG_FUSE_FS is not set
Interpretation:
| Wert | Bedeutung |
|---|---|
y | FUSE ist fest in den Kernel integriert. Eine Modul-Blacklist kann es nicht deaktivieren. |
m | FUSE ist als ladbares Modul verfügbar. |
Der Scanner prüft:```text /proc/filesystems /dev/fuse PATH for fusermount3 or fusermount /proc/self/mountinfo
Das Fehlen von `/dev/fuse` oder `fusermount3` verringert die unmittelbare Nutzbarkeit aus der aktuellen Umgebung, beweist jedoch nicht, dass der Kernel gepatcht ist.
### 4. Seitengrößen-Geometrie
Der dokumentierte übergroße Datensatz ist `4120` Bytes.
Wenn die Host-Seitengröße mindestens `4120` Bytes beträgt, überschreitet der dokumentierte Datensatz keine Seitengrenze. Der Scanner kann melden, dass das System durch die dokumentierte Seitengeometrie nicht exponiert ist.
Diese Schlussfolgerung gilt nur für den dokumentierten Datensatz und das bewertete Implementierungsverhalten. Sie ist keine allgemeine Aussage, dass alle FUSE-Speichersicherheitsprobleme auf Systemen mit größeren Seiten unmöglich sind.
### 5. Inspektion des installierten Quellcodes
Wenn installierter Quellcode verfügbar ist, sucht der Scanner:```text
fs/fuse/readdir.c
Es sucht nach der betroffenen Funktion und einer Schutzbedingung, die einem Ablehnen von reclen > PAGE_SIZE entspricht.
Direkte Quellcode-Evidenz hat eine höhere Zuverlässigkeit als ein Versionsvergleich.
Die untersuchte Quelle muss mit dem laufenden Kernel übereinstimmen, damit das Ergebnis aussagekräftig ist. Quellbäume der Distribution unter /usr/src können einen anderen installierten Kernel darstellen.
Der Scanner versucht, das laufende Kernel-Image mithilfe der erkannten Paketdatenbank der Distribution dem zugehörigen Paket zuzuordnen.
Mögliche Mechanismen umfassen:```text dpkg-query -S rpm -qf pacman -Qo apk info -W
Wenn ein Paket identifiziert wird, können lokale Changelog-Metadaten auf die CVE-ID oder den Patch-Titel hin untersucht werden.
Eine fehlende Übereinstimmung im Changelog ist kein Beweis für eine Schwachstelle. Hersteller nehmen nicht immer einzelne CVE-Referenzen in lokal installierte Changelogs auf.
### 7. Upstream-Versionsvergleich
Die geparste Kernel-Version wird mit der festen Baseline-Tabelle des Scanners verglichen.
Der Versionsvergleich liefert ein heuristisches Ergebnis, weil:
- Hersteller-Kernel können Backports enthalten;
- Release-Revisionen von Kernel-Paketen sind distributionsspezifisch;
- Cloud-, Echtzeit-, gehärtete und Hardware-Enablement-Kernel können separate Patch-Zeitpläne haben;
- eine Versionszeichenfolge kann einen herstellergepflegten Zweig darstellen und keine unveränderte Upstream-Version.
### 8. Paketupdate-Metadaten
Wo unterstützt, führt der Scanner schreibgeschützte Abfragen gegen vorhandene lokale Metadaten aus.
Er aktualisiert keine Repositories.
Beispiele:```text
apt list --upgradable
pacman -Qu
dnf --cacheonly --quiet check-upgrade
zypper --no-refresh list-patches --all --cve=CVE-2026-31694
apk version -l <
Ein Ergebnis, das kein verfügbares Update anzeigt, ist nur so aktuell wie die zwischengespeicherten Repository-Metadaten.
Auf einem normalen Host oder einer virtuellen Maschine vergleicht der Scanner den laufenden Kernel mit den erkannten installierten Kernen und prüft die von Debian-basierten Systemen verwendete Neustartmarkierung.
In einem Container oder einer WSL-Gastumgebung wird diese Prüfung als hostgesteuert markiert, anstatt Gastdateien mit dem Host-Kernel zu vergleichen.
Die Belegpriorität ist ungefähr:
PATCHEDDirekte lokale Belege zeigen, dass die Korrektur vorhanden ist.
Beispiele:
Die Konfidenz ist normalerweise hoch, aber die Übereinstimmung zwischen Quelle und laufendem Kernel sollte dennoch überprüft werden.
NOT_EXPOSEDDie erkannte Konfiguration des laufenden Kernels hat FUSE deaktiviert.
Dies ist ein Expositionsergebnis, kein Beleg dafür, dass der Kernel-Quellcode selbst die Korrektur enthält.
NOT_EXPOSED_BY_DOCUMENTED_PAGE_GEOMETRYDie Speicherseitengröße ist groß genug, um den dokumentierten 4120-Byte-Datensatz zu enthalten, ohne eine Seitengrenze zu überschreiten.
Dieses Urteil ist auf die dokumentierte Schwachstellen-Geometrie beschränkt.
UPSTREAM_BASELINE_SAFEDie geparste laufende Version erfüllt eine bekannte behobene Upstream-Basislinie oder geht der betroffenen Implementierung voraus.
Die Überprüfung der Herstellerpakete bleibt vorzuziehen.
POTENTIALLY_VULNERABLEDer geparste Kernel liegt innerhalb eines betroffenen Upstream-Bereichs, und es wurden keine direkten lokalen Patch-Belege gefunden.
Dieses Ergebnis erfordert die Prüfung des Sicherheitshinweises des Betriebssystemherstellers, bevor der installierte Kernel als verwundbar eingestuft wird.
INCONCLUSIVEDer Scanner konnte nicht genügend Belege beschaffen.
Häufige Ursachen:
NOT_APPLICABLEDas aktuelle Betriebssystem ist nicht Linux.
| Code | Bedeutung |
|---|---|
0 | Patch-Belege, sichere Upstream-Basislinie oder keine dokumentierte Exposition |
Beispiel:```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
Wenn `--no-exit-status` angegeben ist, gibt der Scanner nach der Erstellung des Berichts `0` zurück.
---
## Erkennungsquellen
Der Scanner verwendet die folgenden lokalen Quellen, sofern verfügbar:
| Quelle | Information |
|---|---|
| `/etc/os-release` | Distributionsidentität |
| `/usr/lib/os-release` | Fallback für Distributionsidentität |
| `/proc/version` | Kernel- und WSL-Indikatoren |
| `/proc/config.gz` | Konfiguration des laufenden Kernels |
| `/boot/config-*` | Kernelkonfiguration |
| `/lib/modules/*/build/.config` | Kernel-Build-Konfiguration |
| `/proc/filesystems` | Registrierte Dateisysteme |
| `/proc/self/mountinfo` | Aktive FUSE-Mounts |
| `/proc/1/cgroup` | Container-Indikatoren |
| `/dev/fuse` | Geräteverfügbarkeit und -berechtigungen |
| `/usr/src/*/fs/fuse/readdir.c` | Optionale Hinweise auf Patches auf Quelltextebene |
| `/lib/modules` | Inventar installierter Kernel |
| `/usr/lib/modules` | Inventar installierter Kernel |
| `/boot/vmlinuz-*` | Inventar installierter Kernel |
| `/var/run/reboot-required` | Neustart-Indikator der Debian-Familie |
| Paketdatenbank | Eigentümerschaft von Kernelpaketen |
| Paket-Changelogs | Optionale lokale Backport-Hinweise |
| Paket-Cache | Optionale Hinweise auf Update-Verfügbarkeit |
---
## Distributionsunterstützung
### Erkennung der Distributionsfamilie
| Familie | Erkannte Distributionen |
|---|---|
| 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 |
| Unbekannt | Allgemeine Linux-Hinweise |
### Unterstützung für lokale Update-Abfragen
| Familie | Schreibgeschützte Update-Abfrage |
|---|---|
| Debian/Ubuntu | `apt list --upgradable` |
| Arch | `pacman -Qu` |
| Fedora/RHEL | zwischengespeichertes `dnf check-upgrade` |
| SUSE | zwischengespeicherte CVE-Patchliste mit `zypper` |
| Alpine | `apk version -l <` |
| Gentoo | Nicht implementiert |
| Void | Nicht implementiert |
| NixOS | Nicht implementiert |
| Unbekannt | Nicht implementiert |
Das Fehlen eines lokal sichtbaren Updates bedeutet nicht, dass ein korrigiertes Paket nicht verfügbar ist. Die Repository-Metadaten können veraltet sein oder die Distribution hat möglicherweise noch kein Paket veröffentlicht.
---
## Generierung von Gegenmaßnahmen
Die Empfehlungen für Gegenmaßnahmen werden ausgewählt anhand von:
- Distributionsfamilie;
- Paketmanager;
- Container- oder WSL-Status;
- FUSE-Konfiguration;
- Verfügbarkeit von `/dev/fuse`;
- aktive FUSE-Mounts;
- Neustartstatus;
- endgültigem Urteil.
Der Scanner gibt Befehle aus, führt sie jedoch niemals aus.
### Debian- und Ubuntu-Familie
Typische generierte Abfolge:```bash
sudo apt update
sudo apt full-upgrade
sudo reboot
Überprüfen Sie die vorgeschlagene Pakettransaktion, bevor Sie sie genehmigen.
Nach dem Neustart:```bash uname -r python3 cve_2026_31694_scanner.py
### Arch and Manjaro Familie
Typische generierte Sequenz:```bash
sudo pacman -Syu
sudo reboot
Arch-basierte Systeme erfordern ein vollständiges System-Upgrade. Aktualisiere die Paketdatenbanken nicht mit pacman -Sy und installiere dann ausgewählte Pakete, ohne das Upgrade abzuschließen.
Typische generierte Sequenz:```bash sudo dnf upgrade --refresh sudo systemctl reboot
Systems using `yum` may receive the corresponding `yum` command.
### SUSE-Familie
Typische generierte Sequenz:```bash
sudo zypper refresh
sudo zypper patch --cve=CVE-2026-31694
sudo zypper patch --category security
sudo systemctl reboot
Der CVE-spezifische Patch ist möglicherweise nicht als separate Transaktion für jedes SUSE-Produkt oder jeden Repository-Zustand verfügbar.
Typische generierte Sequenz:```bash doas apk update doas apk upgrade doas reboot
Das Berechtigungs-Präfix hängt davon ab, ob der Scanner `sudo`, `doas` oder eine bereits laufende Root-Sitzung findet.
### Gentoo Linux
Typische generierte Sequenz:```bash
sudo emaint sync -a
sudo emerge --ask --update --deep --newuse @world
Kernel-Installation und -Aktivierung hängen vom konfigurierten Gentoo-Kernel-Workflow des Hosts ab.
Typische generierte Sequenz:```bash sudo xbps-install -Suv sudo reboot
### NixOS
Typische generierte Sequenz:```bash
sudo nixos-rebuild switch --upgrade
sudo systemctl reboot
Wenn ein Patch nicht sofort durchgeführt werden kann, schlägt der Scanner möglicherweise temporäre Kontrollen vor.
Mögliche Empfehlungen sind:
/dev/fuse vorübergehend einschränken;/dev/fuse aus nicht vertrauenswürdigen Containern entfernen;CAP_SYS_ADMIN entfernen;--privileged-Container vermeiden.Diese Kontrollen können legitime Arbeitslasten beeinträchtigen, darunter:
Temporäre Einschränkungen dürfen die Installation eines vom Hersteller gepatchten Kernels nicht ersetzen.
Container teilen normalerweise den Host-Kernel.
Ein innerhalb eines Containers ausgeführter Scanner kann Folgendes erkennen:
/dev/fuse, selbst wenn FUSE auf dem Host aktiviert ist.Aus diesem Grund kennzeichnet der Scanner hostabhängige Befunde als nicht autoritativ und verweist die Behebung an den Container-Host.
Führen Sie den Scanner direkt auf dem Host aus, um eine autoritative Paket- und Neustartbewertung zu erhalten.
Die Anleitung zur Container-Härtung umfasst das Entfernen von:```text --device /dev/fuse --cap-add SYS_ADMIN --privileged
Die entsprechende Compose-Konfiguration sollte ebenfalls überprüft werden:```yaml
devices:
- /dev/fuse:/dev/fuse
cap_add:
- SYS_ADMIN
privileged: true
Der WSL-Kernel wird von Windows verwaltet und nicht vom Kernelpaket der Linux-Gastdistribution.
Typische generierte Anleitung:```powershell wsl --update wsl --shutdown
Führen Sie diese Befehle in Windows PowerShell aus, starten Sie die Distribution neu und führen Sie den Scanner erneut aus.
Das ausschließliche Aktualisieren von Gast-Paketen mit `apt`, `dnf` oder einem anderen Linux-Paketmanager ersetzt nicht den WSL-Kernel.
### Virtuelle Maschinen
Eine virtuelle Maschine besitzt normalerweise ihren eigenen Gast-Kernel. Verteiler- bzw. distributionsspezifische Paket- und Neustart-Prüfungen bleiben innerhalb des Gastes anwendbar.
Der Hypervisor-Host sollte separat bewertet werden.
---
## Berichtsformate
### Text
Die Textausgabe ist für die direkte Verwendung im Terminal gedacht.```bash
python3 cve_2026_31694_scanner.py --format text
Der Bericht enthält:
Die JSON-Ausgabe enthält den vollständigen dataclass-basierten Bericht.```bash
python3 cve_2026_31694_scanner.py
--format json
--output report.json
Beispielfeldauswahl:```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"])
'
Die Markdown-Ausgabe eignet sich für technische Aufzeichnungen, Tickets und Bewertungsberichte.```bash
python3 cve_2026_31694_scanner.py
--format markdown
--output report.md
### Nur-Gegenmaßnahmen-Bericht```bash
python3 cve_2026_31694_scanner.py \
--mitigation-only \
--format markdown
Bei JSON-Format gibt der Mitigation-Only-Modus das Mitigationsobjekt anstelle des vollständigen Host-Berichts zurück.
#!/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"
### Berichtserfassung, ohne dass ein Job fehlschlägt```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
Dies überschreibt dieselbe Berichtsdatei. Verwenden Sie ein Wrapper-Skript, wenn historische Berichte benötigt werden.
### Beispiel für einen Systemd-Dienst```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
Der Scanner benötigt Lesezugriff auf Kernel- und Paketmetadaten. Zusätzliche Sandbox-Einschränkungen können Beweise verbergen und einen nicht eindeutigen Bericht erzeugen.
Für die Flottenbewertung:
Behandeln Sie einen Scan aus einem Container-Image-Build nicht als Bewertung des Host-Kernels.
POTENTIALLY_VULNERABLEErmitteln Sie den genauen laufenden Kernel: ```bash uname -r
Ermitteln Sie die installierte Distribution und Version: ```bash cat /etc/os-release
Überprüfen Sie den CVE-Status des Distributionsanbieters für das exakte Kernelpaket und den Flavor.
Aktualisieren Sie die Paketmetadaten.
Installieren Sie das vom Distributionsanbieter unterstützte, korrigierte Kernelpaket.
Starten Sie den Host neu.
Bestätigen Sie, dass sich der laufende Kernel geändert hat: ```bash uname -r
Führen Sie den Scanner erneut aus.
INCONCLUSIVESammeln Sie fehlende Beweise:```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
Überprüfen Sie dann das exakte Kernel-Paket anhand des Sicherheitshinweises des Herstellers.
### Neustart-Überprüfung
Die Installation eines korrigierten Kernel-Pakets ändert nicht den aktuell ausgeführten Kernel.
Überprüfen Sie sowohl den installierten als auch den laufenden Kernel und starten Sie dann bei Bedarf neu.
Beispiele:```bash
uname -r
ls -1 /lib/modules
Debian-basierte Systeme bieten möglicherweise auch:```bash test -e /var/run/reboot-required && cat /var/run/reboot-required
### FUSE-Abhängigkeitsprüfung
Bevor Sie FUSE vorübergehend entladen oder blockieren:```bash
findmnt -t fuse,fuseblk,fusectl
lsmod | grep '^fuse'
ps aux | grep -E '[f]usermount|[s]shfs|[r]clone'
Entladen Sie das Modul nicht, solange aktive FUSE-Dateisysteme gemountet sind.
Der Scanner löst den verwundbaren Codepfad absichtlich nicht aus.
Ein POTENTIALLY_VULNERABLE-Befund bedeutet, dass die verfügbaren passiven Hinweise mit einer Exposition vereinbar sind. Er ist kein Beweis dafür, dass die Ausnutzung erfolgreich sein wird.
Distributionskernel portieren häufig Sicherheitskorrekturen zurück.
Eine älter aussehende Upstream-Version kann bereits gepatcht sein.
Für distributionsverwaltete Kernel sind der Sicherheitshinweis des Anbieters und die genaue Paketversion maßgeblich.
Ein unter /usr/src gefundener Quellbaum muss nicht mit dem laufenden Kernel übereinstimmen.
Die Patch-Hinweise im Quellcode sollten validiert werden gegen:```bash uname -r
and the source package or build directory used for that exact kernel.
### Stale package metadata
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.
### Containers
A container sees the host kernel but normally has different package metadata.
Run the scanner on the host.
### WSL
Linux guest package state does not determine WSL kernel patch status.
Update WSL from Windows.
### Custom kernels
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.
### Live patching
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.
### Secure boot and bootloader state
The scanner does not verify:
- which kernel the bootloader will select next;
- whether Secure Boot accepts the installed image;
- whether a new initramfs was generated correctly;
- whether the machine successfully rebooted into the expected kernel.
### Distributed filesystems and namespaces
The scanner assesses the current process namespace.
Mounts or device access hidden by namespaces may not appear in the report.
---
## Troubleshooting
### `Kernel configuration could not be determined`
Check 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
Einige Distributionen stellen die laufende Konfiguration nicht über /proc/config.gz bereit.
Laufendes Kernel-Paket konnte nicht identifiziert werdenMögliche Ursachen:
Prüfen:```bash uname -r ls -l /boot ls -l /lib/modules/"$(uname -r)"
### Paketupdate-Abfrage meldet kein Update
Aktualisieren Sie die Paketmetadaten mithilfe des generierten Mitigationsleitfadens und führen Sie den Scanner erneut aus.
Der passive Scanner aktualisiert Repositorys nicht automatisch.
### `POTENTIALLY_VULNERABLE` nach der Installation von Updates
Bestätigen Sie, dass der neue Kernel läuft:```bash
uname -r
Vergleichen Sie es mit den installierten Kernel-Verzeichnissen:```bash ls -1 /lib/modules
Ein Neustart kann weiterhin erforderlich sein.
Überprüfen Sie außerdem das Hersteller-Bulletin, da ein bereitgestellter Backport möglicherweise nicht mit der Upstream-Versionsbasis übereinstimmt.
### FUSE ist in den Kernel integriert
Wenn der Bericht Folgendes anzeigt:```text
CONFIG_FUSE_FS=y
modprobe -r fuse und das Blacklisting von Modulen können FUSE nicht deaktivieren.
Verwende einen gepatchten Kernel oder einen Kernel, der ohne FUSE-Unterstützung gebaut wurde.
Der Scanner benötigt möglicherweise Lesezugriff auf:```text /proc /boot /lib/modules /usr/lib/modules /usr/src package database directories package cache directories
Passen Sie die Service-Härtung an, damit diese Pfade lesbar bleiben.
---
## Dateilayout
Empfohlenes Projektlayout:```text
cve-2026-31694-scanner/
├── README.md
└── cve_2026_31694_scanner.py
Empfohlenes installiertes Layout:```text /opt/security/cve-2026-31694/ ├── README.md └── cve_2026_31694_scanner.py
Beispiel:```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]
| Option | Beschreibung |
|---|
--format text | Für Menschen lesbare Terminalausgabe. Dies ist die Standardeinstellung. |
--format json | Vollständiger strukturierter Bericht als JSON. |
--format markdown | Technischer Markdown-Bericht. |
--json | Alias für --format json. |
--output PATH | Schreibt den Bericht in eine Datei statt in die Standardausgabe. |
--mitigation-only | Gibt nur den erzeugten Mitigationsabschnitt zurück. |
--no-package-query | Überspringt lokale Paketmanager-Update-Abfragen. |
--no-exit-status | Beendet nach der Erzeugung der Ausgabe immer mit Status 0. |
-h, --help | Zeigt die Hilfe zum Befehl an. |
n | FUSE ist in der erkannten Konfiguration deaktiviert. |
| unbekannt | Es war keine lesbare Konfigurationsquelle verfügbar. |
1 |
| Potenziell verwundbar |
2 | Nicht eindeutig |
3 | Scanner- oder Berichtserstellungsfehler |