一个用于检查 Linux 系统是否暴露于 CIFSwitch (CVE-2026-46243) 的 Shell 脚本——这是一个自 2007 年以来一直存在于 Linux 内核 CIFS/SMB 客户端中的本地权限提升漏洞。
可在裸机主机、虚拟机以及容器内运行。设计用于直接嵌入 CI/CD 管道。
CIFSwitch 于 2026 年 5 月 28 日由安全研究员 Asim Manizada 披露。该漏洞将内核 cifs.spnego 密钥类型中缺失的输入验证与 cifs-utils 中拥有 root 权限的 cifs.upcall 辅助程序串联起来。
一个无特权的本地用户可以调用 request_key() 并传入伪造的密钥描述,导致内核以 root 权限调用 cifs.upcall,且参数由攻击者控制。当 upcall_target=app 时,辅助程序会进入攻击者的挂载命名空间,在执行 getpwuid() 查询后才会降权——从而加载攻击者控制的 NSS 模块并以 root 权限执行任意代码。
利用前提条件:
cifs-utils >= 6.14公开 PoC 可在 manizada/CIFSwitch 获取。
# 克隆或下载
curl -O https://raw.githubusercontent.com/liamromanis101/cifswitch-check/main/cifswitch-check.sh
chmod +x cifswitch-check.sh
# 交互式运行(彩色输出)
./cifswitch-check.sh
# 静默模式——仅显示失败项和最终结论
./cifswitch-check.sh --quiet
# JSON 输出——适用于 CI/CD 管道、SIEM 接入
./cifswitch-check.sh --ci
# 无颜色输出(纯文本,适用于日志记录)
./cifswitch-check.sh --no-colour
# 该脚本也可作为 Agensi 的 SKILL 使用:
https://www.agensi.io/skills/cve-2026-46243-cifswitch
| 退出码 | 含义 |
|---|---|
0 | 不存在漏洞,或所有关键缓解措施已到位 |
1 | 存在漏洞——一项或多项检查失败 |
2 | 脚本错误 |
CIFSwitch 漏洞检查 (CVE-2026-46243)
内核: 6.18.5 主机: myserver 容器: false
────────────────────────────────────────────────────────────────────────
[失败] KERNEL_VERSION 内核 6.18.5 似乎未修补。修复版本: >= 6.18.22, >= 6.19.12, >= 7.0。请更新您的内核。
[通过] CIFS_UTILS cifs-utils 未安装 —— cifs.upcall 辅助程序不存在,攻击链已断裂
[通过] CIFS_MODULE CIFS 内核模块在此系统上不存在
[失败] USERNS user.max_user_namespaces = 15980(非零)。请禁用以阻止命名空间步骤:
[通过] REQUESTKEY_RULE 未找到 cifs.spnego request-key 规则 —— 拥有 root 权限的 cifs.upcall 将不会被调用
[警告] MAC_POLICY 未检测到强制 MAC 策略(SELinux/AppArmor)
[ -- ] FIX_SYMBOL CIFS 模块未加载 —— 跳过内核符号检查
────────────────────────────────────────────────────────────────────────
结论: 存在漏洞 —— 需要修复
参考: 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
# 退出码 1 将在运行器存在漏洞时导致步骤失败
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. 修补内核(当您的发行版软件包可用时)
上游修复提交为 3da1fdf4efbc,已排队等待稳定版内核 >= 6.18.22、>= 6.19.12 和 >= 7.0。各发行版的后向移植正在积极推出——请查看您厂商的 CVE-2026-46243 安全公告。在软件包可用之前,请应用以下缓解措施。
2. 移除 cifs-utils(如果您不使用 CIFS/SMB 挂载,这完全打破了攻击链)
apt remove cifs-utils # Debian / Ubuntu
dnf remove cifs-utils # RHEL / Fedora / AlmaLinux
2. 禁用无特权的用户命名空间(阻止命名空间切换步骤)
# 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
⚠️ 这可能会破坏 Flatpak、无 root 的 Podman/Docker 以及 Chrome/Chromium 沙箱。
3. 禁用 cifs.spnego request-key 规则
sed -i 's|^create cifs.spnego|#create cifs.spnego|' /etc/request-key.d/cifs.spnego.conf
4. 将 CIFS 内核模块加入黑名单(如果未使用 SMB 网络挂载)
echo 'blacklist cifs' >> /etc/modprobe.d/blacklist-cifs.conf
rmmod cifs 2>/dev/null || true
depmod -a
漏洞可利用性要求已安装 cifs-utils >= 6.14 且启用无特权的用户命名空间。确认在默认配置下存在漏洞的发行版包括 AlmaLinux 8/9、RHEL 8/9、CloudLinux 8/9/10 以及部分安装了 cifs-utils 的 Ubuntu/Debian 版本。
默认情况下 SELinux/AppArmor 阻止漏洞利用的发行版:Ubuntu 26.04、Fedora 40–44、CentOS Stream 10、Rocky Linux 10、AlmaLinux 10、SLES 16、openSUSE Leap 16。
不受影响的发行版:Amazon Linux 2、Kali Linux 2019.4/2020.4(cifs-utils 版本缺少命名空间切换功能)。
对于 RHEL/CentOS/Amazon 发行版内核,脚本将参考厂商安全公告,因为仅凭版本字符串无法可靠确定后向移植状态。
bash >= 4.0awk、grep、cut、find、sort)FIX_SYMBOL)需要 root(或 CAP_SYSLOG)权限本脚本仅供防御目的——帮助管理员评估和修复暴露风险。它执行只读检查,不会对系统进行任何更改。PoC 利用代码不包含在此处,也未在此提供链接;请参考原始研究人员的安全公告。
| 检查项 | 描述 |
|---|
KERNEL_VERSION | 将正在运行的内核与已修补的上游版本进行比较(注意:发行版软件包仍在推出中) |
CIFS_UTILS | 检测 cifs-utils 安装情况以及可利用的版本(>= 6.14) |
CIFS_MODULE | 检查 CIFS 内核模块是否已加载、内建或列入黑名单 |
USERNS | 读取 kernel.unprivileged_userns_clone 或 user.max_user_namespaces sysctl 值 |
REQUESTKEY_RULE | 检查是否存在调用 cifs.upcall 的活跃 cifs.spnego 规则 |
MAC_POLICY | 检测是否启用了强制性的 SELinux 或 AppArmor(在修补后的发行版上会阻止漏洞利用) |
CONTAINER_CAPS | 在容器中:检查是否持有 CAP_SYS_ADMIN 能力(允许无限制的 userns) |
CONTAINER_PROC | 在容器中:检查是否具有 /proc/sys 的写权限(特权容器) |
FIX_SYMBOL | 如果 CIFS 已加载且 /proc/kallsyms 可读:验证修复提交的内核符号是否存在 |