Sploitus

Exploit for cifswitch-check

kitploit · 2026-08-25

Exploit Code

MARKDOWN250 lines
## 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-эксплойт здесь не включён и не указан; за ним обращайтесь к исходной публикации исследователя.