
CIFSwitch के लिए डिटेक्शन स्क्रिप्ट - CVE-2026-46243
एक शेल स्क्रिप्ट जो यह जाँचने के लिए है कि क्या कोई लिनक्स सिस्टम CIFSwitch (CVE-2026-46243) — लिनक्स कर्नेल के CIFS/SMB क्लाइंट में 2007 से मौजूद एक स्थानीय विशेषाधिकार वृद्धि भेद्यता — के संपर्क में है।
बेयर-मेटल होस्ट, VM, और कंटेनरों के अंदर चलता है। सीधे CI/CD पाइपलाइनों में डालने के लिए डिज़ाइन किया गया है।
CIFSwitch को 28 मई 2026 को सुरक्षा शोधकर्ता Asim Manizada द्वारा खुलासा किया गया था। यह खामी कर्नेल के cifs.spnego कुंजी प्रकार में इनपुट सत्यापन की कमी को cifs-utils से रूटफुल cifs.upcall हेल्पर के साथ जोड़ती है।
एक अनप्रिविलेज्ड स्थानीय उपयोगकर्ता गढ़े गए कुंजी विवरण के साथ request_key() को कॉल कर सकता है, जिससे कर्नेल cifs.upcall को रूट के रूप में हमलावर-नियंत्रित फ़ील्ड के साथ लागू करता है। upcall_target=app के साथ, हेल्पर हमलावर के माउंट नेमस्पेस में प्रवेश करता है और विशेषाधिकार छोड़ने से पहले एक getpwuid() लुकअप करता है — एक हमलावर-नियंत्रित NSS मॉड्यूल लोड करता है और रूट के रूप में मनमाना कोड निष्पादित करता है।
शोषण के लिए पूर्वापेक्षाएँ:
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
# मौन मोड — केवल 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 | असुरक्षित — एक या अधिक FAIL जाँच |
2 | स्क्रिप्ट त्रुटि |
CIFSwitch भेद्यता जाँच (CVE-2026-46243)
कर्नेल: 6.18.5 होस्ट: myserver कंटेनर: false
────────────────────────────────────────────────────────────────────────
[FAIL] KERNEL_VERSION कर्नेल 6.18.5 अपैच्ड प्रतीत होता है। ठीक किया गया: >= 6.18.22, >= 6.19.12, >= 7.0 में। अपना कर्नेल अपडेट करें।
[PASS] CIFS_UTILS cifs-utils स्थापित नहीं — cifs.upcall हेल्पर अनुपस्थित, हमला श्रृंखला टूट गई
[PASS] CIFS_MODULE इस सिस्टम पर CIFS कर्नेल मॉड्यूल मौजूद नहीं
[FAIL] USERNS user.max_user_namespaces = 15980 (शून्येतर)। नेमस्पेस चरण को अवरुद्ध करने के लिए अक्षम करें:
[PASS] REQUESTKEY_RULE कोई cifs.spnego अनुरोध-कुंजी नियम नहीं मिला — rootful cifs.upcall लागू नहीं किया जाएगा
[WARN] 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 भेद्यता जाँच
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 जाँच') {
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, रूटलेस Podman/Docker, और Chrome/Chromium सैंडबॉक्सिंग को तोड़ सकता है।
3. cifs.spnego अनुरोध-कुंजी नियम अक्षम करें
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) आवश्यक हैयह स्क्रिप्ट रक्षात्मक उद्देश्यों के लिए प्रदान की गई है — व्यवस्थापकों को एक्सपोज़र का आकलन और उपचार करने में मदद करने के लिए। यह केवल-पढ़ने योग्य जाँच करती है और सिस्टम में कोई बदलाव नहीं करती है। 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 पढ़ने योग्य है: फिक्स कमिट प्रतीक की उपस्थिति सत्यापित करता है |