## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-LIAMROMANIS101-CIFSWITCH-CHECK
# cifswitch-check
Скрипт для оболочки, проверяющий, подвержена ли система Linux уязвимости **CIFSwitch (CVE-2026-46243)** — локальной уязвимости повышения привилегий в клиенте CIFS/SMB ядра Linux, присутствующей с 2007 года.
Работает на физических хостах, виртуальных машинах и внутри контейнеров. Предназначен для прямого использования в конвейерах CI/CD.
* * *
## Описание
CIFSwitch была раскрыта 28 мая 2026 года исследователем безопасности Asim Manizada. Уязвимость объединяет отсутствие проверки входных данных в типе ключа `cifs.spnego` ядра с привилегированной программой-помощником `cifs.upcall` из пакета `cifs-utils`.
Непривилегированный локальный пользователь может вызвать `request_key()` с поддельным описанием ключа, что заставит ядро запустить `cifs.upcall` от root с контролируемыми атакующим полями. При `upcall_target=app` помощник входит в пространство имён монтирования атакующего и выполняет поиск `getpwuid()` перед понижением привилегий — загружая управляемый атакующим модуль NSS и выполняя произвольный код от root.
**Необходимые условия для эксплуатации:**
* Уязвимое ядро (присутствует с 2007 года, исправлено в 6.18.22 / 6.19.12 / 7.0+)
* Установлен `cifs-utils` >= 6.14
* Включены непривилегированные пользовательские пространства имён (по умолчанию в большинстве дистрибутивов)
* Отсутствуют принудительные политики SELinux/AppArmor, блокирующие данный путь
Публичный PoC доступен на manizada/CIFSwitch.
* * *
## Что проверяется
* * *
## Использование
root@kitploit:~
# Клонировать или скачать
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
# Этот скрипт также доступен как SKILL от Agensi:
https://www.agensi.io/skills/cve-2026-46243-cifswitch
### Коды завершения
Код| Значение
---|---
`0`| Не уязвим, или все критические меры смягчения применены
`1`| Уязвим — одна или несколько проверок FAIL
`2`| Ошибка скрипта
* * *
## Пример вывода
### Интерактивный (удобочитаемый)
root@kitploit:~
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`)
root@kitploit:~
{
"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
root@kitploit:~
- 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
root@kitploit:~
cifswitch-check:
stage: security
script:
- chmod +x cifswitch-check.sh
- ./cifswitch-check.sh --ci > cifswitch-result.json
artifacts:
paths:
- cifswitch-result.json
### Jenkins
root@kitploit:~
stage('CIFSwitch Check') {
steps {
sh 'chmod +x cifswitch-check.sh && ./cifswitch-check.sh --ci > cifswitch-result.json'
archiveArtifacts artifacts: 'cifswitch-result.json'
}
}
* * *
## Меры смягчения (если исправление невозможно сразу)
**1\. Исправьте ядро** (когда пакет вашего дистрибутива станет доступен)
Исправление upstream — коммит `3da1fdf4efbc`, помещённый в стабильные версии ядер >= 6.18.22, >= 6.19.12 и >= 7.0. Обратные порты для дистрибутивов активно распространяются — проверьте бюллетень безопасности вашего вендора по CVE-2026-46243. Пока пакет не доступен, примените меры смягчения ниже.
**2\. Удалите cifs-utils** (полностью разрывает цепочку атаки, если вы не используете CIFS/SMB-монтирования)
root@kitploit:~
apt remove cifs-utils # Debian / Ubuntu
dnf remove cifs-utils # RHEL / Fedora / AlmaLinux
**2\. Отключите непривилегированные пользовательские пространства имён** (блокирует этап смены пространства имён)
root@kitploit:~
# 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**
root@kitploit:~
sed -i 's|^create cifs.spnego|#create cifs.spnego|' /etc/request-key.d/cifs.spnego.conf
**4\. Заблокируйте модуль ядра CIFS** (если сетевые монтирования SMB не используются)
root@kitploit:~
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, а также несколько выпусков Ubuntu/Debian с установленным `cifs-utils`.
Дистрибутивы, в которых 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
* Стандартные coreutils (`awk`, `grep`, `cut`, `find`, `sort`)
* Для большинства проверок root не требуется; root (или `CAP_SYSLOG`) необходим для проверки символа ядра (`FIX_SYMBOL`)
* * *
## Ссылки
* Оригинальная статья исследователя — Asim Manizada
* Статья SecurityWeek
* Статья BleepingComputer
* Бюллетень и руководство по смягчению от CloudLinux
* Бюллетень AlmaLinux
* Исправляющий коммит upstream — 3da1fdf4efbc
* NVD — CVE-2026-46243
* * *
## Отказ от ответственности
Этот скрипт предоставлен для защитных целей — чтобы помочь администраторам оценить и устранить подверженность уязвимости. Он выполняет проверки только на чтение и не вносит изменений в систему. PoC-эксплойт здесь не включён и не указан; за ним обращайтесь к исходной публикации исследователя.