Odkryta w usłudze systemowej polkit siedmioletnia luka LPE (local privilege escalation) może zostać wykorzystana przez złośliwego nieuprzywilejowanego lokalnego atakującego do ominięcia autoryzacji i eskalacji uprawnień do użytkownika root.

Podatność śledzona jest jako CVE-2021-3560 (wynik CVSS: 7,8) i dotyczy wersji polkit od 0.113 do 0.118. Została odkryta przez badacza bezpieczeństwa GitHub – Kevina Backhouse’a, który powiedział, że problem został wprowadzony w zatwierdzonym kodzie z 9 listopada 2013 roku, co daje właśnie 7 lat życia tego błędu w ukryciu.

Polkit (a tak na prawdę – PolicyKit) to zestaw narzędzi do definiowania i obsługi autoryzacji w dystrybucjach Linuksa i umożliwia nieuprzywilejowanym procesom komunikację z procesami uprzywilejowanymi.
Problem z podatnością w skrócie polega na tym, że kiedy żądający proces rozłącza się z „dbus-daemon” tuż przed uruchomieniem wywołania funkcji „polkit_system_bus_name_get_creds_sync”, proces nie może uzyskać unikalnego identyfikatora uid i pid, więc nie jest w stanie zweryfikować uprawnień procesu żądającego.

RHEL 8, Fedora 21, Debian „Bullseye” i Ubuntu 20.04 to tylko niektóre z popularnych dystrybucji Linuksa, których dotyczy luka polkit. Problem został naprawiony w wersji 0.119, która została wydana 3 czerwca.

Podatny kod polkit

Luka jest zaskakująco łatwa do wykorzystania. Wystarczy kilka poleceń w terminalu przy użyciu tylko standardowych narzędzi, takich jak bash, kill i dbus-send.

„dbus-send” to mechanizm komunikacji między procesami w systemie Linux (IPC), który służy do wysyłania wiadomości do magistrali komunikatów D-Bus, umożliwiając komunikację między wieloma procesami działającymi jednocześnie na tym samym komputerze. Demon Policy Authority firmy Polkit jest zaimplementowany. jako usługa połączona z magistralą systemową w celu bezpiecznego uwierzytelniania poświadczeń.

Zabijając polecenie, powodujemy ominięcie uwierzytelniania, ponieważ polkit niewłaściwie obsługuje przerwaną wiadomość i traktuje żądanie tak, jakby pochodziło od procesu z uprawnieniami roota (UID 0), tym samym natychmiast autoryzując żądanie.

Odkrywca podatności tłumaczy: „Aby uruchomić wrażliwą ścieżkę kodu, musisz przerwać w odpowiednim momencie. A ponieważ zaangażowanych jest wiele różnych procesów, czas tego „właściwego momentu” różni się w zależności od uruchomienia. Dlatego zwykle potrzeba kilku prób, aby exploit zakończył się sukcesem. Sądzę, że jest to również powód, dla którego błąd nie został wcześniej odkryty.”

Zachęcamy użytkowników do jak najszybszej aktualizacji swoich instalacji Linuksa, aby zaradzić potencjalnemu ryzyku.

Podziel się z innymi tym artykułem!