Разкрити са детайли и публикуван експлоит за уязвимостта CIFSwitch (CVE все още не е присвоен) в модула на ядрото CIFS и инструментариума cifs-utils, който позволява на непривилегирован потребител да получи права на root в системата. Поправката е налична само под формата на патч, публикуван на 16 май, и на 19 май е приет в основната версия на ядрото на Linux (коригиращи версии на ядрото все още не са налични).
Уязвимостта засяга кода, който предоставя поддръжка на механизма cifs.spnego за извършване на удостоверяване по протокол SPNEGO (Simple and Protected GSSAPI Negotiation) при свързване към SMB сървъри. При използването на cifs.spnego за определяне на ключовете от Kerberos/SPNEGO, ядрото извиква обработчика cifs.upcall, предоставен от пакета cifs-utils и изпълняван в потребителското пространство с права на root.
Непривилегирован потребител може да иницира извикването на обработчика, като изпрати заявка, изискваща получаването на ключа 'cifs.spnego' с фалшиво описание 'CIFS SPNEGO'. В обработчика cifs.upcall не се извършват допълнителни проверки за валидността на параметрите, предадени чрез ядрото, и той приема за надеждни стойности на полетата pid, uid, creduid и upcall_target.
След активирането обработчикът cifs.upcall преминава в пространствата на имената на потребителския процес, от който е изпратено искането, и до нулирането на правата извършва търсене в системната база NSS (Name Service Switch).
Атакуващият може да стартира собствен процес в отделно пространство на имената на точките на монтиране, което ще доведе до извикване на NSS в неговия контекст. За експлоатацията на уязвимостта е достатъчно в създадената от атакуващия среда да се постави собствен файл с конфигурация /etc/nsswitch.conf и набор от подставени библиотеки libnss_*.so.2. Изпълнението на NSS-запитване от обработчика cifs.upcall ще доведе до зареждане на подставените от атакуващия библиотеки с права на root.
За експлоатацията на уязвимостта в системата трябва да е разрешено създаването на пространства на имената на идентификаторите на потребителите (user namespace) или точки на монтиране (mount namespace), както и да е наличен пакетът cifs-utils. Дистрибуции, в които е възможна експлотация на уязвимостта в конфигурация по подразбиране:
- Linux Mint Cinnamon 21.3/22.3
- CentOS Stream 9 GNOME
- Rocky Linux 9 Workstation
- Kali Linux
- AlmaLinux 9.7 Workstation
- SUSE 15 SP7/SAP 15 SP7/SAP 16
Дистрибуции, за които е необходима инсталация на пакета cifs-utils за работа на експлоита:
- Ubuntu 18.04/20.04/22.04 Desktop/Server
- Pop!_OS 22.04 Intel/24.04 Generic
- Ubuntu 24.04 Desktop minimal/full и Server
- Debian 11/12/13 netinst стандартен и GNOME/KDE/стандартен/XFCE
- CentOS Stream 9 Cinnamon/KDE/MATE/XFCE
- Rocky Linux 9 KDE/Workstation-Lite
- openSUSE Leap 15.6 GNOME/KDE
- openSUSE Tumbleweed GNOME/KDE
- Rocky Linux 8 GenericCloud
- Oracle Linux 8/9 KVM
- Amazon Linux 2023 KVM
Дистрибуции, в които по подразбиране се прилагат настройки, блокиращи експлоатацията на уязвимости чрез SELinux или Apparmor, дори при наличието на пакета cifs-utils:
- Ubuntu 26.04 Desktop/Server
- Fedora 40/41/42/43/44 Workstation/Server
- CentOS Stream 10 GNOME/KDE
- Rocky Linux 10 Workstation
- AlmaLinux 10.1 Workstation
- Oracle Linux 10 KVM
- openSUSE Tumbleweed GNOME/KDE
- openSUSE Leap 16.0 OEM GNOME/KDE/Минимална-VM
- SUSE Linux 16
Като обходен вариант за защита, може да се блокира автоматичното зареждане на модула на ядрото cifs:
sh -c «printf ‘install cifs /bin/false\n’ > /etc/modprobe.d/cifs.conf; rmmod cifs 2>/dev/null; true»
Също така може да се забрани използването на user namespace («sysctl -w kernel.unprivileged_userns_clone=0») и да се изтрие или преопредели правилото cifs.spnego в настройките на cifs-utils:
cat >/etc/request-key.d/cifs.spnego.conf <‘EOF’
create cifs.spnego * * /usr/sbin/keyctl negate %k 30 %S
EOF
Междувременно, на 28 май са публикувани 137 отчета за уязвимости в ядрото на Linux, а на 27 май — 277 отчета.
Източник: opennet.ru
