
CIFSwitch - CVE-2026-46243 탐지 스크립트
리눅스 시스템이 **CIFSwitch(CVE-2026-46243)**에 노출되어 있는지 확인하는 셸 스크립트입니다. CIFSwitch는 2007년부터 존재해 온 리눅스 커널 CIFS/SMB 클라이언트의 로컬 권한 상승 취약점입니다.
베어메탈 호스트, VM, 컨테이너 내부에서 실행됩니다. CI/CD 파이프라인에 바로 적용할 수 있도록 설계되었습니다.
CIFSwitch는 보안 연구원 Asim Manizada가 2026년 5월 28일에 공개했습니다. 이 결함은 커널의 cifs.spnego 키 유형에 대한 입력 검증 누락과 cifs-utils의 루트 권한 cifs.upcall 헬퍼를 연쇄적으로 악용합니다.
권한이 없는 로컬 사용자는 위조된 키 설명과 함께 request_key()를 호출하여 커널이 공격자가 제어하는 필드로 cifs.upcall을 루트 권한으로 호출하도록 만들 수 있습니다. upcall_target=app인 경우 헬퍼는 공격자의 마운트 네임스페이스에 진입하여 권한을 내리기 전에 getpwuid() 조회를 수행하며, 이때 공격자가 제어하는 NSS 모듈을 로드하고 루트 권한으로 임의 코드를 실행합니다.
악용을 위한 전제 조건:
cifs-utils >= 6.14 설치공개 PoC는 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 보유 여부 확인 (무제한 userns 활성화) |
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
# This script is also available as a SKILL from Agensi:
https://www.agensi.io/skills/cve-2026-46243-cifswitch
| 코드 | 의미 |
|---|---|
0 | 취약하지 않음, 또는 모든 중요 완화 조치가 적용됨 |
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, 루트리스 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)에는 루트(또는 CAP_SYSLOG) 권한이 필요합니다.