Lokalne luki w zabezpieczeniach root w zestawie narzędzi do zarządzania pakietami Snap

Firma Qualys zidentyfikowała dwie luki w zabezpieczeniach (CVE-2021-44731, CVE-2021-44730) w narzędziu snap-confine, dostarczanym z flagą główną SUID i wywoływanymi przez proces snapd w celu utworzenia środowiska wykonywalnego dla aplikacji dostarczanych w samodzielnych pakietach w formacie snapa. Luki umożliwiają lokalnemu, nieuprzywilejowanemu użytkownikowi wykonanie kodu w systemie z uprawnieniami roota. Problemy zostały rozwiązane w dzisiejszej aktualizacji pakietu Snapd dla Ubuntu 21.10, 20.04 i 18.04.

Pierwsza luka (CVE-2021-44730) umożliwia atak poprzez manipulację twardymi łączami, ale wymaga wyłączenia systemowej ochrony twardych łączy (ustawienie sysctl fs.protected_hardlinks na 0). Problem jest spowodowany błędną weryfikacją lokalizacji plików wykonywalnych programów pomocniczych snap-update-ns i snap-discard-ns uruchomionych jako root. Ścieżka do tych plików została obliczona w funkcji sc_open_snapd_tool() w oparciu o własną ścieżkę z /proc/self/exe, co pozwala na utworzenie twardego linku do snap-confine w twoim katalogu i umieszczenie własnych wersji snap- update-ns i snap- Utilities w tym katalogudist-ns. Po uruchomieniu przez twardy link snap-confine z uprawnieniami roota uruchomi pliki snap-update-ns i snap-discard-ns z bieżącego katalogu zastąpionego przez atakującego.

Druga luka jest spowodowana sytuacją wyścigową i można ją wykorzystać w domyślnej konfiguracji Ubuntu Desktop. Aby exploit działał pomyślnie na Ubuntu Server, podczas instalacji musisz wybrać jeden z pakietów z sekcji „Polecane przystawki serwera”. Sytuacja wyścigu jest widoczna w funkcji setup_private_mount() wywoływanej podczas przygotowywania przestrzeni nazw punktu podłączenia dla pakietu snap. Ta funkcja tworzy katalog tymczasowy „/tmp/snap.$SNAP_NAME/tmp” lub używa istniejącego katalogu do podłączenia do niego katalogów dla pakietu snap.

Ponieważ nazwa katalogu tymczasowego jest przewidywalna, atakujący może zastąpić jego zawartość dowiązaniem symbolicznym po sprawdzeniu właściciela, ale przed wywołaniem wywołania systemowego mount. Na przykład możesz utworzyć dowiązanie symboliczne „/tmp/snap.lxd/tmp” w katalogu /tmp/snap.lxd wskazujące na dowolny katalog, a wywołanie metody mount() nastąpi po dowiązaniu symbolicznym i zamontuje katalog w przyciągnij przestrzeń nazw. W podobny sposób możesz zamontować swoją zawartość w /var/lib i zastępując /var/lib/snapd/mount/snap.snap-store.user-fstab zorganizować montowanie katalogu /etc w przestrzeni nazw pakiet snap do organizowania ładowania biblioteki z uprawnieniami roota, zastępując plik /etc/ld.so.preload.

Należy zauważyć, że stworzenie exploita okazało się zadaniem nietrywialnym, gdyż narzędzie snap-confine jest napisane w Go przy użyciu bezpiecznych technik programowania, posiada ochronę opartą na profilach AppArmor, filtruje wywołania systemowe w oparciu o mechanizm seccomp i wykorzystuje przestrzeń nazw montowania w celu izolacji. Jednak badaczom udało się przygotować działający exploit umożliwiający uzyskanie praw roota w systemie. Kod exploita zostanie opublikowany w ciągu kilku tygodni po zainstalowaniu przez użytkowników dostarczonych aktualizacji.

Źródło: opennet.ru

Dodaj komentarz