Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book

Luka w Facebooku – przejęcie pełnej kontroli nad dowolnym kontem

22 lutego 2013, 08:11 | Aktualności | 0 komentarzy

OAuth authorization framework to otwarty standard pozwalający na udostępnianie zasobów przechowywanych przez aplikację webową innym serwisom i aplikacjom zewnętrznym. Cały proces opiera się na przekazywaniu tokenów pozwalających na dostęp tylko do określonych zasobów na określonych zasadach, dzięki czemu zbędne staje się przekazywanie pełnych uprawnień lub haseł dostępowych do całej usługi. Jak się okazuje, facebookowa implementacja OAuth zawierała lukę, która umożliwiała intruzowi przejęcie całkowitej kontroli nad dowolnym profilem użytkownika.

Facebook wykorzystuje standard OAuth do komunikacji z rozmaitymi aplikacjami zewnętrznymi. Użytkownicy zezwalając aplikacji na jej działanie, de facto przyznają jej pewne określone uprawnienia (np. do publikowania na własnej tablicy) w ramach swojego profilu. Oczywiście jest to znacznie bezpieczniejsze od przekazania takiej zewnętrznej aplikacji własnych poświadczeń, czyli pełnej kontroli nad kontem. Jak się jednak okazało w przypadku Facebooka, mechanizm OAuth mógł również posłużyć intruzowi do zdobycia całkowitej kontroli nad kontem.

O odkryciu luki w Facebook OAuth poinformował na swym blogu Nir Goldshlager. Badacz na podstawie analizy parametrów przekazywanych w adresach URL znalazł sposób na obejście mechanizmu zezwalania na dostęp przez OAuth. Przykładowy facebookowy OAuth URL wygląda następująco:

https://www.facebook.com/dialog/oauth/?app_id=YOUR_APP_ID&next=YOUR_REDIRECT_URL&state=YOUR_STATE_VALUE&
scope=COMMA_SEPARATED_LIST_OF_PERMISSION_NAMES

Gdzie:

  • app_id to ID aplikacji,
  • next musi zawierać url kierujący do domeny skojarzonej z daną aplikacją.

Jak się okazało, możliwe było takie spreparowanie powyższych parametrów, by specjalnie przygotowana aplikacja przekierowywała użytkowników do dowolnej innej lokalizacji i tam też przekazywała potencjalnemu intruzowi tokeny dostępowe. Pozostał jeszcze tylko problem z obejściem wymaganego mechanizmu zezwalania aplikacji na dostęp. Tutaj jednak odpowiednie rozwiązanie nasunęło się badaczowi dzięki obserwacji wbudowanych aplikacji, takich jak Facebook Messenger, które do uzyskania pełnego dostępu do zasobów użytkowników nie wymagają żadnej zgody, a ich tokeny nie wygasają.

W rezultacie przykładowy zmodyfikowany URL PoC wygląda następująco:

https://www.facebook.com/connect/uiserver.php?app_id=220764691281998&next=https%3A%2F%2Ftouch.facebook.com%2F%23~!%2Fapps%2Ftestestestte%2F&
display=page&fbconnect=1&method=permissions.request&response_type=token

Wszystko to pozwalało intruzowi na przejęcie niewygasającego tokenu (ważnego aż do momentu zmiany hasła użytkownika) pozwalającego na pełny dostęp do konta dowolnego użytkownika, gdy tylko ten odwiedził odpowiednio spreparowany adres URL. Przygotowany został nawet materiał filmowy, na którym zaprezentowane jest praktyczne zastosowanie całej procedury:

Powyższa furtka została już zamknięta, ponieważ Goldshlager poinformował o całej sprawie Facebooka już na kilka miesięcy przed jej dzisiejszym upublicznieniem. Jak się okazuje, internetowy gigant już nie raz dziękował temu samemu badaczowi za podobne znaleziska.

Jaki wniosek z tego zdarzenia powinien wyciągnąć każdy internauta?

Otóż nadal większość internetowych ataków wymaga odwiedzenia złośliwego odnośnika, do nieznanych adresów należy więc zawsze podchodzić z dużą dozą nieufności.

Wojciech Smol, (wojciech.smol<at>sekurak.pl)

Spodobał Ci się wpis? Podziel się nim ze znajomymi:



Komentarze

Odpowiedz