Luki w zabezpieczeniach OpenBSD umożliwiające eskalację uprawnień i ominięcie uwierzytelniania w smtpd, ldapd i radiusd

Firma Qualys ujawnił cztery luki w zabezpieczeniach w OpenBSD, z których jeden umożliwia zdalne łączenie się bez uwierzytelniania z niektórymi usługami sieciowymi, a pozostałe trzy pozwalają na zwiększenie uprawnień w systemie. Raport Qualys odnotował szybką reakcję deweloperów OpenBSD – wszystkie problemy zostały rozwiązane wyłączony в OpenBSD 6.5 и OpenBSD 6.6 w ciągu 40 godzin od otrzymania prywatnego powiadomienia.

Luka możliwa do zdalnego wykorzystania jest spowodowana błędem w organizacji wywołania programu obsługi uwierzytelniania w bibliotece libc, który wywołuje
program /usr/libexec/auth/login_style przekazując argumenty w wierszu poleceń. W szczególności podczas wywoływania login_style z użyciem opcjonalnego parametru „-s service” możliwe jest przekazanie nazwy protokołu. Jeśli na początku nazwy użytkownika użyjesz znaku „-”, nazwa ta zostanie potraktowana jako opcja podczas uruchamiania polecenia login_style. W związku z tym, jeśli podczas uwierzytelniania podasz nazwę użytkownika „-schallenge” lub „-schallenge:passwd”, login_style potraktuje żądanie jako żądanie użycia modułu obsługi. Klucz S.

Problem polega na tym, że protokół S/Key w login_style jest obsługiwany tylko formalnie, ale w rzeczywistości jest ignorowany, gdy na wyjściu pojawia się wskaźnik pomyślnego uwierzytelnienia. W ten sposób atakujący może podszyć się pod użytkownika „-schallenge”, ominąć uwierzytelnianie i uzyskać dostęp bez podawania hasła lub kluczy. Potencjalnie wszystkie usługi sieciowe korzystające ze standardowych wywołań libc w celu przeprowadzania uwierzytelniania są podatne na ten problem. Przykładowo możliwość ominięcia uwierzytelniania została potwierdzona w smtpd (AUTH PLAIN), ldapd i radiusd.

Luka ta nie występuje w przypadku protokołu sshd, gdyż posiada on dodatkową ochronę w postaci sprawdzania obecności użytkownika w systemie. Jednakże sshd można wykorzystać do testowania podatności systemu na ataki — podczas próby dostępu do nazwy użytkownika „-sresponse:passwd” połączenie zostaje zawieszone, ponieważ sshd czeka, aż login_passwd zwróci parametry wyzwania, a login_passwd czeka na przekazanie brakujących parametrów (nazwa „-sresponse” jest traktowana jako opcja). Lokalny atakujący mógłby potencjalnie spróbować ominąć uwierzytelnianie w narzędziu su, ale przekazanie nazwy „-sresponse” spowodowałoby awarię procesu z powodu zwrócenia pustego wskaźnika podczas wykonywania funkcji getpwnam_r("-schallenge", ...).

Inne luki:

  • CVE-2019-19520 – Lokalna eskalacja uprawnień poprzez manipulację narzędziem xlock dostarczonym ze flagą sgid zmieniającą grupę na „auth”. W kodzie xlock ponowne definiowanie ścieżek bibliotek jest zabronione wyłącznie w przypadku zmiany identyfikatora użytkownika (setuid), co pozwala atakującemu na zmianę zmiennej środowiskowej „LIBGL_DRIVERS_PATH” i zorganizowanie ładowania swojej współdzielonej biblioteki, której kod zostanie wykonany po eskalowaniu uprawnień do grupy „auth”.
  • CVE-2019-19522 – Umożliwia lokalnemu użytkownikowi z grupy „auth” uruchamianie kodu z uprawnieniami roota, gdy w systemie włączone jest uwierzytelnianie S/Key lub YubiKey (domyślnie wyłączone). Przynależność do grupy „auth”, do której można uzyskać dostęp wykorzystując wyżej wymienioną lukę w zabezpieczeniach xlock, pozwala na zapisywanie plików w katalogach /etc/skey i /var/db/yubikey. Na przykład atakujący może dodać nowy plik /etc/skey/root w celu wygenerowania jednorazowych kluczy do uwierzytelniania użytkownika root za pomocą S/Key.
  • CVE-2019-19519 – Możliwość zwiększenia limitów zasobów poprzez manipulację narzędziem su. Jeśli określono opcję -L, co oznacza, że ​​próby uwierzytelnienia są powtarzane cyklicznie w razie niepowodzenia, klasa użytkownika jest ustawiana tylko raz i nie jest resetowana przy kolejnych próbach. Atakujący może wykonać polecenie „su -l -L” i za pierwszym razem wprowadzić dane logowania innej osoby, używając innej klasy konta, ale za drugim razem pomyślnie uwierzytelnić się jako on sam. W tej sytuacji użytkownikowi zostaną ustawione limity odpowiadające klasie użytkownika określonej podczas pierwszej próby (na przykład maksymalna liczba procesów lub rozmiar pamięci dla procesu). Ta metoda działa tylko w przypadku pożyczania limitów od użytkowników nieuprzywilejowanych, ponieważ użytkownik root musi należeć do grupy wheel).

Dodatkowo można to zauważyć realizacja OpenBSD ma nową metodę sprawdzania poprawności wywołań systemowych, która jeszcze bardziej komplikuje wykorzystywanie luk w zabezpieczeniach. Metoda ta pozwala na wykonywanie wywołań systemowych tylko wtedy, gdy dostęp do nich następuje z wcześniej zarejestrowanych obszarów pamięci. Aby oznaczyć obszary pamięci proponowane nowe wywołanie systemowe wywołanie msyscall().

Źródło: opennet.ru

Kup niezawodny hosting dla stron z ochroną DDoS, serwery VPS VDS 🔥 Kup niezawodny hosting stron internetowych z ochroną DDoS, serwery VPS VDS | ProHoster