Kilka dni temu firma Apple wypłaciła indyjskiemu poszukiwaczowi podatności nagrodę 100 000 USD za zgłoszenie krytycznej luki w zabezpieczeniach nowej funkcji „Sign in with Apple”. Funkcja ta pozwala na logowanie się do wielu popularnych serwisów webowych za pomocą swojego konta Apple ID, bez konieczności podawania dodatkowych danych. Podatność odkryta dzięki Bhavuk’owi Jain’owi pozwala atakującym na ominięcie mechanizmu uwierzytelnienia Apple i przejęcie kont użytkowników w docelowych usługach i aplikacjach, w których ofiara zarejestrowała się przy użyciu opcji „Sign in with Apple”.
Apple chwaliło się nowatorską metodą anonimizacji adresów e-mail użytkowników przy korzystaniu z tej metody. Taka poważna luka z pewnością odbije się na reputacji nowej usługi.

Od strony technicznej, logowanie z Apple ID działa podobnie do OAuth 2.0. Istnieją dwa sposoby na uwierzytelnienie się usera – za pomocą JWT (JSON Web Token) lub za pomocą kodu generowanego przez serwer należący do Apple. Kod ten jest później wykorzystywany do stworzenia JWT i dalsza ścieżka jest taka sama. Poniższy diagram przedstawia schemat procesu uwierzytelnienia.

W drugim kroku, podczas autoryzacji, Apple daje użytkownikowi wybór czy udostępnić prawdziwy e-mail z Apple ID docelowemu serwisowi, czy użyć anonimizowanej wersji. W zależności od wyboru usera, Apple generuje w kolejnym kroku swój własny, powiązany z danym kontem Apple email. Po udanej autoryzacji serwer Apple tworzy JWT, który zawiera ten adres e-mail i jest używany w serwisie aplikacji zewnętrznej do zalogowania.

Odkrywca podatności zauważył ciekawą zależność, która pozwoliła mu zgarnąć pieniądze z bug bounty. Mianowicie, Apple prosi użytkowników o zalogowanie się na swoje konto Apple przed zainicjowaniem żądania o JWT, ale nie sprawdza już czy to ta sama osoba prosi o token w następnym kroku z serwera uwierzytelniającego. Brak weryfikacji w tej części mechanizmu mógł pozwolić osobie atakującej na dostarczenie osobnego identyfikatora Apple należącego do ofiary, oszukując serwery Apple w celu wygenerowania tokenu JWT, który był upoważniony do zalogowania się w usłudze innej firmy z tożsamością ofiary.

„Odkryłem, że mogę poprosić o JWT z dowolnym identyfikatorem e-mail od Apple, a gdy token ten zostanie zweryfikowany przy użyciu klucza publicznego Apple, dane są prawidłowe. Oznacza to, że osoba atakująca może sfałszować JWT, linkując w nim dowolny identyfikator e-mail i uzyskując dostęp do konto ofiary” – powiedział Bhavuk.

Badacz potwierdził, że luka zadziałała, nawet jeśli zdecydujesz się ukryć swój identyfikator e-mail przed usługami zewnętrznymi, a także można go wykorzystać do zarejestrowania nowego konta za pomocą Apple ID ofiary.
Wpływ tej luki był krytyczny, ponieważ mógł umożliwić pełne przejęcie konta. Wielu programistów zintegrowało logowanie za pomocą konta Apple, ponieważ jest to obowiązkowe w wielu aplikacjach obsługujących inne konta, taki jak Google, Facebook.

Bhavuk odpowiedzialnie zgłosił ten problem zespołowi bezpieczeństwa Apple w zeszłym miesiącu, a firma usunęła już tę lukę. Oprócz wypłacenia nagrody badaczowi w odpowiedzi firma potwierdziła również, że przeprowadziła dochodzenie w sprawie wykorzystania luki wcześniej i nie stwierdziła użycia tej podatności do złamania żadnego konta.

Chociaż problem z tą podatnością został zażegnany, to pokazuje nam to, że nie powinniśmy ufać w stu procentach nawet największym gigantom zapewniającym prywatność i bezpieczeństwo naszych danych. Istniejące podatności mogą być wykorzystywane przez cyberprzestępców miesiącami, nie dając żadnych oznak przejęcia konta czy kradzieży danych. W tym przypadku, wszystko skończyło się szczęśliwe zarówna dla Apple, jak i dla użytkowników „Sign in with Apple”.