Security

CIFSwitch: Linux cifs.spnego LPE prüfen, mitigieren und patchen

CIFSwitch betrifft Linux-Kernel mit cifs-utils und User-Namespaces. Betroffene Distributionen, Angriffsweg, Checks, Mitigation und Patchstände.

Stand: 02.06.2026, 18:30 Uhr CEST. CIFSwitch ist inzwischen als CVE-2026-46243 geführt. AlmaLinux hat die zuvor getesteten Kernel in die Production-Repositories übernommen, Debian listet fixe Security-Kernel und CloudLinux nennt konkrete Kernel-, KernelCare- und Feed-Stände. Entscheidend ist trotzdem nicht nur uname -r, sondern ob dein laufender Kernel den Fix smb: client: reject userspace cifs.spnego descriptions enthält oder ob cifs-utils, cifs.spnego und unprivileged user namespaces den bekannten Angriffspfad nicht mehr zulassen.

Kurzfassung

  • Worum es geht: CIFSwitch ist eine lokale Rechteausweitung im Zusammenspiel aus Linux-Kernel-CIFS-Client und cifs-utils. Ein unprivilegierter lokaler Benutzer kann unter passenden Bedingungen Root werden.
  • CVE-ID: CVE-2026-46243.
  • Remote allein ausnutzbar: Nein. Der Angreifer braucht lokale Code-Ausführung, zum Beispiel Shell-Zugriff, kompromittierten Webcode, CI-Code, Plugin-Code oder einen Container-/Build-Job.
  • Warum es trotzdem dringend ist: Auf Multi-User-Systemen, Plesk- oder Shared-Hosting-Hosts, CI-Runnern, Entwickler-Workstations und Container-Nodes kann aus einem eingeschränkten Benutzerkonto direkt Root werden.
  • Bekannte Voraussetzungen: cifs-utils mit cifs.upcall muss vorhanden sein, die cifs.spnego-Request-Key-Regel muss erreichbar sein, der CIFS-Kernelpfad muss vorhanden oder ladbar sein, und unprivileged user/mount namespaces müssen den PoC-Pfad zulassen.
  • Nicht überall standardmäßig ausnutzbar: Viele Server haben cifs-utils nicht installiert. Fedora, AlmaLinux 10, Rocky 10, CentOS Stream 10 und mehrere SUSE-16-/openSUSE-16-Varianten blockieren den bekannten PoC laut Testtabelle durch SELinux oder AppArmor in der Standardkonfiguration. Das ist aber keine Kernel-Entwarnung.
  • Saubere Lösung: Vendor-Kernel mit dem Upstream-Fix installieren, danach rebooten oder einen passenden Livepatch nachweisen. AlmaLinux 8/9/10 hat die Fix-Kernel seit 02.06.2026 in Production-Repositories. Debian führt fixe Security-Kernel. CloudLinux nennt feste Kernelstände für CL7h/CL8 und AlmaLinux-basierte Zielstände für CL9/CL10.
  • Zwischenlösung: Wenn CIFS/SMB nicht gebraucht wird: cifs-utils entfernen, cifs blockieren oder die cifs.spnego-Request-Key-Regel neutralisieren. Alternativ unprivileged user namespaces deaktivieren. Jede dieser Maßnahmen kann produktive Workloads brechen.
  • Nicht machen: Den öffentlichen PoC nicht auf Produktivsystemen starten. Er schreibt unter anderem eine sudoers-Regel und ist kein harmloser Scanner.

Was ist CIFSwitch?

CIFSwitch ist eine Lücke im Übergang zwischen Kernel und Userspace. Der Kernel-CIFS-Client nutzt für Kerberos/SPNEGO-Authentifizierung nicht alles selbst im Kernel, sondern ruft über den Linux-Keyring-Mechanismus einen Userspace-Helfer aus cifs-utils auf. Dieser Helfer heißt typischerweise cifs.upcall und läuft über /sbin/request-key mit Root-Rechten.

Der normale Ablauf sieht vereinfacht so aus:

  1. Der Kernel-CIFS-Client braucht für einen SMB/CIFS-Mount ein Kerberos-/SPNEGO-Token.
  2. Der Kernel baut eine cifs.spnego-Beschreibung aus echten Kernel-Daten, zum Beispiel Server, UID, Credential-UID, PID und Namespace-Ziel.
  3. Der Kernel ruft request_key() für den Key-Typ cifs.spnego auf.
  4. /sbin/request-key liest die passende Regel, etwa create cifs.spnego * * /usr/sbin/cifs.upcall %k.
  5. cifs.upcall verarbeitet die Beschreibung, sucht Credentials und gibt das SPNEGO-Material an den Kernel zurück.

Der Fehler: Vor dem Upstream-Fix hat der Kernel nicht geprüft, ob eine cifs.spnego-Beschreibung wirklich vom Kernel-CIFS-Code kommt. Ein normaler lokaler Prozess konnte selbst request_key("cifs.spnego", "...") mit einer gefälschten Beschreibung auslösen. Weil der Key-Typ passt, startet trotzdem der Root-Helfer cifs.upcall.

