Luka w zabezpieczeniach systemd, która może potencjalnie pozwolić na eskalację uprawnień

W menedżerze systemu zidentyfikowane słaby punkt (CVE-2020-1712), co potencjalnie umożliwia wykonanie kodu z podwyższonymi uprawnieniami poprzez wysłanie specjalnie zaprojektowanego żądania przez magistralę DBus. Problem został rozwiązany w wersji testowej systemd 245-rc1 (poprawki rozwiązujące problem: 1, 2, 3). Luka została naprawiona w dystrybucjach Ubuntu, Fedora, RHEL (pojawia się w RHEL 8, ale nie wpływa na RHEL 7), CentOS и SUSE/openSUSE, ale w chwili pisania tego tekstu wiadomości pozostają nieskorygowane Debian и Arch Linux.

Luka wynika z dostępu do już zwolnionego obszaru pamięci (use-after-free), co ma miejsce podczas asynchronicznego wykonywania żądań do Polkita podczas przetwarzania komunikatów DBus. Niektóre interfejsy DBus wykorzystują pamięć podręczną do krótkotrwałego przechowywania obiektów i opróżniają wpisy pamięci podręcznej, gdy tylko magistrala DBus będzie wolna i może przetwarzać inne żądania. Jeśli procedura obsługi metody DBus używa bus_verify_polkit_async(), może być konieczne poczekanie na zakończenie akcji Polkit. Gdy Polkit będzie gotowy, procedura obsługi wywoływana jest ponownie i uzyskuje dostęp do danych już rozproszonych w pamięci. Jeśli żądanie do Polkita trwa zbyt długo, elementy w pamięci podręcznej zostaną wyczyszczone przed ponownym wywołaniem procedury obsługi metody DBus.

Wśród usług umożliwiających wykorzystanie luki wyróżnia się systemd-machined, która udostępnia DBus API org.freedesktop.machine1.Image.Clone, umożliwiając tymczasowe przechowywanie danych w pamięci podręcznej i asynchroniczny dostęp do Polkita. Interfejs
org.freedesktop.machine1.Image.Clone jest dostępny dla wszystkich nieuprzywilejowanych użytkowników systemu, co może spowodować awarię usług systemowych lub potencjalnie spowodować wykonanie kodu jako root (prototyp exploita nie został jeszcze zademonstrowany). Kod umożliwiający wykorzystanie luki to dodany w wersji systemd-machined w wersji 2015 systemd 220 (RHEL 7.x używa systemd 219).

Źródło: opennet.ru

Dodaj komentarz