W narzędziu smb4k używanym w środowisku KDE do wykrywania i montowania partycji SMB zidentyfikowano luki w zabezpieczeniach umożliwiające dostęp do systemu z uprawnieniami roota. Problemy te zostały naprawione w wersji Smb4K 4.0.5. Status nowej wersji pakietu lub poprawki przygotowywanej do dystrybucji można sprawdzić na następujących stronach: Debian, Ubuntu, Fedora, SUSE/openSUSE, Gentoo, Arch i FreeBSD.
Smb4k używa procedur obsługi KAuth działających z uprawnieniami użytkownika root do wykonywania działań uprzywilejowanych. Luki występują w procedurze obsługi Smb4KMountHelper i są spowodowane przez funkcje montowania (CVE-2025-66003) i odmontowywania (CVE-2025-66002) sieciowego systemu plików, które nie filtrują poprawnie opcji przekazywanych do poleceń mount.cifs i unmount.cifs, umożliwiając użytkownikowi bez uprawnień przekazywanie dowolnych opcji do tych poleceń za pośrednictwem parametru mh_options.
Na przykład, używając opcji „filemode=04777,uid=0”, wszystkie pliki na zamontowanej partycji będą oznaczone flagą suid root. Użytkownik może uruchomić serwer SMB i zamontować z niego niestandardową partycję z niezbędnymi plikami wykonywalnymi, które po ustawieniu opcji „filemode=04777,uid=0” zostaną wykonane z uprawnieniami roota.
Obsługujący Smb4KMountHelper nie weryfikował również prawidłowo katalogów docelowych, co na przykład umożliwiało zamontowanie niestandardowej partycji SMB w miejsce katalogu /bin i wstawienie do niej zmodyfikowanej wersji /bin/bash. Co więcej, parametr mh_krb5ticket może służyć do zmiany ścieżki do pliku danych uwierzytelniających Kerberos i wyświetlania zawartości dowolnego pliku, takiego jak /etc/shadow, na wyjściu standardowym (stderr) lub w publicznie dostępnym dzienniku.
Luka w zabezpieczeniach funkcji Smb4KMountHelper::unmount() może zostać wykorzystana do spowodowania odmowy usługi poprzez odmontowanie partycji systemowych poprzez manipulację parametrem mh_mountpoint. Co ciekawe, kod zawierał sprawdzenie typu partycji, które dopuszczało tylko partycje cifs, smbfs i smb3, ale w bloku if brakowało instrukcji „return” zgłaszającej błąd, przez co wykonywanie nie zostało przerwane.
Źródło: opennet.ru
