Luki w swhkd, menedżerze skrótów dla Waylanda

W swhkd (Simple Wayland HotKey Daemon) wykryto szereg luk spowodowanych błędną pracą z plikami tymczasowymi, parametrami wiersza poleceń i gniazdami Unix. Program napisany jest w języku Rust i obsługuje naciskanie klawiszy skrótu w środowiskach opartych na protokole Wayland (kompatybilny z plikami konfiguracyjnymi odpowiednik procesu sxhkd stosowanego w środowiskach opartych na X11).

Pakiet zawiera nieuprzywilejowany proces swhks, który wykonuje akcje za pomocą skrótów klawiszowych, oraz proces swhkd w tle, który działa jako root i współdziała z urządzeniami wejściowymi na poziomie interfejsu API uinput. Gniazdo Unixowe służy do organizowania interakcji pomiędzy swhks i swhkd. Korzystając z reguł Polkita, każdy użytkownik lokalny może uruchomić proces /usr/bin/swhkd jako root i przekazać mu dowolne parametry.

Zidentyfikowane podatności:

  • CVE-2022-27815 – Zapisywanie PID procesu do pliku o przewidywalnej nazwie i w katalogu, w którym inni użytkownicy mogą zapisywać (/tmp/swhkd.pid). Każdy użytkownik może utworzyć plik /tmp/swhkd.pid i umieścić w nim pid istniejącego procesu, co uniemożliwi uruchomienie swhkd. Jeżeli w /tmp nie ma zabezpieczenia przed tworzeniem dowiązań symbolicznych, luka może zostać wykorzystana do utworzenia lub nadpisania plików w dowolnym katalogu systemowym (do pliku zapisywany jest identyfikator PID) lub określenia zawartości dowolnego pliku w systemie (swhkd wypisuje całą zawartość pliku PID na standardowe wyjście). Warto zauważyć, że w wydanej poprawce plik PID został przeniesiony nie do katalogu /run, a do katalogu /etc (/etc/swhkd/runtime/swhkd_{uid}.pid), gdzie również nie należy.
  • CVE-2022-27814 – Manipulując opcją wiersza poleceń „-c” używaną do określenia pliku konfiguracyjnego, można ustalić, czy w systemie istnieje dowolny plik. Na przykład, aby sprawdzić /root/.somefile, możesz uruchomić „pkexec /usr/bin/swhkd -d -c /root/.somefile” i jeśli pliku brakuje, pojawi się błąd „/root/.somefile nie istnieje " zostanie wyświetlone. Podobnie jak w przypadku pierwszej luki, naprawienie problemu jest zastanawiające - naprawienie problemu sprowadza się do tego, że zewnętrzne narzędzie „cat” („Command::new(„/bin/cat”)).arg(path) zostanie teraz uruchomiony w celu odczytania pliku konfiguracyjnego.out()').
  • CVE-2022-27819 – Problem jest również związany z użyciem opcji „-c”, która powoduje załadowanie i przeanalizowanie całego pliku konfiguracyjnego bez sprawdzania rozmiaru i typu pliku. Na przykład, aby spowodować odmowę usługi w wyniku wyczerpania się wolnej pamięci i utworzenia fałszywych operacji we/wy, możesz określić urządzenie blokowe podczas uruchamiania („pkexec /usr/bin/swhkd -d -c /dev/sda”) lub urządzenie znakowe generujące nieskończony strumień danych. Problem został rozwiązany poprzez zresetowanie uprawnień przed otwarciem pliku, ale naprawa nie została ukończona, ponieważ resetowany jest tylko identyfikator użytkownika (UID), ale identyfikator grupy (GID) pozostaje taki sam.
  • CVE-2022-27818 – Gniazdo Unix jest tworzone przy użyciu pliku /tmp/swhkd.sock utworzonego w zapisywalnym katalogu, co prowadzi do podobnych problemów jak w przypadku pierwszej luki (każdy użytkownik może utworzyć plik /tmp/swhkd.sock i wygenerować lub przechwycić zdarzenia naciśnięcia klawisza).
  • CVE-2022-27817 – Zdarzenia wejściowe są akceptowane ze wszystkich urządzeń i we wszystkich sesjach, tj. użytkownik z innej sesji Waylanda lub z konsoli może przechwytywać zdarzenia, gdy inni użytkownicy naciskają klawisze skrótu.
  • CVE-2022-27816 Proces swhks, podobnie jak swhkd, używa pliku PID /tmp/swhks.pid w zapisywalnym katalogu /tmp. Problem jest podobny do pierwszej luki, ale nie jest tak niebezpieczny, ponieważ swhks działa pod nieuprzywilejowanym użytkownikiem.

Źródło: opennet.ru

Dodaj komentarz