Damit wird eine eigentlich interne Kernelbeschreibung zu einem Angreifer-Eingabefeld. Genau das ist die Lücke.

Wie funktioniert der Angriff?

Der Angriff ist kein normaler CIFS-Mount und keine Remote-Lücke in einem SMB-Server. Er missbraucht die Vertrauensgrenze zwischen Kernel-Keyring, request-key, cifs.upcall, Namespaces und NSS.

Die gefälschte cifs.spnego-Beschreibung enthält Felder wie pid, uid, creduid und upcall_target. cifs.upcall behandelt diese Felder so, als seien sie vom Kernel erzeugt worden. Beim Wert upcall_target=app kann der Helper in die Namespaces des angegebenen Prozesses wechseln. Genau dort wird es gefährlich.

Der öffentliche PoC baut dafür eine eigene User- und Mount-Namespace-Umgebung. In dieser Umgebung liegen eine kontrollierte nsswitch.conf und ein eigenes libnss_*.so.2-Modul. Wenn cifs.upcall als Root in diese Umgebung wechselt und anschließend vor dem finalen Rechteabwurf einen Account-Lookup über NSS macht, kann das manipulierte NSS-Modul als Root-Code geladen werden.

Der bekannte PoC nutzt das, um eine Datei unter /etc/sudoers.d/ zu schreiben und dem lokalen Benutzer NOPASSWD: ALL zu geben. Danach reicht sudo, um eine Root-Shell zu bekommen.

Aus Betriebssicht sind dabei vier Punkte wichtig:

  • Der Angreifer braucht lokale Code-Ausführung, aber keine Root-Rechte.
  • Ein installiertes cifs-utils ist für den bekannten PoC zentral.
  • User- und Mount-Namespaces sind nicht nur ein Container-Detail, sondern Teil des Exploit-Pfads.
  • SELinux oder AppArmor können den veröffentlichten PoC blockieren, ersetzen aber keinen Kernel-Fix.

Der Kernel-Fix ist klein, aber wirksam: Der Key-Typ cifs.spnego bekommt eine .vet_description-Prüfung. Der Kernel akzeptiert solche Beschreibungen nur noch, wenn CIFS selbst sie mit seinen internen spnego_cred anfordert. Userspace kann sich damit nicht mehr als Kernel-CIFS ausgeben.

Was braucht ein Angreifer?

CIFSwitch ist keine unauthentifizierte Remote-Code-Execution. Ein offener Webport oder ein erreichbarer SMB-Port reicht allein nicht. Der Angreifer braucht eine Möglichkeit, Code lokal auf dem System auszuführen.

In echten Umgebungen ist das aber kein exotischer Sonderfall:

  • kompromittierte WordPress-, TYPO3-, Shopware-, Laravel- oder Node.js-Anwendung
  • Shell-Zugang eines Kunden, Entwicklers oder Dienstleisters
  • Plesk- oder Shared-Hosting-Server mit mehreren Systembenutzern
  • GitLab Runner, GitHub Actions Runner, Jenkins-Agent oder Build-Host
  • Docker-, Kubernetes- oder LXC-Workload mit nicht vollständig vertrauenswürdigem Code
  • Entwickler-Workstation mit vielen lokalen Tools und Paketquellen
  • ein normaler unprivilegierter Linux-Benutzer auf einem Multi-User-System

Auf einem kleinen Single-Tenant-Server ohne fremde Shells und ohne fremde Workloads ist das Risiko niedriger. Aber auch dort kann eine kompromittierte Webanwendung lokaler Code sein. Deshalb würde ich CIFSwitch nicht ignorieren, sondern sauber prüfen.

Wer ist betroffen?

Betroffen sind Linux-Systeme, auf denen der verwundbare Kernel-CIFS-Code vorhanden ist und der bekannte Userspace-Pfad erreichbar ist. Die grobe Formel lautet:

verwundbarer Kernel + cifs-utils/cifs.upcall + cifs.spnego-Regel + unprivileged namespaces = kritisch

Eine nackte Kernel-Hauptversion reicht nicht. Distributionen backporten Kernel-Fixes, und LSM-Policies unterscheiden sich stark.

