Jak się okazuje nie tylko systemy Microsoft są podatne na błędy oprogramowania. Nie tak dawno, bo na początku grudnia wykryto podatność pozwalająca zwykłemu użytkownikowi wykonać dowolną komendę systemctl na systemie Linux! Aktualizujcie swoje systemy i przeczytajcie ten artykuł.
Co umożliwia luka?
Luka systemowa działa na większości systemów operacyjnych i dotyczy problemu, w którym identyfikator użytkownika na Linux (tzw. Numer UID) posada wartość powyżej 2147483647. Taki użytkownik może wtedy wykonać w sposób nieautoryzowany każda komendę systemctl. Przypomnamy, że komenda systemctl odpowiada za zarządzanie usługami na Linux.
Zgłoszona luka dotyczy w rzeczywistości PolicyKit (znanego również jako polkit) – zestawu narzędzi na poziomie aplikacji dla uniksopodobnych systemów operacyjnych, który definiuje zasady(polityki), obsługuje ogólnosystemowe uprawnienia i umożliwia procesom nieuprzywilejowanym komunikowanie się z tymi uprzywilejowanymi, takimi jak jako “sudo”, które nie daje uprawnień roota do całego procesu.
Na jakich systemach występuje podatność?
Problem już został zgłoszony pod numerem CVE-2018-19788 i dotyczy PolicyKit w wersji 0.115, który jest domyślnie zainstalowany w najpopularniejszych dystrybucjach Linux’a, w tym Red Hat, Debian, Ubuntu i CentOS.
Podatność powstała na skutek błędów/nieprawidłowości w mechanizmie sprawdzania przez PolicyKit żądań uprawnień dla każdego użytkownika o niskich uprawnieniach z identyfikatorem UID większym niż parametr INT_MAX. INT_MAX jest stałą zdefiniowaną w systemie operacyjnym, która definiuje maksymalną wartość, jaką może przechowywać zmienna całkowita, która w przypadku Linux wynosi 2147483647 (w systemie szesnastkowym 0x7FFFFFFF).
Oznacza to tyle, jeśli utworzymy w niezaktualizowanym systemie Linux konto użytkownika o identyfikatorze większym niż maksymalna wartość INT_MAX, komponent PolicyKit pozwoli na tym koncie wykonać komendę systemctl.
Sprawdźmy podatność w naszym środowisku
Do testów postanowiliśmy przeznaczyć nasz system Kali Linux w ostatniej dostępnej dystrybucji, czyli z 2018.4
Scenariusz testu POC:
- Utworzenie użytkownika UID > INT_MAX np.. 4000000000
- Uruchomienie dowolnej komendy systemctl np. zatrzymanie usługi cron.
Najpierw stwórzmy konto kapitanh na systemie linux Kali:

Zalogujmy się na użytkownika kapitanh do systemu Kali Linux.
Wyświetlmy identyfikator użytkownika, wersję systemu oraz agenta Polkit:

Zatem nasz system zgodnie z informacja o podatności powinien być dziurawy. Sprawdźmy, czy faktycznie jest. Spróbujemy zastopować serwis cron:

Udało się! Zatrzymaliśmy serwis Cron na zwykłym koncie użytkownika na systemie operacyjnym Linux Kali. Oznacza to, że możemy robić z usługami co nam się tylko podoba 🙂
Na koniec jako ciekawostkę dodamy, iż za pomocą tej luki można utworzyć podatny serwis w Linux. Szczegóły znajdziecie tutaj.
Jak sobie radzić z problemem?
Pamiętajcie o aktualizacji luki (jak będzie tylko dostępna łatka) i sprawdzaniu / monitorowaniu wszystkich użytkowników na Linux. Redhat np. jeszcze łatki nie stworzył link. Użytkownicy z UID większym od 214748364, a już na pewno od 4000000000 będą na pewno w tym przypadku napiętnowani 🙂
Pozdrawiamy,
Kapitan Hack