July 18, 2023

Как мы нашли дыру в Dolphin или почему вы никогда не будете в безопасности

На связи Криптоговнозавод. Сегодня мы вам поведаем историю, как мы случайно нашли и помогли решить проблему с безопасностью в одном известном сервисе.

На днях наши подписчики, использующие скрипт для бесплатных профилей (мы осуждаем его использование) пожаловались в чате на странное явление: в виджете диалога с техподдержкой, который встроен в приложение антидетекта появились сообщения, которые они никогда не писали:

Данное явление сильно насторожило наших подписчиков. Еще больше смутило то, что у всех у них диалог выглядел совершенно идентично. То есть, это и был один и тот же диалог, общий у всех юзеров.

Причина такого поведения виджета была обнаружена нами сразу. В скрипте, который они используют, «шутки ради» визуально был заменен username (почта) пользователя на what@what.com, а user_id на 1111111.

Данное изменение никак не влияло на работу антидетекта, однако, по-видимому, использовалось виджетом сообщений для идентификации. То есть, никакой опасности для пользователей проблема не представляла.

Тем не менее, у нас возникло множество вопросов. Во-первых, КАКОГО ХУ..

Было непонятно, каким образом люди, использующие разные учетные записи dolphin, впринципе могли получить одно общее диалоговое окно с техподдержкой. Разве для общения в виджете индивидуальная авторизация в сервисе не нужна?

Так и есть! Тестовым путем мы поняли, что хоть в запросах виджета и передается информация об аккаунте dolphin, она никак не проверяется на сервере. Меняя в запросе только параметр user_id, даже без изменения email

user_data: {
    email: zalupkin@lupa.ru,
    user_id: 2281337
}

можно было получить доступ к любому обращению пользователей в техподдержку. И для этого достаточно было лишь отправить один единственный запрос на сервер обмена сообщениями Intercom.

В большинстве других сайтов и программ, которые используют виджеты от этого поставщика (например, producthunt), в запросе существует дополнительный параметр user_hash, индивидуальный для каждого пользователя, который сверяется на сервере с user_id

user_data: {
    email: zalupkin@lupa.ru,
    user_id: 2281337,
    user_hash: 169be12978e98e8e5e8f2557cf84c65dd500cf0af6d6FE1bf8
}

и в случае несовпадения закрывает доступ с ошибкой:

Invalid user_hash. Make sure you are correctly generating your 
user_hash for Identity Verification

Здесь же, изначально такой метод не использовался.

Для того, чтобы проверить, представляет ли это какую-либо угрозу безопасности для проекта и личных данных пользователей, был накидан тестовый скрипт который отправляет на intercom запросы с разными user_id.

Результат был шокирующим. Оказалось, что таким нелепым способом, можно было получить некоторые личные данные пользователей - такие как ФИО, текущая геолокация и т.д:

Помимо этого, злоумышленник мог получить полный текст диалога с техподдержкой буквально любой из 2 млн зарегистрированных учетных записей, а потом отсортировать эти тонны диалогов по нужным критериям и фильтрам.

Можно было даже писать в диалоги от имени пользователя, осуществлять попытки смены пароля или восстановления аккаунта!

Это еще не все

А дальше я предлагаю вам поразмыслить, какие данные могли бы встретиться скамеру в уже существующих диалогах с поддержкой, в особенности когда пользователь не вдупляет в метод решения проблемы, но готов с радостью передать ее решение в руки специалисту поддержки. И осознать, насколько это информация может быть опасна.

Так, например, в теории, некоторые пользователи могли бы передать в чате доступ к своему аккаунту в формате логин-пароль по просьбе сотрудника:

Пример вымышлен и не имеет ничего общего с реальными диалогами
Пример вымышлен и не имеет ничего общего с реальными диалогами
Пример вымышлен и не имеет ничего общего с реальными диалогами

А кто-то и вовсе мог предоставить удаленный доступ к своему ПК:

Пример вымышлен и не имеет ничего общего с реальными диалогами

И совершенно неизвестно, сколько десятков/сотен/тысяч пользователей, которые обращаются в техподдержку, могла затронуть эта проблема.

Думаю, вы сами осознаете, что это дело пахнет писюнами плохо. В данной ситуации нами было принято единственно верное решение - как можно скорее связаться с техподдержкой и сообщить о дыре, пока кто-либо не воспользовался ей со злыми намерениями.

Наверное, вы сейчас вообразили себя скамером и сидите-думаете: "Это лежало под ногами у всех столько времени! Так просто и очевидно! Каждый мог! Мог пойти и вынести аккаунты этих бедолаг."

Действительно, может это и было просто. Но не все готовы переступить через личные моральные принципы и нормы. Мы не готовы. Давайте быть честными и жить дружно.

Чему же нас может научить эта история? Вы должны понять, что если вы взаимодействуете с глобальной сетью, вы никогда не будете в безопасности. Дыры и эксплойты могут быть в самых неочевидных местах.

Даже невинный диалог с техподдержкой, в котором вас попросили сообщить какие-то данные, может внезапно стать всеобщим достоянием.

Не стоит слишком винить разработчиков. Весь виртуальный мир был создан человеком, а человек склонен часто ошибаться и просчитываться. Особенно ярко это проявляется в крипте.

Каждый день вы ходите по минному полю и даже не замечаете этого, помните. Думайте.

Ну а с вами были ребята из лучшего канала на свете Криптоговнозавод, которые почему-то снова никого не заскамили=(.

Неужели мы те самые честные работяги, софтам которых можно доверять свои сибил аккаунты?

< Donate >

(any chain)