UmgebungEinschätzungWorauf prüfen
Debian 11/12/13Laut Forscher-Tabelle mit installiertem cifs-utils unter Standardpolicy ausnutzbar. Debian führt CVE-2026-46243 inzwischen im Security Tracker mit fixen Security-Kernelständen.cifs-utils, cifs.spnego-Regel, User-Namespaces und Debian-Kernel-Security-Stand prüfen. Bullseye/Bookworm/Trixie brauchen die Security-Kernel oder neuere Paketstände, nicht nur die alte Base-Version.
Ubuntu 18.04/20.04/22.04Laut Testtabelle mit installiertem cifs-utils ausnutzbar. cifs-utils ist in den getesteten Profilen nicht automatisch installiert.Kernel-Flavour, cifs-utils, AppArmor/Userns-Policy und Ubuntu-USN/CVE-Seiten prüfen.
Ubuntu 24.04Mit installiertem cifs-utils ist der direkte unshare-Weg durch AppArmor-Userns-Policy erschwert, laut Test aber über ein passendes AppArmor-Profil ausnutzbar.Nicht nur cifs-utils prüfen, sondern AppArmor-Userns-Status und tatsächlich erlaubte Profile.
Ubuntu 26.04Der bekannte PoC ist laut Testtabelle durch AppArmor-Userns-Policy blockiert, wird nach gelockerter Policy aber ausnutzbar.Als entschärft, nicht als sauber gefixt behandeln. Kernel-Fix trotzdem nachziehen.
Linux Mint 21.3/22.3 CinnamonLaut Testtabelle stock-exploitable, weil cifs-utils vorhanden ist und AppArmor den PoC nicht blockiert.Schnell priorisieren: cifs-utils, Userns, Kernel-Fix oder Mitigation.
Fedora 40 bis 44cifs-utils ist laut Testtabelle vorhanden, der bekannte PoC wird aber durch SELinux enforcing blockiert. Nach setenforce 0 ausnutzbar.SELinux enforcing beibehalten, Kernel-Updates einspielen. Fedora 44 hatte zum geprüften Stand neue Kernelupdates im 7.0.x-Zweig; genaue Fixversion über Bodhi/DNF prüfen.
RHEL / CentOS Stream 9CentOS Stream 9 GNOME war laut Testtabelle stock-exploitable; andere Desktops sind mit installiertem cifs-utils ausnutzbar. Für RHEL selbst braucht es den Red-Hat-Advisory-Stand.Red-Hat-Errata, cifs-utils, SELinux-Status und Userns-Policy prüfen. Ohne eigenes Red-Hat-Advisory keine Alma-Version blind übertragen.
CentOS Stream 10Der bekannte PoC wird laut Testtabelle durch SELinux enforcing blockiert; nach setenforce 0 ausnutzbar.SELinux nicht lockern, Kernel-Fix nach Vendor-Stand prüfen.
AlmaLinux 8AlmaLinux stuft AL8 als betroffen ein, wenn cifs-utils installiert ist.Production-Fix seit 02.06.2026: kernel-4.18.0-553.126.2.el8_10 oder neuer, danach Reboot.
AlmaLinux 9AlmaLinux 9.7 Workstation und Azure-Image-Rezept waren laut Testtabelle stock-exploitable.Production-Fix seit 02.06.2026: kernel-5.14.0-687.5.4.el9_8 oder neuer, danach Reboot.
AlmaLinux 10 / Kitten 10AlmaLinux 10 ist grundsätzlich betroffen, der öffentliche PoC wird auf Stock-Systemen durch SELinux enforcing blockiert. Bei SELinux permissive/disabled als ausnutzbar behandeln.Production-Fix seit 02.06.2026: kernel-6.12.0-211.7.4.el10_2 oder neuer. Kitten 10 bekommt den Fix über den regulären Kernelpfad.
Rocky Linux 8/9Rocky 9 Workstation war laut Testtabelle stock-exploitable; Rocky 8 GenericCloud ist mit installiertem cifs-utils ausnutzbar.Rocky-Errata/Security-Repo prüfen. Bis ein eindeutiger Fixstand vorhanden ist: Mitigation beibehalten, besonders auf Workstations und Cloud-Images mit cifs-utils.
Rocky Linux 10Der bekannte PoC wird laut Testtabelle durch SELinux enforcing blockiert; nach setenforce 0 ausnutzbar.SELinux enforcing nicht als endgültigen Fix dokumentieren, Kernelupdate nachziehen.
CloudLinux 7h/8/9/10CloudLinux stuft CL7h, CL8, CL9 und CL10 als betroffen ein, wenn cifs-utils installiert ist und User-Namespaces erlaubt sind. Typische Shared-Hosting-Installationen haben cifs-utils laut CloudLinux oft nicht.CL7h/CL8 haben eigene Fix-Kernel kernel-4.18.0-553.126.2.lve...; CL9/CL10 folgen den AlmaLinux-Zielständen. KernelCare-Main-Feed-Fixes sind für CL7h, CL8 und CL9 verfügbar; CL10 und CloudLinux for Ubuntu 22.04 lagen im Testing-Feed.
Oracle Linux 8/9Laut Testtabelle mit installiertem cifs-utils ausnutzbar.RHCK/UEK getrennt prüfen: uname -r, rpm -q kernel kernel-uek cifs-utils, Oracle-ELSA/Ksplice-Status.
Oracle Linux 10Der bekannte PoC wird laut Testtabelle durch SELinux enforcing blockiert; nach setenforce 0 ausnutzbar.SELinux-Status und Oracle-Errata prüfen.
Amazon Linux 2023Laut Testtabelle mit installiertem cifs-utils und SELinux permissive ausnutzbar.AWS-ALAS/Bulletins prüfen, cifs-utils und SELinux/Userns-Status kontrollieren.
Amazon Linux 2Laut Testtabelle durch ältere cifs-utils-Version im bekannten PoC-Pfad nicht betroffen.Trotzdem Kernel- und AWS-Status prüfen, nicht auf andere Amazon-Linux-Generationen übertragen.
SUSE / openSUSESLES 15 SP7/SAP 15 SP7 und SAP 16 waren laut Testtabelle stock-exploitable. openSUSE Leap 15.6 ist mit installiertem cifs-utils ausnutzbar. Tumbleweed und Leap 16 werden im bekannten PoC durch SELinux enforcing blockiert.Produktgenaue SUSE-CVE-/Advisory-Seite prüfen, sobald CVE-ID/Vendor-Fixstand sichtbar ist.
Proxmox VEProxmox ist Debian-basiert. LXC-Container teilen den Host-Kernel; KVM-Gäste haben eigene Kernel. Ein dediziertes Proxmox-CIFSwitch-Advisory war zum geprüften Stand nicht sichtbar.Host-Kernel, cifs-utils, cifs-Modul und Userns prüfen. Wenn cifs-utils auf dem Host installiert ist, bis zum Proxmox/Debian-Fix mitigieren oder den passenden Kernel-Fix nachweisen.
Plesk-ServerPlesk ist nicht die Lücke. Relevant ist der darunterliegende OS-Kernel und ob cifs-utils installiert ist.Auf Hosting-Hosts zuerst prüfen, ob cifs-utils überhaupt gebraucht wird. Wenn nicht: entfernen oder cifs.spnego neutralisieren.
Docker, Kubernetes, CI-RunnerBesonders relevant, wenn fremder Code läuft und User-Namespaces oder flexible Build-Umgebungen erlaubt sind.Node-Kernel patchen, cifs-utils auf Hosts entfernen, rootless Workflows und Userns-Policy bewusst prüfen.
Single-Tenant-Server ohne fremde ShellsGeringeres Risiko, aber eine kompromittierte Anwendung kann lokaler Code sein.Normal priorisiert patchen, bei installiertem cifs-utils nicht bis zum nächsten Quartalsfenster warten.

