Przypadkowe obejście ekranu blokady Google Pixel warte 70 tys. dolarów

Problemy z telefonem przytrafiają się także specjalistom od cyberbezpieczeństwa. Czasami mogą doprowadzić ich do wartościowych odkryć. Tak właśnie znaleziono lukę wpływającą na prawdopodobnie wszystkie telefony Google Pixel, z powodu której odblokowane zostać mogło jakiekolwiek zablokowane urządzenie. Błąd został naprawiony w aktualizacji bezpieczeństwa z 5 listopada 2022 roku.

 

Błąd umożliwiał napastnikowi z fizycznym dostępem do telefonu obejście zabezpieczeń ekranu blokady (odcisk palca, PIN, itp.) i uzyskanie pełnego dostępu do urządzenia użytkownika. Luka została oznaczona jako CVE-2022-20465 i może dotyczyć również innych producentów Androida. Badaczowi który – całkowicie przypadkiem – znalazł i zgłosił tę lukę, Google wypłaciło 70 tys. dolarów nagrody.

 

 Zapominany kod PIN do karty SIM 

 

Badacz wrócił do domu, a jego Pixel 6 miał 1% naładowania baterii. Rozładowała się, gdy użytkownik był w środku wysyłania wiadomości tekstowych. Pospieszył po ładowarkę i uruchomił telefon z powrotem.

Pixel uruchomił się i poprosił o kod PIN do karty SIM. Po wpisaniu 3 nieprawidłowych PIN-ów, karta SIM zablokowała się. Teraz potrzebny był kod PUK, aby odblokować telefon i móc używać go ponownie.

Badacz wpisał kod PUK, a Pixel poprosił o ustawienie nowego kodu PIN. Po pomyślnym zakończeniu tego procesu wyświetlił ekran blokady. Coś jednak było nie tak.

 

google1

 

Był to świeży boot, a zamiast zwykłej ikony blokady pokazywała się ikona odcisku palca. Zaakceptowała ona palec badacza, co nie powinno mieć miejsca, gdyż po restarcie trzeba przynajmniej raz wpisać PIN lub hasło do ekranu blokady, aby odszyfrować urządzenie.

 

Po zaakceptowaniu palca telefon utknął na dziwnym komunikacie „Pixel is starting…” i pozostał w tym stanie, dopóki nie został zrestartowany ponownie.

 

 

Co właśnie się stało? 

 

Po ponownym uruchomieniu telefonu, 3-krotnym wprowadzeniu błędnego PIN-u, wpisaniu PUK-u i wybraniu nowego PIN-u, badacz doszedł do tego samego stanu. Na ekranie widniało: „Pixel is starting…”.

Sprawdzał ten proces wiele razy, ale jeden raz zapomniał zrestartować telefon i po prostu rozpoczął proces od normalnego stanu. Zablokował urządzenie, zrobił hot-swap tacki SIM i reset PIN-u karty SIM. Nawet nie zdawał sobie sprawy z tego, co właściwie robił.

Tak jak wcześniej wpisał kod PUK i wybrał nowy PIN. Tym razem telefon zabłysnął, a badacz znalazł się na swoim osobistym ekranie głównym.

To było niepokojąco dziwne. Zrobił to jeszcze raz. Zablokowanie telefonu, ponowne włożenie tacki SIM, zresetowanie PIN-u… I znów był na ekranie głównym.

W ten sposób odkrył pełne obejście ekranu blokady na w pełni załatanym Pixelu 6. Odtworzenie błędu na Pixelu 5 miało taki sam efekt.

Oto proces odblokowania w akcji – do obejrzenia tutaj.

Ponieważ atakujący mógł po prostu przynieść własną kartę SIM z blokadą PIN, do odblokowania telefonu nie było wymagane nic poza dostępem fizycznym. Atakujący mógł po prostu podmienić kartę SIM w urządzeniu ofiary i wykonać exploit za pomocą karty SIM, która miała blokadę PIN i dla której atakujący znał prawidłowy kod PUK.

 

Co spowodowało błąd?

 

