Badacze z firmy zajmującej się bezpieczeństwem kodowania stron internetowych SALT właśnie opublikowali fascynujący opis tego, jak znaleźli plik błąd uwierzytelniania dubbingowane CVE-2023-28131 w popularnym internetowym zestawie narzędzi do tworzenia aplikacji, znanym jako Expo.
Dobrą wiadomością jest to, że Expo odpowiedziało bardzo szybko do raportu o błędzie SALT, wymyślając poprawkę w ciągu zaledwie kilku godzin od odpowiedzialnego ujawnienia przez SALT.
Na szczęście poprawka nie polegała na pobieraniu czegokolwiek przez klientów, ponieważ łatka została zaimplementowana w usłudze chmurowej Expo i nie wymagała poprawek do żadnych wstępnie zainstalowanych aplikacji ani kodu po stronie klienta.
Expo doradczy nie tylko wyjaśnił, co się stało i jak firma to naprawiła, ale także zaoferował swoim klientom porady programistyczne, jak uniknąć tego rodzaju możliwych luk w zabezpieczeniach innych usług online.
Następnie firma SALT czekała trzy miesiące przed opublikowaniem swojego raportu, zamiast spieszyć się z nim w celach reklamowych tak szybko, jak to możliwe, dając w ten sposób użytkownikom Expo szansę na przetrawienie odpowiedzi Expo i podjęcie działań na jej podstawie.
Prostota
Błędny proces uwierzytelniania jest szczegółowo wyjaśniony w Raport firmy SALT, ale przedstawimy tutaj znacznie uproszczony opis tego, co poszło nie tak w usłudze OAUTH firmy Expo.
OŚWIADCZENIE, skrót od Otwarte ramy autoryzacji, to proces, który umożliwia dostęp do prywatnych danych w usłudze online (takich jak edytowanie profilu online, dodawanie nowego artykułu na blogu lub zatwierdzanie usługi sieciowej do publikowania dla Ciebie postów w mediach społecznościowych), bez ustawiania hasła w lub logując się bezpośrednio do tej usługi.
Kiedy zobaczysz usługi sieciowe, które oferują Zaloguj się przez Google lub Facebook na przykład prawie zawsze używają OAUTH w tle, więc nie musisz tworzyć nowej nazwy użytkownika i nowego hasła w kolejnej witrynie ani podawać swojego numeru telefonu do kolejnej usługi online.
Ściśle mówiąc, uwierzytelniasz się pośrednio, umieszczając swoje dane uwierzytelniające Google lub Facebook tylko w jednej z tych witryn.
Niektórym użytkownikom się to nie podoba, ponieważ nie chcą uwierzytelniać się w Google lub Facebooku tylko po to, by udowodnić swoją tożsamość w innych, niepowiązanych witrynach. Innym podoba się to, ponieważ zakładają, że witryny takie jak Facebook i Google mają większe doświadczenie w obsłudze procesu logowania, bezpiecznym przechowywaniu skrótów haseł i wykonywaniu 2FA niż witryna butikowa, która próbowała połączyć własne procesy bezpieczeństwa kryptograficznego.
Uwierzytelnianie zlecone na zewnątrz
Znacznie uproszczone logowanie w stylu OAUTH za pośrednictwem konta na Facebooku do witryny o nazwie example.com
, idzie coś takiego:
- Strona
example.com
mówi do Twojej aplikacji lub przeglądarki, „Witaj, X, idź i zdobądź magiczny token dostępu do tej witryny z Facebooka”. - Odwiedzasz specjalny adres URL Facebooka, logując się, jeśli jeszcze tego nie zrobiłeś, i powiedz: „Daj mi magiczny żeton dostępu do
example.com
". - Jeśli Facebook uzna, że jesteś tym, za kogo się podajesz, odpowiada: „Cześć, X, oto twój magiczny token dostępu”.
- Przekazujesz token dostępu
example.com
, który może następnie skontaktować się z samym Facebookiem, aby zweryfikować token.
Pamiętaj, że tylko Facebook widzi twoje hasło do Facebooka i kod 2FA, jeśli to konieczne, więc usługa Facebook działa jako pośrednik uwierzytelniania między tobą a example.com
.
Za kulisami odbywa się ostateczna weryfikacja, taka jak ta:
- Strona
example.com
mówi do Facebooka, „Czy wydałeś ten token i czy sprawdza on poprawność użytkownika X?” - Jeśli Facebook wyrazi zgodę, mówi
example.com
, „Tak, uważamy, że ten użytkownik jest uwierzytelniony”.
Sekwencja odwracalna
Błąd, który badacze SALT znaleźli w kodzie Expo, może zostać wywołany przez złośliwą zmianę sposobu obsługi przez Expo tego, co można nazwać procesem „pośrednictwa w uwierzytelnianiu”.
Kluczowe punkty są następujące:
- Samo Expo dodaje opakowanie wokół procesu weryfikacji, tak, aby obsługiwał uwierzytelnianie i walidację za Ciebie, ostatecznie przekazując magiczny token dostępu do żądanej witryny (
example.com
na powyższej giełdzie) z powrotem do aplikacji lub witryny, z której się łączysz. - Parametry używane do obsługi weryfikacji są pakowane w duży adres URL, który jest przesyłany do usługi Expo.
- Jeden z tych parametrów jest tymczasowo przechowywany w internetowym pliku cookie który określa adres URL, na który zostanie wysłany końcowy magiczny token bezpieczeństwa w celu umożliwienia dostępu.
- Zanim token bezpieczeństwa zostanie dostarczony, wyskakujące okienko prosi o zweryfikowanie adresu URL, który ma zostać autoryzowany, dzięki czemu można złapać każdego, kto próbuje zastąpić fałszywy adres URL w procesie logowania.
- Jeśli zatwierdzisz wyskakujące okienko, Expo przekierowuje Cię do procesu weryfikacji na Facebooku.
- Jeśli Facebook zatwierdzi weryfikację, zwraca magiczny token dostępu do usługi Expo, a Expo przekazuje go na adres URL, który właśnie zatwierdziłeś w wyskakującym okienku, nazwany
returnURL
. - Aplikacja lub strona internetowa nasłuchuje o określonej godzinie
returnURL
odbiera oddzwonienie od Expo, uzyskuje token dostępu i dlatego jest uwierzytelniany jako Ty.
Niestety, badacze SALT odkryli, że mogą podważyć proces logowania, używając kodu JavaScript, aby uzyskać dostęp do początkowego adresu URL logowania do Expo, ale następnie zabijając wyskakujące okienko weryfikacyjne, zanim zdążysz je przeczytać lub zatwierdzić samodzielnie.
Jednak w tym momencie serwis Expo ustawił już plik cookie o nazwie ru
(skrót od returnURL
), aby powiedzieć mu, gdzie oddzwonić ze swoim magicznym tokenem dostępu na końcu.
Oznaczało to, że cyberprzestępca mógł oszukać kod Expo, aby „zapamiętał” a returnURL
jak na przykład https://roguesite.example
, nigdy nie widząc okna dialogowego ostrzegającego o trwającym ataku, nie mówiąc już o zatwierdzeniu go przez pomyłkę.
Następnie naukowcy wykorzystali drugi fragment kodu JavaScript do symulacji przekierowania Expo do procesu weryfikacji Facebooka, który automatycznie zakończyłby się pomyślnie, gdybyś (podobnie jak wiele osób) był już zalogowany na samym Facebooku.
Z kolei weryfikacja Facebooka przekierowałaby proces logowania Expo z powrotem do własnego kodu JavaScript Expo…
…które ufnie, ale błędnie, chwyciłyby nigdy nie zweryfikowane returnURL
za oddzwonienie z tej magii ru
cookie, które ustawiło na początku, bez Twojej zgody lub wiedzy.
Awaria otwarta czy awaria zamknięta?
Jak widać z powyższego opisu, luka została spowodowana niewłaściwą awarią kodu Expo.
Kod uwierzytelniający powinien ogólnie nie udało się zamknąć, w żargonie, co oznacza, że proces nie powinien się powieść, chyba że zostanie zasygnalizowana jakaś aktywna aprobata.
Domyślamy się, że Expo nie zamierzało tego robić awaria otwarta, biorąc pod uwagę, że raport SALT pokazuje, że wyskakujące okno dialogowe zatwierdzania wyglądało tak:
Aplikacja pod adresem https://roguesite.example prosi o zalogowanie się na konto na Facebooku. Czy w pełni ufasz https://roguesite.example i zgadzasz się na to: [Nie] [Tak]
Domyślna odpowiedź, jak można się spodziewać, została ustawiona na [No]
, ale spowodowałoby to awarię systemu tylko wtedy, gdybyś religijnie użył własnego kodu po stronie klienta Expo do kontrolowania procesu weryfikacji.
Dostarczając własny JavaScript do uruchomienia sekwencji próśb o weryfikację, badacze byli w stanie potraktować okno dialogowe zatwierdzenia tak, jakby brzmiało:
Jeśli wyraźnie nie każesz nam blokować https://roguesite.example logowania za pośrednictwem Twojego konta na Facebooku, pozwolimy mu to zrobić: [Zezwól] [Zablokuj]
Rozwiązaniem, między innymi, było ustawienie początkowego kodu logowania Expo, aby ustawić tę magię ru
ciastko dopiero po wyraźnym zatwierdzeniu tzw returnURL
, aby późniejszy kod logowania JavaScript Expo nie został zamknięty, gdyby okienko weryfikacyjne zostało pominięte, zamiast ślepo ufać adresowi URL, którego nigdy nie widziałeś ani nie zatwierdzałeś.
Pod wieloma względami ten błąd jest podobny do Inteligentna wtyczka Belkin Wemo błąd, o którym pisaliśmy dwa tygodnie temu, mimo że główną przyczyną w przypadku Belkina było przepełnienie bufora, a nie nieuczciwe wywołanie zwrotne w sieci.
Kod Belkina przydzielił 68-bajtowy bufor pamięci w swoim kodzie po stronie serwera, ale polegał na sprawdzeniu w swoim kodzie po stronie klienta, czy nie próbowałeś wysłać więcej niż 68 bajtów, pozostawiając w ten sposób serwer na łasce atakujących, którzy zdecydowali się rozmawiać z serwerem przy użyciu własnego kodu po stronie klienta, który omijał proces weryfikacji.
Co robić?
- Podczas zgłaszania i pisania błędów, rozważ przestrzeganie SALT przykład. Ujawniaj odpowiedzialnie, dając sprzedawcy rozsądny czas na naprawienie luki oraz rozsądny czas na poinformowanie własnych użytkowników przed opublikowaniem szczegółów, które pozwoliłyby komukolwiek innemu na stworzenie własnego exploita.
- Otrzymując raporty o błędach, rozważyć śledzenie Expo przykład. Odpowiadaj szybko, pozostań w kontakcie ze zgłaszającym błąd, jak najszybciej załatw lukę w zabezpieczeniach, przedstaw użytkownikom pomocny raport z dochodzenia i zachowaj obiektywizm. (Oprzyj się sugestiom zespołu marketingowego, by chwalić siebie za „poważne traktowanie bezpieczeństwa” lub odrzucać problem jako nieistotny. Decyzja należy do użytkowników na podstawie szybkości i trafności Twojej odpowiedzi oraz własnej oceny ryzyka).
- Upewnij się, że Twój kod uwierzytelniający nie powiedzie się. Upewnij się, że nie masz kroków weryfikacji lub zatwierdzenia, które można zneutralizować, po prostu je ignorując lub anulując.
- Nigdy nie zakładaj, że twój własny kod po stronie klienta będzie kontrolował proces weryfikacji. Załóżmy, że atakujący dokonają inżynierii wstecznej twojego protokołu i stworzą własny kod klienta, aby obejść jak najwięcej kontroli.
- Wyloguj się z kont internetowych, gdy nie używasz ich aktywnie. Wiele osób loguje się na konta takie jak Google, Amazon, Facebook, Apple i inne, a potem pozostaje zalogowane w nieskończoność, ponieważ jest to wygodne. Wylogowanie zapobiega wykonywaniu wielu czynności (w tym uwierzytelniania, publikowania postów, polubień, udostępniania i wielu innych) w nieoczekiwanych sytuacjach — zamiast tego zobaczysz monit o zalogowanie.
Nie zapominaj, że wylogowując się z usług internetowych, kiedy tylko jest to możliwe, oraz często usuwając wszystkie pliki cookie przeglądarki i przechowywane dane sieciowe, zmniejszasz również ilość informacji o śledzeniu, które witryny mogą gromadzić o Tobie podczas przeglądania.
W końcu, jeśli nie jesteś zalogowany i nie masz żadnych śledzących plików cookie z poprzedniego okresu, witryny nie wiedzą już dokładnie, kim jesteś ani co robiłeś podczas ostatniej wizyty.
- Dystrybucja treści i PR oparta na SEO. Uzyskaj wzmocnienie już dziś.
- PlatoAiStream. Analiza danych Web3. Wiedza wzmocniona. Dostęp tutaj.
- Wybijanie przyszłości w Adryenn Ashley. Dostęp tutaj.
- Kupuj i sprzedawaj akcje spółek PRE-IPO z PREIPO®. Dostęp tutaj.
- Źródło: https://nakedsecurity.sophos.com/2023/05/30/serious-security-verification-is-vital-examining-an-oauth-login-bug/
- :ma
- :Jest
- :nie
- :Gdzie
- $W GÓRĘ
- 1
- 15%
- 2FA
- a
- Zdolny
- O nas
- powyżej
- bezwzględny
- dostęp
- Konto
- Konta
- Przejmuje
- działać
- działania
- aktywny
- aktywnie
- Dzieje Apostolskie
- dodanie
- Dodaje
- Rada
- doradzać
- Po
- temu
- Wszystkie kategorie
- przydzielony
- dopuszczać
- pozwala
- sam
- już
- również
- zawsze
- Amazonka
- wśród
- ilość
- an
- i
- Inne
- odpowiedź
- każdy
- ktoś
- wszystko
- Aplikacja
- Apple
- zatwierdzenie
- Zatwierdzać
- zatwierdzony
- mobilne i webowe
- SĄ
- na około
- artykuł
- AS
- oszacowanie
- At
- atakować
- uwierzytelniać
- uwierzytelniony
- Uwierzytelnianie
- autor
- upoważniony
- autoryzacja
- samochód
- automatycznie
- uniknąć
- z powrotem
- tło
- background-image
- na podstawie
- BE
- bo
- być
- zanim
- pomiędzy
- Duży
- na oślep
- Blokować
- Blog
- granica
- Dolny
- pośrednik
- przeglądarka
- pliki cookie przeglądarki
- bufor
- przepełnienie bufora
- Bug
- błędy
- ale
- by
- wezwanie
- nazywa
- CAN
- walizka
- zapasy
- Spowodować
- powodowany
- Centrum
- szansa
- Zmiany
- kontrola
- Wykrywanie urządzeń szpiegujących
- roszczenie
- Clearing
- klient
- zamknięte
- Chmura
- kod
- Kodowanie
- zbierać
- kolor
- przyjście
- sukcesy firma
- Podłączanie
- Rozważać
- skontaktuj się
- kontrola
- Wygodny
- ciastko
- cookies
- mógłby
- pokrywa
- Stwórz
- Listy uwierzytelniające
- kryptograficzny
- Klientów
- CYBERPRZESTĘPCA
- dane
- zdecydować
- postanowiła
- Domyślnie
- dostarczona
- opis
- życzenia
- detal
- detale
- Dialog
- ZROBIŁ
- Digest
- bezpośrednio
- Ujawniać
- ujawnienie
- Oddalić
- Wyświetlacz
- do
- robi
- robi
- darowizna
- nie
- dubbingowane
- redagowanie
- więcej
- umożliwiać
- zakończenia
- Parzyste
- EVER
- dokładnie
- Badanie
- przykład
- wymiana
- oczekiwać
- doświadczenie
- wyjaśnione
- Wykorzystać
- Wystawa
- FAIL
- nie
- nie
- fascynujący
- kilka
- finał
- Fix
- ustalony
- następujący
- następujący sposób
- W razie zamówieenia projektu
- znaleziono
- często
- od
- w pełni
- ogólnie
- otrzymać
- Dać
- dany
- Dający
- Go
- Goes
- dobry
- chwycić
- bardzo
- miał
- ręka
- Uchwyty
- Prowadzenie
- się
- Wydarzenie
- Have
- wysokość
- pomocny
- tutaj
- GODZINY
- unosić
- W jaki sposób
- How To
- Jednak
- HTTPS
- tożsamość
- if
- realizowane
- in
- Włącznie z
- pośrednio
- Informacja
- początkowy
- zamiast
- Zamierzam
- najnowszych
- badawczy
- problem
- IT
- JEGO
- samo
- żargon
- JAVASCRIPT
- właśnie
- Trzymać
- Klawisz
- robić na drutach
- Wiedzieć
- wiedza
- znany
- Nazwisko
- później
- pozostawiając
- lewo
- lubić
- Słuchanie
- ll
- zalogowany
- zalogowaniu
- Zaloguj Się
- dłużej
- wyglądał
- magia
- robić
- wiele
- wielu ludzi
- Margines
- Marketing
- Maksymalna szerokość
- znaczenie
- Oznaczało
- Media
- Pamięć
- może
- błąd
- miesięcy
- jeszcze
- dużo
- O imieniu
- Potrzebować
- potrzebne
- nigdy
- Nowości
- aktualności
- Nie
- normalna
- numer
- przysięgać
- cel
- of
- poza
- oferta
- oferowany
- on
- ONE
- Online
- tylko
- koncepcja
- Option
- or
- Inne
- Pozostałe
- na zewnątrz
- koniec
- własny
- zatłoczony
- parametry
- przebiegi
- Przechodzący
- Hasło
- Łata
- Łatki
- Paweł
- Ludzie
- telefon
- plato
- Analiza danych Platona
- PlatoDane
- plus
- punkt
- zwrotnica
- Popularny
- position
- możliwy
- Wiadomości
- teraźniejszość
- zapobiega
- prywatny
- wygląda tak
- procesów
- Profil
- Programowanie
- protokół
- Udowodnij
- zapewniać
- reklama
- opublikowany
- Wydawniczy
- cele
- Putting
- szybko
- raczej
- Czytaj
- naprawdę
- rozsądny
- otrzymuje
- odbieranie
- przekierowanie
- zmniejszyć
- polegać
- odpowiadać
- raport
- reporter
- Raportowanie
- Raporty
- wywołań
- wymagać
- Badacze
- odpowiedź
- odpowiedzialny
- powraca
- prawo
- Ryzyko
- korzeń
- run
- Powiedział
- sól
- zadowolony
- powiedzieć
- mówią
- Sceny
- druga
- bezpiecznie
- bezpieczeństwo
- token bezpieczeństwa
- widzieć
- widzenie
- widziany
- widzi
- wysłać
- wysłany
- Sekwencja
- poważny
- usługa
- Usługi
- zestaw
- ustawienie
- Akcje
- Short
- powinien
- Targi
- znak
- podobny
- uproszczony
- po prostu
- witryna internetowa
- Witryny
- mądry
- So
- Obserwuj Nas
- Media społecznościowe
- Posty w mediach społecznościowych
- solidny
- rozwiązanie
- kilka
- coś
- Wkrótce
- Mówiąc
- specjalny
- określony
- początek
- pobyt
- Cel
- przechowywany
- składane
- osiągnąć sukces
- taki
- dostarczanie
- SVG
- system
- Mówić
- powiedzieć
- mówi
- niż
- że
- Połączenia
- ich
- Im
- następnie
- w związku z tym
- Te
- one
- to
- tych
- chociaż?
- trzy
- czas
- do
- żeton
- Zestaw narzędzi
- Top
- Śledzenie
- przejście
- przezroczysty
- leczyć
- wypróbowany
- wyzwalać
- rozsierdzony
- Zaufaj
- ufny
- próbować
- SKRĘCAĆ
- drugiej
- Ostatecznie
- dla
- na
- URL
- us
- używany
- Użytkownik
- Użytkownicy
- za pomocą
- UPRAWOMOCNIĆ
- uprawomocnienie
- sprzedawca
- Weryfikacja
- zweryfikować
- przez
- Odwiedzić
- odwiedził
- istotny
- wrażliwość
- chcieć
- była
- Droga..
- sposoby
- we
- sieć
- usługi internetowe
- Strona internetowa
- tygodni
- poszedł
- były
- Co
- jeśli chodzi o komunikację i motywację
- ilekroć
- który
- KIM
- będzie
- w
- w ciągu
- bez
- by
- pisanie
- Źle
- X
- tak
- jeszcze
- ty
- Twój
- siebie
- zefirnet