
CIFSwitch - CVE-2026-46243 の検出スクリプト
LinuxシステムがCIFSwitch(CVE-2026-46243) — 2007年から存在するLinuxカーネルのCIFS/SMBクライアントにおけるローカル権限昇格の脆弱性 — にさらされているかどうかを確認するシェルスクリプト。
ベアメタルホスト、VM、コンテナ内部で動作。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で入手可能です。
# Clone or download
curl -O https://raw.githubusercontent.com/liamromanis101/cifswitch-check/main/cifswitch-check.sh
chmod +x cifswitch-check.sh
# 対話的に実行(色付き出力)
./cifswitch-check.sh
# 静音モード — FAILと最終判定のみ表示
./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 | 脆弱 — 1つ以上のFAILチェックがある |
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/
--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. カーネルをパッチする(ディストリビューションパッケージが利用可能になったら)
上流の修正はコミット3da1fdf4efbcで、カーネル>= 6.18.22、>= 6.19.12、>= 7.0のstableにキューイングされています。ディストリビューションのバックポートは積極的にロールアウト中です — 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、rootless 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が読み取り可能な場合:修正コミットのシンボルが存在するか検証します |