Ponieważ Android jest oprogramowaniem open source, commit naprawiający ten problem wraz ze wszystkimi zmianami w kodzie jest widoczny publicznie.

google2

Pierwszą rzeczą, która zaskoczyła badacza, gdy po raz pierwszy spojrzał na ten commit, była liczba zmienionych plików. Wcześniej myślał, że ten błąd będzie miał tylko prostą, jednolinijkową poprawkę, usuwającą nieprawidłową linię kodu odpowiedzialną za wywołanie odblokowania. Jednak nie było to takie proste.

google3

Wygląda na to, że w systemie Android istnieje pojęcie „ekranu bezpieczeństwa”. Ekranem bezpieczeństwa może być ekran wprowadzania PIN-u, ekran skanowania linii papilarnych, ekran wprowadzania hasła lub w naszym przypadku ekran wprowadzania PIN-u SIM i PUK-u SIM.
Te ekrany bezpieczeństwa mogą być ułożone „na wierzchu” siebie. Tak więc na przykład, gdy telefon był zablokowany, a wpisanie kodu PIN było widoczne, miał on ekran bezpieczeństwa PIN „na wierzchu” ekranu bezpieczeństwa linii papilarnych.

Gdy SIM PUK został wprowadzony pomyślnie, funkcja .dismiss() została wywołana przez komponent resetujący PUK na „stosie” ekranów bezpieczeństwa, powodując, że urządzenie odrzuciło bieżący i pokazało ekran bezpieczeństwa, który był „pod” nim. W naszym przykładzie był to ekran bezpieczeństwa odcisków palców.

Ponieważ funkcja .dismiss() po prostu odrzucała bieżący ekran bezpieczeństwa, była podatna na warunki wyścigu. Wyobraź sobie, co by się stało, gdyby coś w tle zmieniło bieżący ekran bezpieczeństwa, zanim komponent resetujący PUK dotarłby do wywołania .dismiss()? Czy komponent PUK odrzuciłby niepowiązany ekran bezpieczeństwa, gdy w końcu wywoła .dismiss()?
Wygląda na to, że dokładnie tak się stało. Jakaś inna część systemu monitorowała stan SIM w tle, a kiedy wykryła zmianę, zaktualizowała to, który ekran bezpieczeństwa był aktualnie aktywny. Komponent w tle ustawił np. ekran odcisków palców jako aktywny ekran bezpieczeństwa, nawet zanim komponent PUK był w stanie dotrzeć do własnego wywołania funkcji .dismiss(). Zanim komponent PUK wywołał funkcję .dismiss(), tak naprawdę wcześniej zwolnił ekran bezpieczeństwa odcisków palców, zamiast po prostu zwolnić ekran bezpieczeństwa PUK, jak to było pierwotnie zamierzone. Wywołanie .dismiss() na ekranie bezpieczeństwa odcisków palców spowodowało odblokowanie telefonu.

Inżynierowie Androida najwyraźniej zdecydowali się na refaktoryzację funkcji .dismiss() i sprawili, że wymaga ona dodatkowego parametru, w którym osoba dzwoniąca może określić, jaki typ ekranu bezpieczeństwa chce odrzucić. W naszym przypadku, komponent PUK teraz jawnie wywołuje .dismiss(SecurityMode.SimPuk), aby odrzucić tylko ekrany bezpieczeństwa z typem SimPuk. Jeśli aktualnie aktywny ekran bezpieczeństwa nie jest ekranem SimPuk (ponieważ jakiś komponent tła zmienił go, tak jak w naszym przypadku), funkcja .dismiss nie robi nic.

W ten sposób rozładowany telefon badacza przyczynił się do zwiększenia bezpieczeństwa wszystkich użytkowników. Oczywiście nie zawsze możemy liczyć na szczęśliwy przypadek, a o cyberbezpieczeństwo warto aktywnie dbać.

 

 

Potrzebujesz profesjonalnej ochrony? Chcesz dowiedzieć się, jak działać z takimi problemami, jak ten opisany powyżej? Skontaktuj się z naszymi ekspertami już dziś. 

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *