Nieopowiedziane błędne konfiguracje SendBird

Podczas przypadkowego polowania na błędy z moim zespołem ( thaivu , lamscun , thefool45 , fergustr4n ) jak zwykle wpadliśmy na przypadkowy prywatny cel. Po drodze wykorzystując cel odkryłem, że nasz cel zaimplementował funkcję czatu za pomocą usługi z platformy strony trzeciej. Po zrobieniu trochę google dork, odkryłem, że funkcja czatu naszego celu jest produktem SendBird— „wiodąca platforma interfejsów API interakcji, której zaufały nowoczesne aplikacje cyfrowe, takie jak Paypal, Yahoo, Reddit, Delivery Hero i Hinge, aby łatwo osadzić czat, głos i wideo w czasie rzeczywistym w swoich aplikacjach”. Zainteresowało mnie to i postanowiłem dowiedzieć się więcej o tym, jak to działa, aby zobaczyć, czy są jakieś ukryte działania, które mógłbym wykonać, lub ukryte konfiguracje, które programiści mogą przegapić…
1. — Poznaj produkty i dokumenty strony trzeciej
Od razu poszedłem na Stronę Główną SendBird, żeby wiedzieć, z czym przyjdzie mi się zmierzyć. Portal programisty SendBird zapewnia programistom bardzo przejrzyste i przydatne dokumenty dla każdego rodzaju produktów (przewodniki użytkowania, przykładowe interfejsy API, uwagi, rekomendacje,…).
Jest kilka interesujących notatek w czasie, gdy zaczynałem moje badania ( niektóre mogą być nieaktualne, kiedy czytasz tego bloga ):
- Host Aplikacji SendBird Klienta miałby postać „https://api-{application_id}.sendbird.com”
- Sendbird zapewnia różne opcje kontroli dostępu, a niektóre są domyślnie włączone, aby uniknąć nieoczekiwanych błędów podczas tworzenia przykładowych aplikacji.
- Klienci nie mogą samodzielnie zmieniać ustawień listy kontroli dostępu. Zmiana ustawień ACL możliwa tylko przez członka zespołu inżynierii rozwiązań firmy Sendbird .
- Domyślnie ustawienia bezpieczeństwa aplikacji SendBird dla „ użytkowników bez tokenów dostępu ” to „Odczyt i zapis” — czat oraz „Zadzwoń i odbierz” — połączenie.
Po zapoznaniu się z tym, jak działa SendBird, wróciłem do moich celów, aby użyć, pobawić się funkcjami, aby zweryfikować to, co przeczytałem powyżej. Potwierdziłem, że istnieją interfejsy API z hostem o takim samym wzorcu jak „api-{application_id}.sendbird.com” i ze ścieżkami takimi samymi, jak widziałem w dokumentach. Następnie szybko wykorzystałem bieżącą sesję API do wypróbowania różnych API w dokumentach API. Losowo wybrałem API, które wyświetla listę użytkowników w aplikacji SendBird „GET /v3/users/” i, co zaskakujące, serwer odpowiedział z powrotem z wszystkimi wymienionymi użytkownikami !!! Skacząc z radości, powiedziałem wszystkim kolegom z drużyny, żeby to sprawdzili.

Próbowaliśmy i wiedzieliśmy, że sesja naszych użytkowników może wywoływać różne interfejsy API i wykonaliśmy wiele działań na użytkownikach, kanałach, wiadomościach… w aplikacji SendBird naszych celów. To zdecydowanie była duża zepsuta kontrola dostępu z powodu błędnej konfiguracji list ACL !!!
Jednak jednej rzeczy nie mogliśmy zrozumieć, skąd wziął się „Session-Key” i jak został wygenerowany, skoro nie mogliśmy zobaczyć wartości „Session-Key” w żadnych odpowiedziach?