Patchstände nach Distribution

Diese Tabelle ist eine Momentaufnahme. Weil die CVE-ID noch fehlt, sind mehrere Vendor-Datenbanken schwerer abfragbar als bei normalen Kernel-CVEs.

Distribution / PlattformStand / Quelle
Upstream LinuxCVE-2026-46243. Fix in Mainline-Commit 3da1fdf4efbc mit dem Titel smb: client: reject userspace cifs.spnego descriptions. Der Fix ergänzt eine .vet_description-Prüfung im cifs.spnego-Key-Typ.
AlmaLinux 8Production-Repo seit 02.06.2026: kernel-4.18.0-553.126.2.el8_10 oder neuer.
AlmaLinux 9Production-Repo seit 02.06.2026: kernel-5.14.0-687.5.4.el9_8 oder neuer.
AlmaLinux 10Production-Repo seit 02.06.2026: kernel-6.12.0-211.7.4.el10_2 oder neuer.
AlmaLinux Kitten 10Kein eigener Emergency-Build laut AlmaLinux; Fix soll mit dem nächsten regulären Kernelupdate kommen.
CloudLinux 7h / 8Fix-Kernel laut CloudLinux: CL7h ab kernel-4.18.0-553.126.2.lve.el7h, CL8 ab kernel-4.18.0-553.126.2.lve.el8.
CloudLinux 9Nutzt den AlmaLinux-9-Kernelpfad; Zielstand kernel-5.14.0-687.5.4.el9_8 oder neuer. KernelCare-Main-Feed-Fix verfügbar.
CloudLinux 10Nutzt den AlmaLinux-10-Kernelpfad; Zielstand kernel-6.12.0-211.7.4.el10_2 oder neuer. KernelCare-Fix war zum CloudLinux-Update im Testing-Feed.
CloudLinux for Ubuntu 22.04KernelCare-Fix laut CloudLinux im Testing-Feed, nicht als regulären Ubuntu-USN-Fix behandeln.
Debian 11/12/13Debian Security Tracker: Bullseye Security ab 5.10.257-1, Bookworm Security ab 6.1.174-1, Trixie ab 6.12.90-2, Forky/Sid ab 7.0.10-1 gefixt; die alten Base-Kernel von Bullseye, Bookworm und Trixie bleiben im Tracker als vulnerable markiert.
Ubuntu 18.04 bis 26.04Kein eindeutiger Ubuntu-CIFSwitch-USN-Fixstand zum geprüften Stand sichtbar. Kernel-Flavour, Livepatch und AppArmor-Userns-Policy getrennt prüfen.
FedoraDer bekannte PoC ist bei SELinux enforcing blockiert. Fedora-44-Kernel im 7.0.x-Zweig lagen bereits nach dem Upstream-Fix-Zeitpunkt; genaue Fixversion per dnf update 'kernel*', Bodhi und Changelog prüfen.
RHEL / CentOS Stream / RockyKein pauschaler öffentlicher Fixstand ohne Red-Hat-/Rocky-Erratum. Die AlmaLinux-Production-Versionen sind ein Hinweis auf den EL-Backport-Kontext, ersetzen aber nicht den jeweiligen Vendor-Stand.
Oracle LinuxKein pauschaler Stand ohne Oracle-Erratum. RHCK, UEK, Ksplice und KernelCare getrennt prüfen.
Amazon LinuxKein eindeutiger ALAS-Fixstand zum geprüften Stand sichtbar. Amazon Linux 2023 war laut Testtabelle mit passenden Voraussetzungen ausnutzbar; Amazon Linux 2 war durch ältere cifs-utils im bekannten PoC-Pfad nicht betroffen.
SUSE / openSUSEKein eindeutiger produktweiter SUSE-Fixstand zum geprüften Stand sichtbar. Weil mehrere SLES-/openSUSE-Varianten in der Testtabelle auftauchen, sollten SUSE-Produktstatus und Kernel-Flavour getrennt geprüft werden.
Proxmox VEKein dediziertes Proxmox-CIFSwitch-Advisory zum geprüften Stand sichtbar. Bis dahin Debian-/Proxmox-Kernel-Changelog prüfen und Host-Mitigation anwenden, wenn cifs-utils auf dem PVE-Host vorhanden ist.

