W platformie Android zidentyfikowano lukę (CVE-2022-20465), która pozwala na wyłączenie blokady ekranu poprzez zmianę karty SIM i wprowadzenie kodu PUK. Możliwość wyłączenia blokady została wykazana na urządzeniach Google Pixel, jednak ze względu na to, że poprawka dotyczy podstawowej bazy kodowej Androida, prawdopodobnie problem ten dotyczy również firmware'ów innych producentów. Problem został rozwiązany w listopadowym zestawie poprawek bezpieczeństwa dla Androida. Badacz zwracający na problem uwagę otrzymał od firmy Google nagrodę w wysokości 70 tysięcy dolarów.
Problem wynika z błędnego przetwarzania odblokowania po wprowadzeniu kodu PUK (Personal Unblocking Key), stosowanego do przywracania działania karty SIM, która została zablokowana po wielokrotnym błędnym wprowadzeniu kodu PIN. Aby wyłączyć blokadę ekranu, wystarczy włożyć do telefonu swoją kartę SIM, w której ustawiono ochronę opartą na kodzie PIN. Po zmianie karty SIM, chronionej kodem PIN, na ekranie najpierw wyświetlany jest komunikat o podanie kodu PIN. Jeśli trzy razy wprowadzono błędny kod PIN, nastąpi zablokowanie karty SIM, po czym będzie można wprowadzić kod PUK w celu odblokowania. Okazało się, że poprawne wprowadzenie kodu PUK nie tylko odblokowuje kartę SIM, ale prowadzi również do przejścia do głównego interfejsu, omijając blokadę ekranu, bez potwierdzenia dostępu za pomocą głównego hasła lub wzoru graficznego.

Luka wynika z błędu w logice sprawdzania kodów PUK w kontrolerze KeyguardSimPukViewController, odpowiedzialnym za wyświetlanie dodatkowego ekranu uwierzytelnienia. W Androidzie używa się kilku typów ekranów uwierzytelnienia (dla PIN, PUK, hasła, wzoru graficznego, uwierzytelnienia biometrycznego) i te ekrany są wywoływane sekwencyjnie, gdy wymagane jest wykonanie kilku sprawdzeń, na przykład, gdy wymagane są zarówno kod PIN, jak i wzór graficzny.
Po poprawnym wprowadzeniu kodu PIN uruchamia się drugi etap weryfikacji, wymagający podania głównego kodu odblokowującego, jednak w przypadku wprowadzania kodu PUK ten etap jest pomijany, a dostęp jest udzielany bez pytania o główne hasło lub klucz graficzny. Pomińnięcie następnego etapu odblokowania następuje, ponieważ podczas wywołania KeyguardSecurityContainerController#dismiss() nie porównuje się oczekiwanego i przechodzonego sposobu weryfikacji, tzn. mechanizm uznaje, że zmiana metody weryfikacji nie miała miejsca, a zakończenie weryfikacji kodu PUK świadczy o pomyślnym potwierdzeniu uprawnień.
Vulnerability została odkryta przypadkowo — użytkownikowi rozładował się telefon, a po naładowaniu i włączeniu, kilkakrotnie pomylił się przy wprowadzaniu kodu PIN, po czym zdjął blokadę kodem PUK i zdziwił się, że system nie zażądał głównego hasła, używanego do odszyfrowania danych, po czym zawiesił się z komunikatem „Pixel is starting…”. Użytkownik okazał się dociekliwy, postanowił zgłębić sprawę i różnymi sposobami eksperymentował z wprowadzaniem kodów PIN i PUK, aż przypadkowo zapomniał zrestartować urządzenie po zmianie karty SIM i zamiast zawieszenia uzyskał dostęp do środowiska.
Szczególne zainteresowanie budzi reakcja Google na zgłoszenie dotyczące luk bezpieczeństwa. Informacja o problemie została wysłana w czerwcu, ale do września badacz nie mógł uzyskać sensownej odpowiedzi. Uważał, że takie zachowanie można wyjaśnić tym, że nie jest pierwszym, który zgłasza ten błąd. Podejrzenia, że coś jest nie tak, pojawiły się we wrześniu, gdy problem pozostał nie naprawiony po zainstalowaniu aktualizacji oprogramowania, wydanej po 90 dniach, po upływie zadeklarowanego okresu tajemnicy.
Ponieważ wszystkie próby uzyskania informacji o statusie wysłanej wiadomości dotyczącej problemu prowadziły jedynie do zautomatyzowanych i szablonowych odpowiedzi, badacz podjął próbę osobistego skontaktowania się z pracownikami Google w celu wyjaśnienia sytuacji związanej z przygotowaniem poprawki i nawet zademonstrował lukę w londyńskim biurze Google. Dopiero po tym prace nad usunięciem luki ruszyły z miejsca. W trakcie analizy okazało się, że o problemie już wcześniej ktoś zgłaszał, ale Google zdecydowało się zrobić wyjątek i wypłacić nagrodę za ponowne zgłoszenie problemu, ponieważ tylko dzięki naleganiu jego autora zwrócono uwagę na problem.
Źródło: opennet.ru
