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, 内核漏洞, 子域名枚举, 安全测试, 安全漏洞, 安全漏洞修复, 安全漏洞审计, 安全漏洞扫描, 安全漏洞检测, 安全漏洞测试, 安全漏洞研究, 安全漏洞防护, 安全漏洞防护工具, 安全漏洞防护手段, 安全漏洞防护技术, 安全漏洞防护措施, 安全漏洞防护方案, 安全漏洞防护方法, 安全漏洞防护策略, 安全漏洞验证, 安全脚本, 安全防护, 攻击性安全, 本地提权, 漏洞修复, 漏洞验证, 系统安全, 网络安全培训