Bei Distributionen ohne klare Tabelle gilt: Nicht aus einem fremden Vendor-Artikel abschreiben. Entscheidend ist, ob der eigene Vendor den Upstream-Fix 3da1fdf4efbc oder einen äquivalenten Backport für genau den laufenden Kernel ausweist.

Was ist nicht betroffen oder deutlich entschärft?

Nicht betroffen oder praktisch entschärft sind Systeme, bei denen mindestens ein notwendiger Teil der Kette fehlt oder der Kernel gefixt ist. Das muss man belegen.

  • Der laufende Kernel enthält den CIFSwitch-Fix für cifs.spnego-Descriptions.
  • Ein Livepatch ist aktiv und nennt entweder die CVE-ID, sobald sie vergeben ist, oder die Upstream-Beschreibung smb: client: reject userspace cifs.spnego descriptions.
  • cifs-utils ist nicht installiert und cifs.upcall existiert nicht.
  • Die cifs.spnego-Request-Key-Regel ist nicht vorhanden oder bewusst auf einen neutralisierenden Handler gesetzt.
  • Unprivileged user namespaces sind wirksam deaktiviert.
  • Der CIFS-Kernelpfad ist weder eingebaut noch als Modul ladbar.
  • SELinux oder AppArmor blockieren den bekannten PoC. Das ist eine Entschärfung, aber kein Kernel-Fix.
  • Amazon Linux 2 und ältere Kali-Stände waren laut Testtabelle durch zu alte cifs-utils-Versionen im bekannten PoC-Pfad nicht betroffen. Das darf nicht auf neuere Releases übertragen werden.

Wichtig: “cifs-utils ist nicht Teil der Minimalinstallation” ist keine Hostprüfung. Tools, Desktop-Pakete, Backup-Software, Fileserver-Clients oder Admins können das Paket später installiert haben. Prüfen ist schneller als raten.

Schnelle Prüfung auf einem Host

Zuerst brauchst du den laufenden Kernel:

uname -r
uname -a

Dann prüfst du, ob cifs-utils und cifs.upcall vorhanden sind.

Debian, Ubuntu und Proxmox:

dpkg -l cifs-utils 2>/dev/null | awk '/^ii/ {print $2, $3}'
command -v cifs.upcall || true

RHEL-, Alma-, Rocky-, CloudLinux-, Oracle- und Fedora-nahe Systeme:

rpm -q cifs-utils 2>/dev/null
command -v cifs.upcall || true

SUSE und openSUSE:

rpm -q cifs-utils 2>/dev/null
command -v cifs.upcall || true

Danach geht es um die Request-Key-Regel:

grep -R 'cifs\.spnego' /etc/request-key.conf /etc/request-key.d 2>/dev/null || echo "keine cifs.spnego-Regel gefunden"

Typisch verwundbar ist eine Regel, die cifs.spnego auf cifs.upcall zeigt, zum Beispiel:

create cifs.spnego * * /usr/sbin/cifs.upcall %k

Prüfen, ob das CIFS-Modul geladen oder ladbar ist:

