Критическая уязвимость CIFSwitch в ядре Linux позволяет любому пользователю получить root-доступ

linux

Исследователи безопасности раскрыли технические детали и опубликовали готовый эксплоит для уязвимости, получившей название CIFSwitch. Проблема затрагивает модуль ядра CIFS и сопутствующий инструментарий cifs-utils. Она позволяет непривилегированному пользователю получить полный контроль над системой, повысив свои права до root.

Детали уязвимости

Официального идентификатора CVE пока не присвоено. Исправление существует только в виде патча, который был опубликован 16 мая, а 19 мая его приняли в основную ветку ядра Linux. Однако обновлённых корректирующих выпусков ядра пока нет. Это означает, что большинство пользователей на данный момент остаются без готового обновления.

Уязвимость кроется в коде, отвечающем за поддержку механизма cifs.spnego. Этот механизм используется для аутентификации по протоколу SPNEGO - Simple and Protected GSSAPI Negotiation - при подключении к SMB-серверам. Когда системе требуется получить ключи для аутентификации, ядро вызывает обработчик cifs.upcall, который выполняется с правами root. Проблема в том, что этот обработчик не проверяет достоверность параметров, переданных из ядра. Он доверяет таким полям, как pid, uid, creduid и upcall_target.

Злоумышленник может отправить специально сформированный запрос от имени своего процесса. Для этого нужно инициировать вызов cifs.upcall с поддельным описанием "CIFS SPNEGO". После активации обработчик переключается в пространство имён того пользовательского процесса, который отправил запрос. Другими словами, он начинает работать в изолированной среде, созданной атакующим.

Ключевой момент - возможность создания собственных пространств имён. Атакующий может запустить свой процесс в отдельном пространстве имён точек монтирования. Внутри этой среды он размещает поддельный конфигурационный файл /etc/nsswitch.conf, а также набор подставных библиотек libnss_*.so.2. NSS (Name Service Switch) - это механизм, который определяет, откуда система получает информацию о пользователях, группах и других сетевых ресурсах. Когда обработчик cifs.upcall выполняет NSS-запрос, он загружает библиотеки, находящиеся в том же пространстве имён. В результате вместо стандартных модулей загружаются подставленные злоумышленником библиотеки, но выполняются они уже с правами root.

Эксплуатация уязвимости возможна только при выполнении нескольких условий. В системе должно быть разрешено создание пространств имён идентификаторов пользователей или точек монтирования. Кроме того, требуется установленный пакет cifs-utils. Наибольшую угрозу проблема представляет для дистрибутивов, где этот пакет присутствует по умолчанию. В их числе Linux Mint Cinnamon 21.3 и 22.3, CentOS Stream 9 с окружением GNOME, Rocky Linux 9 Workstation, Kali Linux, AlmaLinux 9.7 Workstation, а также несколько версий SUSE.

В некоторых дистрибутивах для атаки потребуется предварительно установить cifs-utils, но если он уже есть, система находится в зоне риска. Речь идёт о Ubuntu начиная с версии 18.04, Pop!_OS, Debian, openSUSE, Oracle Linux и Amazon Linux. Защитные механизмы вроде SELinux или Apparmor могут заблокировать атаку, если настроены правильно. Такая защита по умолчанию работает, например, в Ubuntu 26.04, Fedora 40 и новее, CentOS Stream 10, Rocky Linux 10 и некоторых других.

Публично доступный эксплоит написан на Python. Он автоматизирует все шаги: от создания подставного окружения до установки собственного правила в sudoers.d, что даёт атакующему возможность выполнять любые команды от имени root без пароля. Автор эксплоита подчёркивает, что код предоставляется исключительно для тестирования и валидации защитных мер. Он требует компиляции встраиваемых модулей C, что гарантирует корректную работу только в целевых условиях.

В качестве временной меры защиты можно заблокировать автоматическую загрузку модуля ядра CIFS. Для этого достаточно создать файл в /etc/modprobe.d, который будет игнорировать попытки загрузки. Также рекомендуется отключить возможность создания пространств имён для непривилегированных пользователей - это снижает вектор атаки. Ещё один вариант - переопределить правило cifs.spnego в настройках cifs-utils так, чтобы оно игнорировало запросы, а не передавало их обработчику.

До выхода стабильных корректирующих выпусков ядра администраторам стоит внимательно оценить, насколько критично использование файлового протокола CIFS в их инфраструктуре. Если без него можно обойтись, лучше временно деактивировать соответствующий модуль ядра или ограничить права на создание пространств имён. В любом случае появление исправленного ядра - лишь вопрос времени, и важно не откладывать его установку. Уязвимость CIFSwitch показывает, как даже относительно старый и хорошо изученный механизм аутентификации может содержать серьёзную брешь, если разработчики не предусмотрели проверку доверенности входных данных.

Ссылки

Комментарии: 0