Новая уязвимость CIFSwitch в Linux позволяет получить root-доступ в нескольких дистрибутивах
Недавно обнаруженная уязвимость в ядре Linux, получившая название CIFSwitch, может позволить злоумышленникам подделывать описания ключей аутентификации CIFS, использовать механизм запроса ключей в ядре и получать права суперпользователя.
Проблема затрагивает несколько дистрибутивов Linux, в которых используются уязвимые комбинации ядра CIFS и cifs-utils (версии 6.14 и выше, хотя некоторые более старые версии также подвержены этой проблеме).
CIFS (Common Internet File System) — это сетевой протокол, который обеспечивает доступ к файлам, папкам и устройствам в локальной сети. Linux использует его для монтирования, чтения и записи данных из удаленных систем.
Если сетевой ресурс CIFS использует для аутентификации протокол Kerberos, ядро Linux запрашивает у вспомогательной программы в пользовательском пространстве выполнение аутентификации. Посредником выступает набор инструментов пользовательского пространства cifs-utils.
«Ядро запрашивает ключ cifs.spnego-type, а обычная конфигурация keyutils/request-key запускает cifs.upcall от имени пользователя root для получения или создания материалов Kerberos/SPNEGO», — объясняет Асим Вилади Оглу Манидаза, инженер по безопасности SpaceX, который обнаружил и назвал уязвимость, связанную с повышением привилегий CIFSwitch в Linux.
По словам исследователя, проблема заключается в том, что подсистема CIFS ядра Linux не может проверить, что запросы на использование ключа cifs.spnego исходят от клиента CIFS ядра.
В результате непривилегированный пользователь может создать поддельный запрос cifs.spnego и запустить обычный процесс аутентификации.
Запрос ключа cifs.spnego используется подсистемой связки ключей Linux для получения данных аутентификации, необходимых клиенту CIFS/SMB при подключении к сетевому ресурсу с использованием аутентификации Kerberos/SPNEGO.
Уязвимость позволяет вспомогательному процессу cifs.upcall, работающему с правами суперпользователя, доверять полям, контролируемым злоумышленником, которые, как предполагается, были сгенерированы ядром.
Злоумышленник может загрузить вредоносный модуль NSS и получить root-доступ, воспользовавшись этими полями для принудительного переключения пространства имен и последующего запуска поиска с помощью Name Service Switch (NSS) до отмены привилегий.
Манидаза опубликовал подробный технический отчет, в котором объясняет причину проблемы и то, как ее можно использовать для получения root-доступа.
Последствия, исправления и эксплойт
Манидаза говорит, что CIFSwitch был представлен 19 лет назад, в 2007 году. Он добавляет, что это «неуниверсальная» уязвимость и ее использование зависит от нескольких факторов, например от уязвимой версии ядра.
Среди других необходимых условий — уязвимая версия cifs-utils, наличие пользовательских пространств имён и политики SELinux/AppArmor, которые не блокируют атаку.
Manizada подтверждает, что уязвимыми являются следующие дистрибутивы с конфигурациями по умолчанию:
- Linux Mint 21.3 / 22.3
- CentOS Stream 9
- Rocky Linux 9
- AlmaLinux 9
- Kali Linux 2021.4–2026.1
- SLES 15 SP7
Исследователь отметил, что различные версии Ubuntu, Debian, Pop!_OS, openSUSE, Oracle Linux и Amazon Linux также могут быть уязвимы, если установлен пакет cifs-utils.
Однако существуют и такие версии, как Ubuntu 26.04, Fedora 40–44, CentOS Stream 10, Rocky Linux 10, SLES 16, AlmaLinux 10 и openSUSE Leap 16, в которых настройки SELinux/AppArmor по умолчанию предотвращают использование уязвимостей CIFSwitch.
Кроме того, Amazon Linux 2 и Kali Linux 2019.4 и 2020.4 вообще не затронуты, поскольку в их версиях cifs-utils отсутствует функция переключения пространств имён.
Проблема с CIFSwitch была устранена с помощью патча для ядра, который добавляет проверку источников запросов cifs.spnego (исходный код commit 3da1fdf), но точные версии ядра, в которых установлен этот патч, зависят от дистрибутива.
Исследователь рекомендует пользователям отключать или вносить в черный список модуль CIFS, если он не используется, удалять пакет cifs-utils, если в нем нет необходимости, и отключать непривилегированные пользовательские пространства имен.
Манидаза опубликовал экспериментальный образец (PoC) эксплойт для CIFSwitch, который может помочь организациям проверить эффективность установленных исправлений и мер по смягчению последствий.
CIFSwitch — последняя из серии уязвимостей, связанных с повышением привилегий в системах Linux, о которых стало известно недавно. Среди них — Copy Fail, Dirty Frag, Fragnesia, DirtyDecrypt и PinTheft.
Редактор: AndreyEx