liamromanis101/cifswitch-check

GitHub: liamromanis101/cifswitch-check

cifswitch-check是一款用于检测Linux系统CVE-2026-46243漏洞的检测脚本。

Stars: 0 | Forks: 0

# cifswitch-check 一个用于检查Linux系统是否暴露于**CIFSwitch (CVE-2026-46243)**的shell脚本——这是Linux内核CIFS/SMB客户端中的一个本地提权漏洞,自2007年以来一直存在。 在裸机主机、虚拟机以及容器内运行。设计用于直接集成到CI/CD管道中。 ## 背景 CIFSwitch于2026年5月28日由安全研究员[Asim Manizada](https://heyitsas.im/posts/cifswitch/)披露。该漏洞通过内核的`cifs.spnego`密钥类型中缺少输入验证与`cifs-utils`的rootful `cifs.upcall`辅助程序相结合。 未授权的本地用户可以调用`request_key()`并使用伪造的密钥描述,导致内核以root权限调用`cifs.upcall`,并使用攻击者控制的字段。当`upcall_target=app`时,辅助程序进入攻击者的挂载命名空间,在降级权限之前执行`getpwuid()`查找——加载攻击者控制的NSS模块并以root权限执行任意代码。 **利用前提条件:** - 易受攻击的内核(自2007年以来存在,在6.18.22 / 6.19.12 / 7.0+中修复) - 安装了`cifs-utils` >= 6.14 - 启用了未授权用户命名空间(大多数发行版默认启用) - 没有强制执行的SELinux/AppArmor策略阻止路径 公共PoC可在[manizada/CIFSwitch](https://github.com/manizada/CIFSwitch)找到。 ## 检查内容 | 检查 | 描述 | |---|---| | `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`(启用无限制的用户命名空间) | | `CONTAINER_PROC` | 在容器中:检查对`/proc/sys`的写入访问(特权容器) | | `FIX_SYMBOL` | 如果CIFS已加载且`/proc/kallsyms`可读:验证修复提交符号是否存在 | ## 使用方法 ``` # 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 ``` ### 退出代码 | 代码 | 含义 | |---|---| | `0` | 无漏洞,或所有关键缓解措施已就位 | | `1` | 易受攻击——一个或多个检查失败 | | `2` | 脚本错误 | ## 示例输出 ### 交互式(人类可读) ``` 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/ ``` ### JSON (`--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"} ] } ``` ## CI/CD集成 ### GitHub Actions ``` - 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 ``` ### GitLab CI ``` cifswitch-check: stage: security script: - chmod +x cifswitch-check.sh - ./cifswitch-check.sh --ci > cifswitch-result.json artifacts: paths: - cifswitch-result.json ``` ### Jenkins ``` 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 ``` **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.0 - 标准核心工具(`awk`、`grep`、`cut`、`find`、`sort`) - 大多数检查无需root权限;对于内核符号检查(`FIX_SYMBOL`)需要root(或`CAP_SYSLOG`) ## 参考资料 - [原始研究员报告 — Asim Manizada](https://heyitsas.im/posts/cifswitch/) - [SecurityWeek报道](https://www.securityweek.com/19-year-old-linux-kernel-vulnerability-exposes-systems-to-root-access/) - [BleepingComputer报道](https://www.bleepingcomputer.com/news/security/new-cifswitch-linux-flaw-gives-root-on-multiple-distributions/) - [CloudLinux安全公告和缓解指南](https://blog.cloudlinux.com/cifswitch-mitigation-and-kernel-update) - [AlmaLinux安全公告](https://almalinux.org/blog/2026-05-28-cifswitch/) - [上游修复提交 — 3da1fdf4efbc](https://github.com/torvalds/linux/commit/3da1fdf4efbc490041eb4f836bf596201203f8f2) - [NVD — CVE-2026-46243](https://nvd.nist.gov/vuln/detail/CVE-2026-46243) ## 免责声明 此脚本提供用于防御目的——帮助管理员评估和修复暴露。它执行只读检查,不对系统进行任何更改。PoC漏洞利用程序不包括或链接在此处;请参阅原始研究员的公告。
标签:CIFS/SMB, CIFSwitch, CVE-2026-46243, Linux内核, Maven, 内核漏洞, 子域名枚举, 安全测试, 安全漏洞, 安全漏洞修复, 安全漏洞审计, 安全漏洞扫描, 安全漏洞检测, 安全漏洞测试, 安全漏洞研究, 安全漏洞防护, 安全漏洞防护工具, 安全漏洞防护手段, 安全漏洞防护技术, 安全漏洞防护措施, 安全漏洞防护方案, 安全漏洞防护方法, 安全漏洞防护策略, 安全漏洞验证, 安全脚本, 安全防护, 攻击性安全, 本地提权, 漏洞修复, 漏洞验证, 系统安全, 网络安全培训