
Script de détection pour CIFSwitch - CVE-2026-46243
Un script shell pour vérifier si un système Linux est exposé à CIFSwitch (CVE-2026-46243) — une vulnérabilité d'escalade de privilèges locale dans le client CIFS/SMB du noyau Linux, présente depuis 2007.
Fonctionne sur les machines physiques, les VM et dans les conteneurs. Conçu pour s'intégrer directement dans les pipelines CI/CD.
CIFSwitch a été divulgué le 28 mai 2026 par le chercheur en sécurité Asim Manizada. La faille enchaîne une validation d'entrée manquante dans le type de clé cifs.spnego du noyau avec l'assistant rootful cifs.upcall de cifs-utils.
Un utilisateur local non privilégié peut appeler request_key() avec une description de clé forgée, ce qui amène le noyau à invoquer cifs.upcall en tant que root avec des champs contrôlés par l'attaquant. Avec upcall_target=app, l'assistant entre dans l'espace de noms de montage de l'attaquant et effectue une recherche getpwuid() avant d'abaisser les privilèges — chargeant un module NSS contrôlé par l'attaquant et exécutant du code arbitraire en tant que root.
Prérequis pour l'exploitation :
cifs-utils >= 6.14 installéUn PoC public est disponible sur manizada/CIFSwitch.
# Cloner ou télécharger
curl -O https://raw.githubusercontent.com/liamromanis101/cifswitch-check/main/cifswitch-check.sh
chmod +x cifswitch-check.sh
# Exécution interactive (sortie colorée)
./cifswitch-check.sh
# Mode silencieux — seulement les ÉCHEC et le verdict final
./cifswitch-check.sh --quiet
# Sortie JSON — pour pipelines CI/CD, ingestion SIEM
./cifswitch-check.sh --ci
# Sans couleur (texte brut, utile pour les logs)
./cifswitch-check.sh --no-colour
# Ce script est également disponible en tant que SKILL sur Agensi :
https://www.agensi.io/skills/cve-2026-46243-cifswitch
| Code | Signification |
|---|---|
0 | Non vulnérable, ou toutes les atténuations critiques en place |
1 | Vulnérable — un ou plusieurs échecs |
2 | Erreur du script |
CIFSwitch Vulnerability Check (CVE-2026-46243)
Kernel: 6.18.5 Host: myserver Container: false
────────────────────────────────────────────────────────────────────────
[FAIL] KERNEL_VERSION Le noyau 6.18.5 semble non corrigé. Corrigé dans : >= 6.18.22, >= 6.19.12, >= 7.0. Mettez à jour votre noyau.
[PASS] CIFS_UTILS cifs-utils NON installé — assistant cifs.upcall absent, chaîne d'attaque rompue
[PASS] CIFS_MODULE Module noyau CIFS absent de ce système
[FAIL] USERNS user.max_user_namespaces = 15980 (non nul). Désactivez pour bloquer l'étape d'espace de noms :
[PASS] REQUESTKEY_RULE Aucune règle request-key cifs.spnego trouvée — cifs.upcall rootful ne sera pas invoqué
[WARN] MAC_POLICY Aucune politique MAC (SELinux/AppArmor) en vigueur détectée
[ -- ] FIX_SYMBOL Module CIFS non chargé — vérification du symbole ignorée
────────────────────────────────────────────────────────────────────────
VERDICT: VULNÉRABLE — correction requise
Référence : 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": "Le noyau 6.18.5 semble non corrigé. Corrigé dans : >= 6.18.22, >= 6.19.12, >= 7.0. Mettez à jour votre noyau."},
{"check": "CIFS_UTILS", "status": "PASS", "detail": "cifs-utils NON installé — assistant cifs.upcall absent, chaîne d'attaque rompue"},
{"check": "CIFS_MODULE", "status": "PASS", "detail": "Module noyau CIFS absent de ce système"},
{"check": "USERNS", "status": "FAIL", "detail": "user.max_user_namespaces = 15980 (non nul). Désactivez pour bloquer l'étape d'espace de noms :"},
{"check": "REQUESTKEY_RULE","status": "PASS", "detail": "Aucune règle request-key cifs.spnego trouvée — cifs.upcall rootful ne sera pas invoqué"},
{"check": "MAC_POLICY", "status": "WARN", "detail": "Aucune politique MAC (SELinux/AppArmor) en vigueur détectée"},
{"check": "FIX_SYMBOL", "status": "INFO", "detail": "Module CIFS non chargé — vérification du symbole ignorée"}
]
}
- 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. Corrigez votre noyau (quand le paquet de votre distribution sera disponible)
Le correctif amont est le commit 3da1fdf4efbc, mis en file d'attente pour les noyaux stables >= 6.18.22, >= 6.19.12 et >= 7.0. Les rétroports des distributions sont en cours de déploiement — consultez l'avis de sécurité de votre fournisseur pour CVE-2026-46243. En attendant un paquet, appliquez les atténuations ci-dessous.
2. Supprimez cifs-utils (rompt la chaîne d'attaque complètement si vous n'utilisez pas de montages CIFS/SMB)
apt remove cifs-utils # Debian / Ubuntu
dnf remove cifs-utils # RHEL / Fedora / AlmaLinux
2. Désactivez les espaces de noms utilisateur non privilégiés (bloque l'étape de pivotement d'espace de noms)
# Debian / Ubuntu
sysctl -w kernel.unprivileged_userns_clone=0
echo 'kernel.unprivileged_userns_clone=0' >> /etc/sysctl.d/99-cifswitch.conf
# RHEL / Fedora / amont
sysctl -w user.max_user_namespaces=0
⚠️ Cela peut casser Flatpak, Podman/Docker sans root, et le sandboxing de Chrome/Chromium.
3. Désactivez la règle request-key cifs.spnego
sed -i 's|^create cifs.spnego|#create cifs.spnego|' /etc/request-key.d/cifs.spnego.conf
4. Mettez sur liste noire le module noyau CIFS (si les montages réseau SMB ne sont pas utilisés)
echo 'blacklist cifs' >> /etc/modprobe.d/blacklist-cifs.conf
rmmod cifs 2>/dev/null || true
depmod -a
L'exploitabilité nécessite cifs-utils >= 6.14 installé et des espaces de noms utilisateur non privilégiés activés. Les distributions confirmées vulnérables en configuration par défaut incluent AlmaLinux 8/9, RHEL 8/9, CloudLinux 8/9/10, et plusieurs versions Ubuntu/Debian avec cifs-utils présent.
Distributions où SELinux/AppArmor par défaut empêche l'exploitation : Ubuntu 26.04, Fedora 40–44, CentOS Stream 10, Rocky Linux 10, AlmaLinux 10, SLES 16, openSUSE Leap 16.
Non affectées : Amazon Linux 2, Kali Linux 2019.4/2020.4 (les versions de cifs-utils manquent du changement d'espace de noms).
Pour les noyaux des distributions RHEL/CentOS/Amazon, le script se réfère à l'avis du fournisseur, car le statut des rétroports ne peut pas être déterminé de manière fiable à partir de la seule chaîne de version.
bash >= 4.0awk, grep, cut, find, sort)CAP_SYSLOG) nécessaire pour la vérification du symbole du noyau (FIX_SYMBOL)Ce script est fourni à des fins défensives — pour aider les administrateurs à évaluer et à remédier à l'exposition. Il effectue des vérifications en lecture seule et n'apporte aucune modification au système. L'exploit PoC n'est pas inclus ni lié ici ; reportez-vous à l'avis du chercheur original pour cela.
| Vérification | Description |
|---|
KERNEL_VERSION | Compare le noyau en cours d'exécution avec les versions amont corrigées (remarque : les paquets des distributions sont encore en cours de déploiement) |
CIFS_UTILS | Détecte l'installation de cifs-utils et la version exploitable (>= 6.14) |
CIFS_MODULE | Vérifie si le module noyau CIFS est chargé, intégré ou mis sur liste noire |
USERNS | Lit kernel.unprivileged_userns_clone ou user.max_user_namespaces (sysctl) |
REQUESTKEY_RULE | Vérifie la présence d'une règle cifs.spnego active appelant cifs.upcall |
MAC_POLICY | Détecte SELinux ou AppArmor en vigueur (bloque l'exploit sur les distributions corrigées) |
CONTAINER_CAPS | Dans les conteneurs : vérifie la présence de CAP_SYS_ADMIN (permet un userns sans restriction) |
CONTAINER_PROC | Dans les conteneurs : vérifie l'accès en écriture à /proc/sys (conteneur privilégié) |
FIX_SYMBOL | Si CIFS est chargé et /proc/kallsyms est lisible : vérifie la présence du symbole du correctif |