Нерассказанные неправильные настройки SendBird

Во время случайного поиска ошибок в сотрудничестве с моей командой ( thaivu , lamscun , thefool45 , fergustr4n ) мы, как обычно, наткнулись на случайную частную цель. В ходе эксплуатации цели я обнаружил, что наша цель реализовала функцию чата с использованием службы сторонней платформы. Погуглив немного, я обнаружил, что функция чата нашей цели является продуктом SendBird.— «ведущая платформа API взаимодействия, которой доверяют современные цифровые приложения, такие как Paypal, Yahoo, Reddit, Delivery Hero и Hinge, для простой встраивания чата, голоса и видео в реальном времени в свои приложения». Меня это заинтересовало, и я решил больше узнать о том, как это работает, чтобы увидеть, будут ли какие-либо скрытые действия, которые я мог бы выполнить, или скрытые конфигурации, которые разработчики могут пропустить…
1-й — Изучите сторонние продукты и документы
Я пошел прямо на главный сайт SendBird, чтобы узнать, с чем мне придется столкнуться. Портал разработчиков SendBird предоставляет разработчикам очень четкие и полезные документы для каждого типа продуктов (руководства по использованию, примеры API, примечания, рекомендации и т. д.).
В то время, когда я начал свое исследование, есть несколько интересных заметок ( некоторые могут быть устаревшими, когда вы читаете этот блог ):
- Хост приложения SendBird Клиента будет иметь форму «https://api-{application_id}.sendbird.com».
- Sendbird предоставляет различные параметры контроля доступа, и некоторые из них включены по умолчанию, чтобы избежать непредвиденных ошибок при создании примеров приложений.
- Клиенты не могут самостоятельно изменять настройки списка контроля доступа. Изменение настройки ACL возможно только членом команды разработчиков решений Sendbird .
- По умолчанию настройки безопасности приложения SendBird для « пользователей без токенов доступа » — «Чтение и запись» — чат и «Вызов и ответ» — вызов.
После обзора того, как работает SendBird, я вернулся к своим целям, чтобы использовать, поиграться с функциями, чтобы проверить то, что я прочитал выше. Я подтвердил наличие API с хостом по тому же шаблону, что и «api-{application_id}.sendbird.com», и с путями, такими же, как я видел в документах. Затем я быстро использовал текущий сеанс API, чтобы попробовать разные API в документах API. Случайным образом я выбрал API со списком пользователей в приложении SendBird «GET /v3/users/», и, что удивительно, сервер ответил со всеми перечисленными пользователями !!! Подпрыгивая от радости, я сказал всем своим товарищам по команде проверить это.

Мы пробовали и знали, что сеанс наших пользователей может вызывать различные API и выполнять множество действий с пользователями, каналами, сообщениями… в приложении SendBird наших целей. Это определенно был большой сбой в управлении доступом из-за неправильной настройки ACL!!!
Однако была одна вещь, которую мы не могли понять: откуда взялся «Session-Key» и как он был сгенерирован, поскольку мы не могли видеть значение «Session-Key» ни в каких ответах?

Вернемся к документам SendBird, чтобы узнать больше и сделать больше, мы знали еще кое-что:
- «По умолчанию сервер Sendbird может аутентифицировать пользователя только по уникальному идентификатору пользователя»
- «Если соответствующий идентификатор пользователя не найден, сервер создает новую учетную запись пользователя с идентификатором пользователя»
- «Аутентификация пользователя может выполняться только с его собственным идентификатором пользователя, а также с токеном доступа или токеном сеанса».
- Наша цель как ClientApp могла пройти аутентификацию на сервере SendBird через WebSocket с форматом URL-адреса Upgrade WebSocket : }”
- Клиент SendBird нашей цели прошел аутентификацию на сервере SendBird через WebSocket.
- «Ключ сеанса» будет отправлен клиенту через сообщение WebSocket после того, как клиент вызовет URL-адрес обновления WebSocket, как указано выше.
- Клиент SendBird нашей цели мог аутентифицироваться только по идентификатору пользователя с « access_token=null».
- Мы также обнаружили скрытый API для аутентификации через USER ID только как способ WebSocket в файле JS: « POST https://api-{application_id}.sendbird.com/v3/users/{user_id}/login — body: {“ app_id”:”<application_id>”} ”
3-й — Как выполнить массовую проверку уязвимостей на других экземплярах SendBird в разных целях
- Мы должны подтвердить, что наши целевые объекты реализуют SendBird в своих приложениях путем сканирования, выполнения обнаружения контента для целевых объектов и выполнения grep для слова «sendbird» и регулярного выражения идентификатора приложения SendBird « [0–9A–F]{8}–[0– 9A–F]{4}–[0–9A–F]{4}–[0–9A–F]{4}–[0–9A–F]{12} ”
- После подтверждения целей, реализующих SendBird, и получения идентификатора приложения SendBird мы проверяем, неправильно ли настроены параметры безопасности приложения SendBird для «пользователей без токенов доступа», выполнив вход/создание анонимного пользователя следующими способами:
- 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 — тело: {"app_id":"<application_id>"}
- https://www.postman.com/sendbird/workspace/sendbird-platform-api/overview
- https://sendbird.com/docs
- Утечка конфиденциальной информации пользователей
- Создать чат-канал (без создания новой лиги)
- Управление каналом чата
- Обновите профиль чата пользователя
- Обновите конфигурацию группового канала
- Общение с любыми пользователями
- Злоумышленник мог редактировать/удалять сообщения любых пользователей, будучи оператором самостоятельно созданного канала.
- Злоумышленник может обновить детали, конфигурации канала, будучи участником любого канала.
- Как задокументировано, один пользователь SendBird может присоединиться только к 2000 групповым каналам, злоумышленник может создать 2000 групповых каналов и добавить в эти каналы всех пользователей в приложении SendBird. В результате после этого все пользователи не могли присоединиться к каким-либо каналам SendBird, что могло привести к отказу в обслуживании.
- …
- В SendBird есть больше документов о рекомендациях по безопасности, особенно о ACL.
- SendBird теперь позволяет своим клиентам самостоятельно изменять ACL.
4. Если шаг номер 2 не увенчался успехом, мы вручную пройдемся по функциям цели, получим сеанс пользователя SDK обычным способом, как это делает цель, и проверим неправильную конфигурацию ACL, как на шаге 3.
5. Автоматизация их всего!
Ссылки на API SendBird для проверки:

После проверки уязвимостей в различных приложениях SendBird большинство из них уязвимы из-за неправильной настройки ACL. Однако, исходя из разных приложений с разными бизнес-требованиями и последствиями, серьезность также следует рассматривать по-разному (от средней до критической).
Впечатления разные:





Отличное сотрудничество с thaivu , lamscun , thefool45, fergustr4n $$$$

### Обновления от SendBird