
Script de detección para CIFSwitch - CVE-2026-46243
Un script de shell para comprobar si un sistema Linux está expuesto a CIFSwitch (CVE-2026-46243) — una vulnerabilidad de escalada de privilegios local en el cliente CIFS/SMB del kernel de Linux que existe desde 2007.
Se ejecuta en hosts de metal desnudo, máquinas virtuales y dentro de contenedores. Diseñado para integrarse directamente en pipelines de CI/CD.
CIFSwitch fue revelado el 28 de mayo de 2026 por el investigador de seguridad Asim Manizada. La falla encadena una validación de entrada ausente en el tipo de clave cifs.spnego del kernel con el helper cifs.upcall (con privilegios root) de cifs-utils.
Un usuario local sin privilegios puede llamar a request_key() con una descripción de clave falsificada, lo que hace que el kernel invoque a cifs.upcall como root con campos controlados por el atacante. Con upcall_target=app, el helper entra en el espacio de nombres de montaje del atacante y realiza una búsqueda getpwuid() antes de abandonar los privilegios — cargando un módulo NSS controlado por el atacante y ejecutando código arbitrario como root.
Requisitos previos para la explotación:
cifs-utils >= 6.14 instaladoUn PoC público está disponible en manizada/CIFSwitch.
# Clonar o descargar
curl -O https://raw.githubusercontent.com/liamromanis101/cifswitch-check/main/cifswitch-check.sh
chmod +x cifswitch-check.sh
# Ejecutar de forma interactiva (salida con colores)
./cifswitch-check.sh
# Modo silencioso — solo FAILs y veredicto final
./cifswitch-check.sh --quiet
# Salida JSON — para pipelines de CI/CD, ingesta en SIEM
./cifswitch-check.sh --ci
# Sin colores (texto plano, útil para registros)
./cifswitch-check.sh --no-colour
# Este script también está disponible como SKILL de Agensi:
https://www.agensi.io/skills/cve-2026-46243-cifswitch
| Código | Significado |
|---|---|
0 | No vulnerable, o todas las mitigaciones críticas están en su lugar |
1 | Vulnerable — uno o más cheques en FAIL |
2 | Error del 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. Parchea tu kernel (cuando el paquete de tu distribución esté disponible)
La corrección upstream es el commit 3da1fdf4efbc, encolado para stable en kernels >= 6.18.22, >= 6.19.12 y >= 7.0. Los backports de las distribuciones se están desplegando activamente — consulta el aviso de seguridad de tu proveedor para CVE-2026-46243. Hasta que haya un paquete disponible, aplica las mitigaciones siguientes.
2. Eliminar cifs-utils (rompe la cadena de ataque por completo si no usas montajes CIFS/SMB)
apt remove cifs-utils # Debian / Ubuntu
dnf remove cifs-utils # RHEL / Fedora / AlmaLinux
2. Deshabilitar los espacios de nombres de usuario sin privilegios (bloquea el paso del pivote de espacio de nombres)
# 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
⚠️ Esto puede romper Flatpak, Podman/Docker sin root y el sandboxing de Chrome/Chromium.
3. Deshabilitar la regla request-key de cifs.spnego
sed -i 's|^create cifs.spnego|#create cifs.spnego|' /etc/request-key.d/cifs.spnego.conf
4. Poner en lista negra el módulo del kernel CIFS (si no se usan montajes de red SMB)
echo 'blacklist cifs' >> /etc/modprobe.d/blacklist-cifs.conf
rmmod cifs 2>/dev/null || true
depmod -a
La explotabilidad requiere cifs-utils >= 6.14 instalado y espacios de nombres de usuario sin privilegios habilitados. Las distribuciones confirmadas como vulnerables en su configuración por defecto incluyen AlmaLinux 8/9, RHEL 8/9, CloudLinux 8/9/10 y varias versiones de Ubuntu/Debian con cifs-utils presente.
Distribuciones donde el SELinux/AppArmor por defecto impide la explotación: Ubuntu 26.04, Fedora 40–44, CentOS Stream 10, Rocky Linux 10, AlmaLinux 10, SLES 16, openSUSE Leap 16.
No afectadas: Amazon Linux 2, Kali Linux 2019.4/2020.4 (las versiones de cifs-utils carecen del cambio de espacio de nombres).
Para kernels de distribuciones RHEL/CentOS/Amazon, el script se remite al aviso del proveedor, ya que el estado del backport no puede determinarse de forma fiable solo a partir de la cadena de versión.
bash >= 4.0awk, grep, cut, find, sort)CAP_SYSLOG) para el cheque del símbolo del kernel (FIX_SYMBOL)Este script se proporciona con fines defensivos — para ayudar a los administradores a evaluar y remediar la exposición. Realiza comprobaciones de solo lectura y no hace cambios en el sistema. El exploit PoC no está incluido ni enlazado aquí; consulta el aviso del investigador original para eso.
| Chequeo | Descripción |
|---|
KERNEL_VERSION | Compara el kernel en ejecución con las versiones upstream parcheadas (nota: los paquetes de las distribuciones aún se están desplegando) |
CIFS_UTILS | Detecta la instalación de cifs-utils y su versión explotable (>= 6.14) |
CIFS_MODULE | Comprueba si el módulo del kernel CIFS está cargado, integrado o en lista negra |
USERNS | Lee el sysctl kernel.unprivileged_userns_clone o user.max_user_namespaces |
REQUESTKEY_RULE | Comprueba si hay una regla cifs.spnego activa que invoque a cifs.upcall |
MAC_POLICY | Detecta SELinux o AppArmor en modo enforcing (bloquea la explotación en distribuciones parcheadas) |
CONTAINER_CAPS | En contenedores: comprueba CAP_SYS_ADMIN (habilita userns sin restricciones) |
CONTAINER_PROC | En contenedores: comprueba acceso de escritura a /proc/sys (contenedor privilegiado) |
FIX_SYMBOL | Si CIFS está cargado y /proc/kallsyms es legible: verifica que el símbolo del commit de corrección esté presente |