grep -E '^cifs ' /proc/modules || echo "cifs aktuell nicht geladen"
modprobe -n -v cifs 2>/dev/null || true
find "/lib/modules/$(uname -r)" -type f -name 'cifs.ko*' -print 2>/dev/null

Falls die Kernel-Konfiguration verfügbar ist:

grep CONFIG_CIFS "/boot/config-$(uname -r)" 2>/dev/null || true
zgrep CONFIG_CIFS /proc/config.gz 2>/dev/null || true

User-Namespace-Status:

sysctl user.max_user_namespaces 2>/dev/null
sysctl kernel.unprivileged_userns_clone 2>/dev/null
sysctl kernel.apparmor_restrict_unprivileged_userns 2>/dev/null

LSM-Status:

getenforce 2>/dev/null || true
aa-status 2>/dev/null | sed -n '1,20p' || true

Ein kompakter erster Exposure-Check:

echo "Kernel: $(uname -r)"

if command -v cifs.upcall >/dev/null; then
  echo "WARNUNG: cifs.upcall vorhanden: $(command -v cifs.upcall)"
else
  echo "OK: cifs.upcall nicht im PATH"
fi

grep -R 'cifs\.spnego.*cifs\.upcall' /etc/request-key.conf /etc/request-key.d 2>/dev/null \
  && echo "WARNUNG: cifs.spnego startet cifs.upcall" \
  || echo "OK/INFO: keine aktive cifs.upcall-Regel gefunden"

grep -E '^cifs ' /proc/modules \
  && echo "INFO: cifs-Modul ist geladen" \
  || echo "INFO: cifs-Modul ist aktuell nicht geladen"

sysctl user.max_user_namespaces kernel.unprivileged_userns_clone 2>/dev/null || true

Das ist kein vollständiger Vulnerability-Scanner. Es beantwortet aber die Fragen, die du für die erste Priorisierung brauchst:

  1. Läuft ein Kernel, der den Fix nachweislich enthält?
  2. Ist cifs-utils auf dem Host vorhanden?
  3. Startet cifs.spnego noch cifs.upcall?
  4. Sind unprivileged user namespaces erlaubt?
  5. Blockiert SELinux/AppArmor den bekannten Weg oder wurde diese Schutzschicht gelockert?

Updates einspielen

Die saubere Lösung ist ein Kernel-Update aus den Repositories deiner Distribution. Danach muss der Host entweder rebooten oder du musst einen passenden Livepatch nachweisen.

Debian, Ubuntu und Proxmox:

sudo apt update
sudo apt full-upgrade
sudo reboot
uname -r

Auf Proxmox zusätzlich:

pveversion -v
dpkg -l 'proxmox-kernel*' 'pve-kernel*' 'linux-image*' cifs-utils 2>/dev/null | awk '/^ii/ {print $2, $3}'
apt-cache policy proxmox-kernel-6.8 proxmox-kernel-6.14 proxmox-kernel-6.17 proxmox-kernel-7.0 2>/dev/null
proxmox-boot-tool status 2>/dev/null || true

RHEL, AlmaLinux, Rocky Linux, CloudLinux, Oracle Linux und Fedora:

sudo dnf clean metadata
sudo dnf update 'kernel*'
sudo reboot
uname -r

Bei älteren EL-Systemen kann noch yum statt dnf relevant sein.

SUSE und openSUSE:

sudo zypper refresh
sudo zypper patch
sudo reboot
uname -r

Bei AlmaLinux brauchst du seit der Production-Promotion am 02.06.2026 kein Testing-Repository mehr für die genannten Fix-Kernel. Normales dnf upgrade aus den Production-Repositories reicht, danach muss der Host in den neuen Kernel booten. Vergleiche anschließend gegen die Zielstände:

AlmaLinux 8:  kernel-4.18.0-553.126.2.el8_10 oder neuer
AlmaLinux 9:  kernel-5.14.0-687.5.4.el9_8 oder neuer
AlmaLinux 10: kernel-6.12.0-211.7.4.el10_2 oder neuer

Bei KernelCare zählt nicht uname -r, sondern der Patch-Nachweis:

kcarectl --patch-info 2>/dev/null | grep -Ei 'CVE-2026-|cifs|spnego|reject userspace cifs.spnego' || true
kcarectl --uname 2>/dev/null || true

CloudLinux nennt für CIFSwitch neben CVE-2026-46243 weiterhin die Upstream-Beschreibung als Erkennungsanker:

smb: client: reject userspace cifs.spnego descriptions

Wenn die Patch-Metadaten die CVE-ID noch nicht anzeigen, bleibt die Upstream-Beschreibung der praktische Suchanker.

Temporäre Mitigation

Wenn noch kein gefixter Kernel verfügbar ist oder ein sofortiger Reboot nicht geht, gibt es mehrere Zwischenlösungen. Wähle nur eine Maßnahme, deren Nebenwirkungen du akzeptierst.

Option 1: cifs-utils entfernen

