NFsec Logo

Obejście ograniczeń w sudo

15/10/2019 w Bezpieczeństwo Brak komentarzy.  (artykuł nr 707, ilość słów: 525)

G

dy sudo jest skonfigurowane tak, aby umożliwić użytkownikowi uruchamianie poleceń jako dowolny użytkownik za pomocą słowa kluczowego ALL w sekcji “uruchom jako” (ang. Runas) możliwe jest uruchomienie poleceń jako administrator systemu (root) podając ID użytkownika jako wartość -1 lub 4294967295. Może to być użyte przez użytkownika z wystarczającymi uprawnieniami sudo do uruchamiania poleceń jako root, nawet jeśli w sekcji “uruchom jako” jest wyraźny zakaz dostępu do uprawnień tego użytkownika. Jest to tylko możliwe, o ile słowo kluczowe ALL jest wymienione jako pierwsze w specyfikacji Runas. Wpisy dziennika dla uruchomionych w ten sposób poleceń będą wyświetlać docelowego użytkownika jako 4294967295 zamiast root. Ponadto moduły PAM nie będą uruchamiane dla polecenia.

Wykorzystanie błędu wymaga, aby użytkownik posiadał już uprawnienia sudo, które pozwalają mu uruchamiać polecenia z dowolnym identyfikatorem użytkownika (ID). Zazwyczaj oznacza to, że wpis w pliku sudoers dla użytkownika ma wartość ALL w sekcji Runas. Polecenie sudo obsługuje uruchamianie polecenia z nazwą użytkownika lub jego identyfikatorem (ID) w formie numerycznej, jeśli zezwalają na to zasady zapisane w pliku sudoers. Na przykład następujący wpis sudoers umożliwia wydanie polecenia id jako dowolny użytkownik, ponieważ sekcja Runas zawiera słowo kluczowe ALL:

justyna serwer = (ALL) /usr/bin/id

Użytkownik “justyna” jest nie tylko w stanie uruchomić polecenie id jako każdy użytkownik w systemie, ale może także uruchomić je jako dowolny identyfikator użytkownika, używając składni #uid, na przykład:

sudo -u#1234 id -u

zwróci wynik 1234. Jednak wywołania systemowe setressuid(2) i setreuid(2), których używa sudo do zmiany identyfikatora użytkownika przed uruchomieniem polecenia, traktują ID użytkownika o wartości -1 (lub jego odpowiednik w postaci typu reprezentującego znak, mogący przyjąć tylko wartość nieujemną: 4294967295) jako specjalny i nie zmieniają identyfikatora użytkownika dla tej wartości. W rezultacie polecenia:

sudo -u#-1 id -u
sudo -u#4294967295 id -u

zwrócą wartość 0. Wynika to z faktu, że sama komenda sudo działa z prawami użytkownika o ID 0, więc gdy sudo próbuje zmienić na ID o wartości -1 zmiana w rzeczywistości nie następuje. Powoduje to, że wpisy w dzienniku sudo raportują, że polecenie jest uruchamiane przez użytkownika o identyfikatorze 4294967295, a nie jako root (lub ID=0). Ponadto z racji, że identyfikator użytkownika określany za pomocą opcji -u nie istnieje w bazie danych haseł – nie zostaną uruchomione żadne moduły sesji PAM. Jeśli wpis w pliku sudoers zostanie napisany w ten sposób, że pozwoli użytkownikowi na uruchomienie polecenia jako każdy użytkownik oprócz administratora – za pomocą tego błędu można ominąć to ograniczenie. Na przykład:

patryk serwer = (ALL, !root) /usr/bin/vi

Użytkownik “patryk” jest uprawniony do uruchomienia edytora vi jako dowolny użytkownik oprócz administratora. Jednak z powodu błędu patryk jest w stanie uruchomić vi jako root, uruchamiając: sudo -u#-1 vi, co narusza określone zasady bezpieczeństwa. Wpływa to tylko na wpisy sudoers, w których słowo kluczowe ALL jest zawarte w sekcji “uruchom jako” / Runas. Na przykład następujący wpis sudoers jest niepodatny na opisany błąd:

justyna serwer = (www-data, !root) /usr/bin/id

W tym przykładzie justyna może uruchomić polecenie id tylko jako www-data. Wszelkie próby uruchamiania polecenia jako inny użytkownik zostaną odrzucone. Błąd został naprawiony w sudo w wersji 1.8.28. Znalazł i przeanalizował go Joe Vennix z Apple Information Security.

Więcej informacji: Potential bypass of Runas user restrictions

Kategorie K a t e g o r i e : Bezpieczeństwo

Tagi T a g i : , , , , ,

Komentowanie tego wpisu jest zablokowane.