Wracając do Dokumentów SendBird, aby przeczytać więcej i zrobić więcej, wiedzieliśmy więcej rzeczy:
- „Domyślnie serwer Sendbird może uwierzytelnić użytkownika tylko za pomocą unikalnego identyfikatora użytkownika”
- „Jeśli nie zostanie znaleziony pasujący identyfikator użytkownika, serwer tworzy nowe konto użytkownika z identyfikatorem użytkownika”
- „Uwierzytelnianie użytkownika może odbywać się tylko za pomocą jego własnego identyfikatora użytkownika, ale także za pomocą tokena dostępu lub tokena sesji”
- Nasz cel jako ClientApp mógł zostać uwierzytelniony do SendBird Server przez WebSocket z formatem URL Upgrade WebSocket jako: „ wss://ws-{application_id}.sendbird.com/?user_id={user_id}&ai={application_id}&access_token={access_token }”
- Klient SendBird naszego celu uwierzytelniony na serwerze SendBird przez WebSocket.
- „Klucz sesji” zostanie wysłany do klienta za pośrednictwem komunikatu WebSocket po wywołaniu przez klienta Zaktualizuj adres URL protokołu WebSocket, jak powyżej
- Klient SendBird naszego celu mógł uwierzytelnić się tylko za pomocą identyfikatora użytkownika z „ access_token=null”
- Znaleźliśmy również ukryte API do uwierzytelniania za pomocą USER ID tylko jako sposób WebSocket w pliku JS: „ POST https://api-{application_id}.sendbird.com/v3/users/{user_id}/login — body: {“ app_id”:”<identyfikator_aplikacji>”} ”
3. — Jak przeprowadzać masowe sprawdzanie luk w innych instancjach SendBird w różnych celach
- Musimy potwierdzić, że nasze cele implementujące SendBird w swoich aplikacjach poprzez indeksowanie, przeprowadzają wykrywanie treści w celach i grep dla słowa „sendbird” oraz wyrażenia regularnego identyfikatora aplikacji SendBird „ [0–9A-F]{8}-[0– 9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12} ”
- Po potwierdzeniu celów implementujących SendBird i uzyskaniu identyfikatora aplikacji SendBird, sprawdzamy, czy ustawienia bezpieczeństwa aplikacji SendBird dla „użytkowników bez tokenów dostępu” są źle skonfigurowane , wykonując anonimowe logowanie/tworzenie użytkownika w następujący sposób:
- wss://ws-{application_id}.sendbird.com/?user_id={user_id}&ai={application_id}&access_token={access_token}
- POST https://api-{application_id}.sendbird.com/v3/users/{user_id}/login — treść: {“app_id”:”<application_id>”}
- https://www.postman.com/sendbird/workspace/sendbird-platform-api/overview
- https://sendbird.com/docs
- Wyciek poufnych informacji użytkowników
- Utwórz kanał czatu (bez tworzenia nowej ligi)
- Zarządzaj kanałem czatu
- Zaktualizuj profil czatu użytkownika
- Zaktualizuj konfigurację kanału grupowego
- Czatowanie z dowolnymi użytkownikami
- Atakujący może edytować/usuwać wiadomości dowolnych użytkowników będąc operatorem utworzonego przez siebie kanału.
- Atakujący może aktualizować szczegóły, konfiguracje kanału będąc członkiem dowolnego kanału.
- Jak udokumentowano, pojedynczy użytkownik SendBird mógł dołączyć tylko do limitu 2000 kanałów grupowych, atakujący mógł utworzyć 2000 kanałów grupowych i dodać do tych kanałów wszystkich użytkowników aplikacji SendBird. W rezultacie wszyscy użytkownicy nie mogli później dołączyć do żadnego kanału SendBird, co mogło spowodować odmowę usługi.
- …
- SendBird ma więcej dokumentów na temat zaleceń dotyczących bezpieczeństwa, zwłaszcza na temat list ACL.
- SendBird pozwala teraz swoim klientom samodzielnie zmieniać listy ACL.
4. Jeśli krok numer 2 nie powiódł się, ręcznie przejdziemy przez funkcje w miejscu docelowym, uzyskamy sesję użytkownika SDK w normalny sposób, jak robi to cel, i sprawdzimy błędną konfigurację list ACL, jak w kroku 3.
5. Zautomatyzuj je wszystkie!
Referencje dla API SendBird do sprawdzenia:

Po sprawdzeniu luk w różnych aplikacjach SendBird większość z nich jest podatna na błędną konfigurację list ACL. Jednak w oparciu o różne aplikacje o różnych wymaganiach biznesowych i wpływie, dotkliwość musi być również brana pod uwagę jako inna (od Średniej do Krytycznej).
Wpływy są zróżnicowane:





Świetna współpraca z thaivu , lamscun , thefool45, fergustr4n $$$$

### Aktualizacje z SendBird