Wenn der Host keine SMB/CIFS-Shares mountet, ist das oft die sauberste Zwischenlösung:

Debian, Ubuntu und Proxmox:

sudo apt remove cifs-utils

RHEL-, Alma-, Rocky-, CloudLinux-, Oracle- und Fedora-nahe Systeme:

sudo dnf remove cifs-utils

SUSE und openSUSE:

sudo zypper remove cifs-utils

Das bricht CIFS-Mounts, die mount.cifs, Kerberos/SPNEGO oder cifs.upcall brauchen. Vorher prüfen:

findmnt -t cifs
grep -R ' cifs ' /etc/fstab /etc/systemd/system 2>/dev/null || true

Option 2: cifs.spnego-Request-Key-Regel neutralisieren

Wenn Kerberos-authentifizierte CIFS-Mounts nicht gebraucht werden, kannst du die Upcall-Regel überschreiben:

printf '%s\n' 'create cifs.spnego * * /bin/false' | sudo tee /etc/request-key.d/cifs.spnego.conf

Prüfen:

grep -R 'cifs\.spnego' /etc/request-key.conf /etc/request-key.d 2>/dev/null

Das lässt cifs-utils installiert, bricht aber CIFS/SPNEGO-Authentifizierung. Für Umgebungen mit Kerberos-SMB ist das keine harmlose Änderung.

Zurücknehmen nach gefixtem Kernel:

sudo rm -f /etc/request-key.d/cifs.spnego.conf

Falls dein Vendor statt /bin/false eine keyctl negate-Regel empfiehlt, nimm die Vendor-Regel. Wichtig ist nicht die Kosmetik, sondern dass die Angreifer-Anfrage nicht mehr cifs.upcall als Root startet.

Option 3: CIFS-Kernelmodul blockieren

Wenn CIFS auf dem Host nicht gebraucht wird:

printf '%s\n' 'install cifs /bin/false' | sudo tee /etc/modprobe.d/cifswitch.conf
sudo rmmod cifs 2>/dev/null || true
modprobe -n -v cifs

Wenn das Modul bereits genutzt wird, schlägt rmmod fehl. Dann hängen produktive CIFS-Mounts daran, oder der Pfad ist eingebaut. Außerdem muss die Regel in das initramfs, wenn sie über Reboots hinweg früh greifen soll.

Debian und Ubuntu:

sudo update-initramfs -u -k all

RHEL-, Alma-, Rocky-, CloudLinux-, Oracle- und Fedora-nahe Systeme:

sudo dracut -f

Zurücknehmen nach gefixtem Kernel:

sudo rm -f /etc/modprobe.d/cifswitch.conf

if command -v update-initramfs >/dev/null; then
  sudo update-initramfs -u -k all
fi

if command -v dracut >/dev/null; then
  sudo dracut -f
fi

Option 4: unprivileged user namespaces deaktivieren

Das blockiert den bekannten PoC-Pfad, kann aber moderne Workloads treffen.

Debian/Ubuntu-typisch:

printf '%s\n' 'kernel.unprivileged_userns_clone=0' | sudo tee /etc/sysctl.d/99-cifswitch-userns.conf
sudo sysctl --system

EL-typisch:

printf '%s\n' 'user.max_user_namespaces=0' | sudo tee /etc/sysctl.d/99-cifswitch-userns.conf
sudo sysctl --system

Nebenwirkungen sind real: rootless Podman, rootless Docker, Build-Sandboxes, Flatpak, Bubblewrap, Browser-Sandboxing, manche CI-Jobs und Entwickler-Workflows können kaputtgehen. Auf einem klassischen Webhosting-Server kann das trotzdem die bessere Übergangslösung sein als ein offener Root-LPE-Pfad.

Was beim Patchen gern übersehen wird

Der erste Fehler ist ein installiertes Kernelpaket ohne Reboot. Der Fix liegt dann auf der Platte, aber der alte Kernel läuft weiter.

uname -r

Der zweite Fehler ist ein blinder Blick auf cifs-utils. Fehlt das Paket, ist der bekannte PoC-Pfad nicht erreichbar. Der Kernel-Bug ist damit aber nicht sauber behoben. Bei der nächsten Paketinstallation oder geänderten Rolle kann die Exposition wieder auftauchen.

Der dritte Fehler ist SELinux oder AppArmor als endgültigen Patch zu behandeln. Bei Fedora, AlmaLinux 10, Rocky 10 und mehreren neueren SUSE/openSUSE-Varianten blockiert die Standardpolicy den bekannten PoC. Sobald jemand SELinux auf permissive stellt, AppArmor-Userns-Restriktionen lockert oder ein anderer Exploit-Pfad auftaucht, kann diese Annahme kippen.

Der vierte Fehler ist “Container aktualisiert, Host vergessen”. Ein Docker-, Kubernetes- oder LXC-Container bringt keinen eigenen Kernel mit. CIFSwitch ist ein Host-Kernel-Thema. KVM-Gäste sind anders: Sie haben eigene Guest-Kernel und müssen separat bewertet werden.

