Luki w OpenBSD, które umożliwiają podwyższenie uprawnień i ominięcie uwierzytelnienia w smtpd, ldapd i radiusd

Firma Qualys ujawnili cztery vulnerablista w OpenBSD, z czego jedna umożliwia zdalne połączenie bez autoryzacji do niektórych usług sieciowych, a trzy pozostałe zwiększają swoje uprawnienia w systemie. W raporcie Qualys zwrócono uwagę na szybką reakcję deweloperów OpenBSD – wszystkie problemy zostały zostały usunięte do OpenBSD 6.5 i OpenBSD 6.6 naprawione w ciągu 40 godzin od prywatnego powiadomienia.

Zdalna luka w zabezpieczeniach spowodowana jest błędem w organizacji wywołania procedury autoryzacyjnej w bibliotece libc, która uruchamia
program /usr/libexec/auth/login_style z przekazaniem argumentów w wierszu poleceń. W tym przypadku wywołanie login_style z opcjonalnym parametrem „-s service” pozwala na przekazanie nazwy protokołu. Jeśli na początku nazwy użytkownika znajdzie się znak „-”, ta nazwa zostanie przetworzona jako opcja przy uruchamianiu login_style. W związku z tym, jeśli podczas autoryzacji podamy nazwę użytkownika „-schallenge” lub „-schallenge:passwd”, to login_style zinterpretuje to jako żądanie użycia procedury S/Klucz.

Problem w tym, że protokół S/Klucz w login_style jest obsługiwany jedynie formalnie, a faktycznie ignorowany z wynikiem wskazującym na pomyślną autoryzację. W ten sposób atakujący może, podszywając się pod użytkownika „-schallenge”, obejść autoryzację i uzyskać dostęp bez podania hasła lub kluczy. Potencjalnie problem dotyczy wszystkich usług sieciowych, które korzystają z standardowych wywołań libc do przeprowadzenia autoryzacji. Na przykład możliwość obejścia autoryzacji została potwierdzona w smtpd (AUTH PLAIN), ldapd i radiusd.

W sshd luka nie występuje, ponieważ zawiera dodatkową ochronę sprawdzającą obecność użytkownika w systemie. Niemniej jednak, sshd można użyć do sprawdzenia podatności systemu na tę lukę — podczas próby połączenia z nazwą użytkownika „-sresponse:passwd” połączenie zawiesza się, ponieważ sshd czeka na zwrot parametrów wywołania (challenge) od login_passwd, a login_passwd czeka na przesłanie brakujących parametrów (nazwa „-sresponse” jest interpretowana jako opcja). Potencjalny lokalny atakujący może próbować obejść autoryzację w narzędziu su, ale podanie nazwy „-sresponse” prowadzi do awarii procesu z powodu zwrócenia wskaźnika zerowego podczas wykonywania funkcji getpwnam_r(„-schallenge”, …).

Inne podatności:

  • CVE-2019-19520 — lokalne podniesienie uprawnień poprzez manipulację narzędziem xlock, dostarczanym z flagą sgid, która zmienia grupę na „auth”. W kodzie xlock, nadpisanie ścieżek do bibliotek jest zabronione tylko przy zmianie identyfikatora użytkownika (setuid), co pozwala atakującemu na zmianę zmiennej środowiskowej „LIBGL_DRIVERS_PATH” i załadowanie swojej biblioteki współdzielonej, której kod zostanie wykonany po podniesieniu uprawnień do grupy „auth”.
  • CVE-2019-19522 — umożliwia lokalnemu użytkownikowi, wchodzącemu w skład grupy „auth”, uruchomienie kodu z uprawnieniami root podczas uwierzytelniania w systemie przez S/Key lub YubiKey (domyślnie wyłączone). Wejście do grupy „auth”, do której dostęp można uzyskać poprzez wykorzystanie wspomnianej wcześniej podatności w xlock, pozwala na zapis plików w katalogach /etc/skey i /var/db/yubikey. Na przykład, atakujący może dodać nowy plik /etc/skey/root do generowania jednorazowych kluczy do uwierzytelnienia jako użytkownik root przez S/Key.
  • CVE-2019-19519 — możliwość podnoszenia limitów zasobów poprzez manipulację narzędziem su. Przy podaniu opcji „-L”, oznaczającej cykliczne powtarzanie prób uwierzytelnienia 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 przy pierwszej próbie wprowadzić cudzy login z inną klasą konta, ale przy drugiej próbie prawidłowo się uwierzytelnić. W tej sytuacji użytkownikowi zostaną ustalone limity zgodne z klasą użytkownika określoną przy pierwszej próbie (np. maksymalna liczba procesów lub rozmiar pamięci dla procesu). Metoda działa tylko dla pożyczania limitów od nieuprzywilejowanych użytkowników, ponieważ dla użytkownika root wymagana jest obecność w grupie wheel.

Dodatkowo można zaznaczyć wdrożenie w OpenBSD nowa metoda weryfikacji dopuszczalności wywołań systemowych, dodatkowo utrudniająca wykorzystanie podatności. Metoda zezwala na wykonanie wywołań systemowych tylko wtedy, gdy są one wywoływane z wcześniej zarejestrowanych obszarów pamięci. Aby oznaczyć obszary pamięci zaproponowano nowe wywołanie systemowe msyscall().

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster