
Script di rilevamento per CIFSwitch - CVE-2026-46243
Uno script shell per verificare se un sistema Linux è esposto a CIFSwitch (CVE-2026-46243) — una vulnerabilità di escalation locale dei privilegi nel client CIFS/SMB del kernel Linux, presente dal 2007.
Viene eseguito su host bare-metal, VM e all'interno di container. Progettato per essere integrato direttamente nelle pipeline CI/CD.
CIFSwitch è stata divulgata il 28 maggio 2026 dal ricercatore di sicurezza Asim Manizada. La falla combina una mancata validazione dell'input nel tipo di chiave cifs.spnego del kernel con l'helper rootful cifs.upcall di cifs-utils.
Un utente locale non privilegiato può chiamare request_key() con una descrizione di chiave contraffatta, facendo sì che il kernel invochi cifs.upcall come root con campi controllati dall'attaccante. Con upcall_target=app, l'helper entra nel mount namespace dell'attaccante ed esegue una ricerca getpwuid() prima di rilasciare i privilegi — caricando un modulo NSS controllato dall'attaccante ed eseguendo codice arbitrario come root.
Prerequisiti per lo sfruttamento:
cifs-utils >= 6.14 installatoUn PoC pubblico è disponibile su manizada/CIFSwitch.
# Clone or download
curl -O https://raw.githubusercontent.com/liamromanis101/cifswitch-check/main/cifswitch-check.sh
chmod +x cifswitch-check.sh
# Run interactively (coloured output)
./cifswitch-check.sh
# Quiet mode — only FAILs and final verdict
./cifswitch-check.sh --quiet
# JSON output — for CI/CD pipelines, SIEM ingestion
./cifswitch-check.sh --ci
# No colour (plain text, useful for logging)
./cifswitch-check.sh --no-colour
# This script is also available as a SKILL from Agensi:
https://www.agensi.io/skills/cve-2026-46243-cifswitch
| Codice | Significato |
|---|---|
0 | Non vulnerabile, o tutte le mitigazioni critiche in atto |
1 | Vulnerabile — uno o più controlli FAIL |
2 | Errore dello script |
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. Applica la patch al kernel (quando il pacchetto della tua distribuzione è disponibile)
Il fix upstream è il commit 3da1fdf4efbc, in coda per i rami stable nei kernel >= 6.18.22, >= 6.19.12 e >= 7.0. I backport delle distribuzioni sono in fase di rilascio attivo — controlla l'avviso di sicurezza del tuo vendor per CVE-2026-46243. Fino a quando non sarà disponibile un pacchetto, applica le mitigazioni seguenti.
2. Rimuovi cifs-utils (interrompe completamente la catena di attacco se non usi mount CIFS/SMB)
apt remove cifs-utils # Debian / Ubuntu
dnf remove cifs-utils # RHEL / Fedora / AlmaLinux
2. Disabilita i user namespaces non privilegiati (blocca il passaggio di pivot del namespace)
# 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
⚠️ Questo potrebbe rompere Flatpak, Podman/Docker rootless e il sandboxing di Chrome/Chromium.
3. Disabilita la regola request-key per cifs.spnego
sed -i 's|^create cifs.spnego|#create cifs.spnego|' /etc/request-key.d/cifs.spnego.conf
4. Metti in blacklist il modulo kernel CIFS (se non utilizzi mount di rete SMB)
echo 'blacklist cifs' >> /etc/modprobe.d/blacklist-cifs.conf
rmmod cifs 2>/dev/null || true
depmod -a
Lo sfruttamento richiede cifs-utils >= 6.14 installato e i user namespaces non privilegiati abilitati. Le distribuzioni confermate vulnerabili nella configurazione predefinita includono AlmaLinux 8/9, RHEL 8/9, CloudLinux 8/9/10 e diverse release Ubuntu/Debian con cifs-utils presente.
Distribuzioni in cui la configurazione predefinita di SELinux/AppArmor impedisce lo sfruttamento: Ubuntu 26.04, Fedora 40–44, CentOS Stream 10, Rocky Linux 10, AlmaLinux 10, SLES 16, openSUSE Leap 16.
Non interessate: Amazon Linux 2, Kali Linux 2019.4/2020.4 (le versioni di cifs-utils non dispongono del namespace-switch).
Per i kernel delle distribuzioni RHEL/CentOS/Amazon, lo script si affida all'avviso del vendor, poiché lo stato del backport non può essere determinato in modo affidabile dalla sola stringa di versione.
bash >= 4.0awk, grep, cut, find, sort)CAP_SYSLOG) è necessario per il controllo del simbolo del kernel (FIX_SYMBOL)Questo script è fornito a scopo difensivo — per aiutare gli amministratori a valutare e rimediare all'esposizione. Esegue controlli di sola lettura e non apporta alcuna modifica al sistema. L'exploit PoC non è incluso né collegato qui; per questo, fare riferimento all'analisi del ricercatore originale.
| Controllo | Descrizione |
|---|
KERNEL_VERSION | Confronta il kernel in esecuzione con le versioni upstream corrette (nota: i pacchetti delle distribuzioni sono ancora in fase di rilascio) |
CIFS_UTILS | Rileva l'installazione di cifs-utils e la versione sfruttabile (>= 6.14) |
CIFS_MODULE | Verifica se il modulo kernel CIFS è caricato, integrato nel kernel o nella blacklist |
USERNS | Legge il sysctl kernel.unprivileged_userns_clone o user.max_user_namespaces |
REQUESTKEY_RULE | Verifica la presenza di una regola cifs.spnego attiva che richiama cifs.upcall |
MAC_POLICY | Rileva SELinux o AppArmor in modalità enforcing (blocca l'exploit sulle distribuzioni corrette) |
CONTAINER_CAPS | Nei container: verifica la presenza di CAP_SYS_ADMIN (abilita userns senza restrizioni) |
CONTAINER_PROC | Nei container: verifica l'accesso in scrittura a /proc/sys (container privilegiato) |
FIX_SYMBOL | Se CIFS è caricato e /proc/kallsyms è leggibile: verifica che sia presente il simbolo del commit di correzione |