Der fünfte Fehler ist eine CIFS-Mitigation auf Hosts mit echten SMB-Mounts. cifs-utils, cifs.upcall und die cifs.spnego-Regel sind nicht überflüssig, wenn Kerberos-authentifizierte SMB-Shares genutzt werden. Dann ist ein Kernel-Fix mit Reboot oder Livepatch meist der bessere Weg.

Der sechste Fehler ist fehlende Reihenfolge in Clustern. Kubernetes-Nodes werden drainiert, Proxmox-HA-Workloads migriert oder bewusst gestoppt, CI-Runner aus Queues genommen. Ein Kernelupdate ist kein normales Userland-Update. Der Reboot ist Teil des Fixes.

Einordnung für Plesk, Proxmox und Hosting

Für Plesk- und Shared-Hosting-Server ist CIFSwitch vor allem dann relevant, wenn mehrere Benutzer oder Kunden-Code auf demselben Host laufen. Genau dort sind lokale Rechteausweitungen wertvoll: Ein kompromittierter Webspace, ein Cronjob oder ein SSH-Benutzer kann zum Host-Root-Problem werden.

Die gute Nachricht: Auf vielen klassischen Hosting-Servern wird cifs-utils nicht gebraucht. Dann ist das Entfernen des Pakets oder das Neutralisieren der cifs.spnego-Regel eine pragmatische Zwischenlösung. Das sollte aber dokumentiert werden, sonst installiert es später jemand für einen SMB-Mount wieder und niemand denkt an CIFSwitch.

Bei Proxmox ist die Trennung wichtig:

  • Proxmox-Host: Der Host-Kernel entscheidet. Wenn auf dem Host cifs-utils installiert ist, etwa für SMB-Backups oder manuelle Mounts, muss der Host geprüft werden.
  • LXC-Container: LXC teilt den Host-Kernel. Ein lokaler Exploit im Container kann je nach Policy den Host-Kernelpfad erreichen. Container-Images zu patchen ersetzt den Host-Fix nicht.
  • KVM-VMs: KVM-Gäste haben eigene Kernel. Der Gast muss separat geprüft werden. Der Host ist dadurch nicht automatisch gefixt.
  • Cluster: Reboots brauchen Planung. Dokumentiere pro Node, welcher Kernel wirklich läuft und ob eine temporäre CIFS-Mitigation aktiv ist.

Für CI-Runner und Build-Hosts ist die Priorität hoch, wenn fremder oder halb-vertrauenswürdiger Code gebaut wird. Gerade dort sind unshare, User-Namespaces, rootless Container und viele lokale Tools normal. Wenn zusätzlich cifs-utils installiert ist, ist das keine theoretische Lücke.

Wie wir damit umgehen würden

Bei produktiven Systemen würden wir nicht mit dem PoC anfangen. Der erste Schritt ist Inventar:

  1. Welche Hosts erlauben lokale Benutzer, Kundenworkloads, CI-Jobs oder Container?
  2. Wo ist cifs-utils installiert?
  3. Wo ist cifs.spnego auf cifs.upcall verdrahtet?
  4. Wo sind unprivileged user namespaces erlaubt?
  5. Welche Kernel-Fixes oder Livepatches bietet der jeweilige Vendor für genau diese Systeme?

Danach wird priorisiert:

  • Multi-User-, Hosting-, CI- und Container-Hosts zuerst.
  • Systeme mit cifs-utils und erlaubten User-Namespaces zuerst.
  • Systeme mit SELinux permissive/disabled oder gelockertem AppArmor besonders prüfen.
  • Single-Tenant-Systeme mit normalem Wartungsfenster, aber nicht vergessen.

Wenn kein Kernel-Fix verfügbar ist, ist die pragmatische Übergangslösung meistens: cifs-utils entfernen, wenn es nicht gebraucht wird. Wenn SMB/CIFS gebraucht wird, hängt die Entscheidung an der konkreten Nutzung: Kerberos-CIFS-Mounts brauchen andere Maßnahmen als ein Server, auf dem das Paket nur zufällig installiert wurde.

Update-Log

  • 2026-05-29 17:30 Uhr CEST: Erstfassung mit Stand aus oss-security, Upstream-Fix, AlmaLinux-Testing-Kerneln, CloudLinux/KernelCare-Status und veröffentlichter Distro-Testtabelle.
  • 2026-06-01: CVE-2026-46243 ergänzt. CloudLinux aktualisierte die Advisory und nennt den CVE-Anker für Patch- und Livepatch-Prüfungen.
  • 2026-06-02: AlmaLinux-Fixkernel aus dem Testing-Repo in Production-Repositories übernommen; Debian-Tracker mit fixen Security-Kerneln und CloudLinux-Zielstände für CL7h/CL8/CL9/CL10 ergänzt.

Quellen