
Erkennungsskript für CIFSwitch - CVE-2026-46243
Ein Shell-Skript zur Überprüfung, ob ein Linux-System CIFSwitch (CVE-2026-46243) ausgesetzt ist – eine lokale Privilegieneskalations-Schwachstelle im CIFS/SMB-Client des Linux-Kernels, die seit 2007 besteht.
Läuft auf Bare-Metal-Hosts, VMs und in Containern. Entwickelt, um direkt in CI/CD-Pipelines eingesetzt zu werden.
CIFSwitch wurde am 28. Mai 2026 vom Sicherheitsforscher Asim Manizada veröffentlicht. Der Fehler verknüpft eine fehlende Eingabevalidierung im cifs.spnego-Schlüsseltyp des Kernels mit dem root-basierten cifs.upcall-Helfer aus cifs-utils.
Ein unprivilegierter lokaler Benutzer kann request_key() mit einer gefälschten Schlüsselbeschreibung aufrufen, wodurch der Kernel cifs.upcall als root mit angreifergesteuerten Feldern ausführt. Mit upcall_target=app tritt der Helfer in den Mount-Namespace des Angreifers ein und führt eine getpwuid()-Abfrage durch, bevor er die Berechtigungen herabsetzt – dabei wird ein angreifergesteuertes NSS-Modul geladen und beliebiger Code als root ausgeführt.
Voraussetzungen für die Ausnutzung:
cifs-utils >= 6.14 installiertEin öffentlicher PoC ist verfügbar unter manizada/CIFSwitch.
| Prüfung | Beschreibung |
|---|---|
KERNEL_VERSION | Vergleicht den laufenden Kernel mit gepatchten Upstream-Versionen (Hinweis: Distributionspakete werden noch ausgerollt) |
CIFS_UTILS | Erkennt die Installation von cifs-utils und ausnutzbare Version (>= 6.14) |
CIFS_MODULE | Überprüft, ob das CIFS-Kernelmodul geladen, eingebaut oder blockiert ist |
USERNS | Liest den Sysctl-Wert kernel.unprivileged_userns_clone oder user.max_user_namespaces |
REQUESTKEY_RULE | Überprüft auf eine aktive cifs.spnego-Regel, die cifs.upcall aufruft |
MAC_POLICY | Erkennt erzwingendes SELinux oder AppArmor (blockiert Exploit auf gepatchten Distributionen) |
CONTAINER_CAPS | In Containern: Überprüft auf CAP_SYS_ADMIN (ermöglicht uneingeschränkten userns) |
CONTAINER_PROC | In Containern: Überprüft auf Schreibzugriff auf /proc/sys (privilegierter Container) |
FIX_SYMBOL | Wenn CIFS geladen ist und /proc/kallsyms lesbar ist: Überprüft, ob das Symbol des Fix-Commits vorhanden ist |
# Klonen oder herunterladen
curl -O https://raw.githubusercontent.com/liamromanis101/cifswitch-check/main/cifswitch-check.sh
chmod +x cifswitch-check.sh
# Interaktiv ausführen (farbige Ausgabe)
./cifswitch-check.sh
# Quiet-Modus – nur Fehlschläge und endgültiges Urteil
./cifswitch-check.sh --quiet
# JSON-Ausgabe – für CI/CD-Pipelines, SIEM-Integration
./cifswitch-check.sh --ci
# Keine Farbe (Klartext, nützlich für Logging)
./cifswitch-check.sh --no-colour
# Dieses Skript ist auch als SKILL von Agensi verfügbar:
https://www.agensi.io/skills/cve-2026-46243-cifswitch
| Code | Bedeutung |
|---|---|
0 | Nicht anfällig oder alle kritischen Gegenmaßnahmen vorhanden |
1 | Anfällig – eine oder mehrere FEHLGESCHLAGENE Prüfungen |
2 | Skriptfehler |
CIFSwitch Vulnerability Check (CVE-2026-46243)
Kernel: 6.18.5 Host: myserver Container: false
────────────────────────────────────────────────────────────────────────
[FAIL] KERNEL_VERSION Kernel 6.18.5 appears unpatched. Fixed in: >= 6.18.22, >= 6.19.12, >= 7.0. Update your kernel.
[PASS] CIFS_UTILS cifs-utils NOT installed — cifs.upcall helper absent, attack chain is broken
[PASS] CIFS_MODULE CIFS kernel module not present on this system
[FAIL] USERNS user.max_user_namespaces = 15980 (non-zero). Disable to block namespace step:
[PASS] REQUESTKEY_RULE No cifs.spnego request-key rule found — rootful cifs.upcall will not be invoked
[WARN] MAC_POLICY No enforcing MAC policy (SELinux/AppArmor) detected
[ -- ] FIX_SYMBOL CIFS module not loaded — symbol check skipped
────────────────────────────────────────────────────────────────────────
VERDICT: VULNERABLE — remediation required
Reference: https://heyitsas.im/posts/cifswitch/
--ci){
"scanner": "cifswitch-check",
"cve": "CVE-2026-46243",
"timestamp": "2026-06-03T00:10:08Z",
"hostname": "myserver",
"kernel": "6.18.5",
"in_container": false,
"overall": "FAIL",
"checks": [
{"check": "KERNEL_VERSION", "status": "FAIL", "detail": "Kernel 6.18.5 appears unpatched. Fixed in: >= 6.18.22, >= 6.19.12, >= 7.0. Update your kernel."},
{"check": "CIFS_UTILS", "status": "PASS", "detail": "cifs-utils NOT installed — cifs.upcall helper absent, attack chain is broken"},
{"check": "CIFS_MODULE", "status": "PASS", "detail": "CIFS kernel module not present on this system"},
{"check": "USERNS", "status": "FAIL", "detail": "user.max_user_namespaces = 15980 (non-zero). Disable to block namespace step:"},
{"check": "REQUESTKEY_RULE","status": "PASS", "detail": "No cifs.spnego request-key rule found — rootful cifs.upcall will not be invoked"},
{"check": "MAC_POLICY", "status": "WARN", "detail": "No enforcing MAC policy (SELinux/AppArmor) detected"},
{"check": "FIX_SYMBOL", "status": "INFO", "detail": "CIFS module not loaded — symbol check skipped"}
]
}
- name: CIFSwitch vulnerability check
run: |
chmod +x ./cifswitch-check.sh
./cifswitch-check.sh --ci | tee cifswitch-result.json
# Exit code 1 will fail the step if the runner is vulnerable
cifswitch-check:
stage: security
script:
- chmod +x cifswitch-check.sh
- ./cifswitch-check.sh --ci > cifswitch-result.json
artifacts:
paths:
- cifswitch-result.json
stage('CIFSwitch Check') {
steps {
sh 'chmod +x cifswitch-check.sh && ./cifswitch-check.sh --ci > cifswitch-result.json'
archiveArtifacts artifacts: 'cifswitch-result.json'
}
}
1. Patchen Sie Ihren Kernel (sobald Ihr Distributionspaket verfügbar ist)
Der Upstream-Fix ist der Commit 3da1fdf4efbc, der für stabile Kernel >= 6.18.22, >= 6.19.12 und >= 7.0 eingereiht wurde. Distributions-Backports werden aktiv ausgerollt – prüfen Sie die Sicherheitshinweise Ihres Anbieters zu CVE-2026-46243. Bis ein Paket verfügbar ist, wenden Sie die folgenden Gegenmaßnahmen an.
2. Entfernen Sie cifs-utils (unterbricht die Angriffskette vollständig, wenn Sie keine CIFS/SMB-Mounts verwenden)
apt remove cifs-utils # Debian / Ubuntu
dnf remove cifs-utils # RHEL / Fedora / AlmaLinux
2. Deaktivieren Sie unprivilegierte Benutzer-Namespaces (blockiert den Namespace-Pivot-Schritt)
# Debian / Ubuntu
sysctl -w kernel.unprivileged_userns_clone=0
echo 'kernel.unprivileged_userns_clone=0' >> /etc/sysctl.d/99-cifswitch.conf
# RHEL / Fedora / upstream
sysctl -w user.max_user_namespaces=0
⚠️ Dies kann Flatpak, rootless Podman/Docker und die Sandboxing-Funktionen von Chrome/Chromium beeinträchtigen.
3. Deaktivieren Sie die cifs.spnego request-key-Regel
sed -i 's|^create cifs.spnego|#create cifs.spnego|' /etc/request-key.d/cifs.spnego.conf
4. Blockieren Sie das CIFS-Kernelmodul (falls keine SMB-Netzwerk-Mounts verwendet werden)
echo 'blacklist cifs' >> /etc/modprobe.d/blacklist-cifs.conf
rmmod cifs 2>/dev/null || true
depmod -a