Как мы нашли дыру в 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 млн зарегистрированных учетных записей, а потом отсортировать эти тонны диалогов по нужным критериям и фильтрам.
Можно было даже писать в диалоги от имени пользователя, осуществлять попытки смены пароля или восстановления аккаунта!
Это еще не все
А дальше я предлагаю вам поразмыслить, какие данные могли бы встретиться скамеру в уже существующих диалогах с поддержкой, в особенности когда пользователь не вдупляет в метод решения проблемы, но готов с радостью передать ее решение в руки специалисту поддержки. И осознать, насколько это информация может быть опасна.
Так, например, в теории, некоторые пользователи могли бы передать в чате доступ к своему аккаунту в формате логин-пароль по просьбе сотрудника:
А кто-то и вовсе мог предоставить удаленный доступ к своему ПК:
И совершенно неизвестно, сколько десятков/сотен/тысяч пользователей, которые обращаются в техподдержку, могла затронуть эта проблема.
Думаю, вы сами осознаете, что это дело пахнет писюнами плохо. В данной ситуации нами было принято единственно верное решение - как можно скорее связаться с техподдержкой и сообщить о дыре, пока кто-либо не воспользовался ей со злыми намерениями.
Наверное, вы сейчас вообразили себя скамером и сидите-думаете: "Это лежало под ногами у всех столько времени! Так просто и очевидно! Каждый мог! Мог пойти и вынести аккаунты этих бедолаг."
Действительно, может это и было просто. Но не все готовы переступить через личные моральные принципы и нормы. Мы не готовы. Давайте быть честными и жить дружно.
Чему же нас может научить эта история? Вы должны понять, что если вы взаимодействуете с глобальной сетью, вы никогда не будете в безопасности. Дыры и эксплойты могут быть в самых неочевидных местах.
Даже невинный диалог с техподдержкой, в котором вас попросили сообщить какие-то данные, может внезапно стать всеобщим достоянием.
Не стоит слишком винить разработчиков. Весь виртуальный мир был создан человеком, а человек склонен часто ошибаться и просчитываться. Особенно ярко это проявляется в крипте.
Каждый день вы ходите по минному полю и даже не замечаете этого, помните. Думайте.
Ну а с вами были ребята из лучшего канала на свете Криптоговнозавод, которые почему-то снова никого не заскамили=(.
Неужели мы те самые честные работяги, софтам которых можно доверять свои сибил аккаунты?