W menedżerze systemowym systemd vulnerabilność (), który potencjalnie umożliwia wykonanie własnego kodu z podwyższonymi uprawnieniami poprzez wysłanie specjalnie sformatowanego żądania na szynę DBus. Problem został rozwiązany w wersji testowej (rozwiązujące problem poprawki: , , ). Podatność została usunięta w dystrybucjach , , (objawia się w RHEL 8, ale nie dotyczy RHEL 7), , i , ale w momencie pisania artykułu pozostaje niezałatwiona w i .
Podatność jest spowodowana odwoływaniem się do już zwolnionego obszaru pamięci (use-after-free), które występuje podczas asynchronicznego wykonywania żądań do Polkit w trakcie przetwarzania komunikatów DBus. Niektóre interfejsy DBus używają pamięci podręcznej do chwilowego przechowywania obiektów i czyszczą elementy pamięci podręcznej, gdy szyna DBus zostanie zwolniona do przetwarzania innych żądań. Jeśli obsługa metody DBus używa bus_verify_polkit_async(), być może będzie musiała poczekać na zakończenie operacji w Polkit. Po gotowości Polkit obsługa jest wywoływana ponownie i odnosi się do wcześniej przydzielonych danych w pamięci. Jeśli żądanie do Polkit trwa zbyt długo, elementy w pamięci podręcznej mają czas na wyczyszczenie przed ponownym wywołaniem obsługi metody DBus.
Z usług, które mogą wykorzystać podatność, wymienia się systemd-machined, który zapewnia API DBus org.freedesktop.machine1.Image.Clone, co prowadzi do tymczasowego zachowywania danych w pamięci podręcznej i asynchronicznego odwoływania się do Polkit. Interfejs
org.freedesktop.machine1.Image.Clone jest dostępny dla wszystkich nieuprzywilejowanych użytkowników systemu, którzy mogą zainicjować awarię usług systemd lub potencjalnie uzyskać wykonanie kodu z uprawnieniami roota (prototyp exploita jak dotąd nie został zaprezentowany). Kod umożliwiający wykorzystanie podatności został w systemd-machined w 2015 roku w wersji (w RHEL 7.x używany jest systemd 219).
Źródło: opennet.ru
