Potwierdzanie przelewów internetowych jednorazowym kodem otrzymanym bezpiecznym kanałem jest powszechnie uznawane za standard bezpieczeństwa. Niestety są firmy, które nawet tak prosty proces potrafią skutecznie popsuć.
Przy każdej okazji namawiamy Czytelników do korzystania z bezpiecznego, dwuskładnikowego uwierzytelnienia. Niestety jego bezpieczeństwo zależy także od wdrożenia po stronie dostawcy, a wdrożenie to nie zawsze zasługuje na uznanie. W przypadku Paypala udowodnili to badacze z firmy Duo Security.
Paypal Security Key
Paypal już kilka lat temu wprowadził usługę Security Key, umożliwiającą włączenie dodatkowego zabezpieczenia swojego rachunku. Po aktywacji usługi nasze środki zgromadzone w serwisie powinny być jeszcze bezpieczniejsze – bez kodów jednorazowych, podawanych przez sprzętowy lub programowy token, niemożliwe jest ich przelanie na inne konto. Tak się przynajmniej użytkownikom do tej pory wydawało.
Historia zaczęła się pod koniec marca 2014. Jeden z użytkowników Paypala zauważył, że gdy logował się w aplikacji mobilnej na swoje konto z włączoną usługą Security Key i zaraz po podaniu swojego loginu i hasła włączył tryb samolotowy, aplikacja pozostała zalogowana. Było to zachowanie niestandardowe, ponieważ aplikacja mobilna nie obsługuje kont z aktywną usługą Security Key i zazwyczaj dla takich kont po zalogowaniu wyświetla odpowiedni komunikat i blokuje swoje dalsze działanie. Użytkownik zgłosił problem Paypalowi i – jak to w przypadku Paypala bywa – po tygodniach eskalacji i braku sensownych informacji przekazał temat badaczom z Duo Security.
Kuriozalna weryfikacja dwuskładnikowego uwierzytelnienia
Badacze, jak to badacze, podeszli do sprawy metodycznie. Pobrali mobilne aplikacje Paypala na platformy IOS oraz Android, ustawili Burpa i wykonali serię standardowych operacji, analizując ruch pomiędzy telefonem a serwerami Paypala.
W trakcie analizy zauważyli, że w odpowiedzi serwera na udaną próbę logowania znajdują się dane w formacie JSON, a wśród nich taka śmieszna linijka:
"2fa enabled":"true","2fa token identifier":[{"type":"sms otp","token_identifier":"xxxxxxxx"}]
Dopiero otrzymanie tego komunikatu serwera powoduje zamknięcie się aplikacji Paypala z komunikatem o braku wsparcia dla dwuskładnikowego uwierzytelnienia. Domyślacie się zapewne już ciągu dalszego. Tak, badacze podmienili w locie fragment „true” na „false” i aplikacja uruchomiła się bez żadnego problemu oraz pozwoliła na wysłanie środków z rachunku Paypala bez pytania o kody jednorazowe. Było to możliwe dzięki temu, że aplikacja mobilna korzysta z dedykowanego API, a weryfikacja tożsamości użytkownika opierała się jedynie na odpowiedzi serwera. Programistom Paypala pozostaje pogratulować talentu.
Co ciekawe nie jest to ich pierwsza wpadka – zaledwie dwa lata temu odkryto, że aby ominąć dwuskładnikowe uwierzytelnienie wystarczy przejść proces resetowania hasła. Po jego zakończeniu użytkownik, mimo włączonego 2FA, dostawał dostęp do wszystkich funkcji serwisu. Warto także pamiętać, że poprawne wdrożenie 2FA to trudne zadanie – wcześniej podobne problemy miały takie firmy jak chociażby Google, Apple czy Dropbox.
Komentarz
Katastrofa. Najgorsze, że nie jest to przypadkowy błąd w implementacji. Ta „architektura” została wymyślona, zaimplementowana i przetestowana…