Привет,

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

Обзор ::

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

Структура целевого приложения ::

В приложении есть два типа пользователей:
1. Администратор / Менеджер
2. Пользователь / Сотрудник.

Менеджер создает группу, которая играет роль компании. И он может приглашать сотрудников в свою компанию / группу.

Важное примечание: Менеджер не может изменить адрес электронной почты другого менеджера или сотрудника в своей компании. Таким образом, менеджер может просто изменить свой адрес электронной почты.

На вводе адреса электронной почты есть защита, и они не позволяют вам изменить адрес электронной почты.

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

Подтверждение концепции ::

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

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

  1. Я вошел в систему с учетными данными администратора, затем перешел в раздел «Пользователи».
  2. Я щелкнул профиль сотрудника и заметил, что ввод электронной почты нельзя редактировать или изменять.

Обратите внимание, что цвет ввода адреса электронной почты серый и не может быть изменен.

3. Я добавил случайные символы в поля «Имя» и «Фамилия», нажал «Сохранить» и перехватил запрос.

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

Поэтому я добавил параметр для электронной почты в тело запроса, например: "email":"[email protected]".

Я предположил, что параметр электронной почты активен на стороне сервера, и добавил свой адрес электронной почты в качестве новой модификации. Затем я отправил запрос.

5. Как вы видите на изображении выше, я получил ответ с кодом состояния 200 OK и текстом, показывающим исходный адрес электронной почты, принадлежащий сотруднику.

6. Для меня это не имело смысла, потому что ответ был успешным. Я был уверен, что на сервере происходит что-то странное. Потому что в противном случае приложение должно либо показать ошибку в ответе, либо не продолжить выполнение запроса, либо продолжить запрос, не показывая ответа, потому что он не был успешным. Но поскольку я получил этот ответ, я был уверен, что мое электронное письмо может быть успешно передано в серверную часть.

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

Я получил сообщение об ошибке: Information provided does not match our records.

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

9. У меня осталась последняя опция, которая проверяет функциональность сброса пароля, поэтому я нажал «Сбросить пароль» и добавил свой адрес электронной почты, но, к сожалению, я получил это сообщение об ошибке, в котором говорится: We don't have that email address on file, что означает, что адрес электронной почты неверен или не принадлежит учетной записи.

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

11. Я добавил адрес электронной почты сотрудника и нажал «Отправить письмо для сброса пароля». Я получил успешный ответ A reset password email has been sent.

12. Самое смешное, что на электронную почту сотрудника ничего не было отправлено. Я был как бы без ума от того, что происходит с этим приложением 😂.

13. Я ждал 5 минут и не получил ни одного письма. Время было поздно, около 3:00 утра, поэтому я выключил ноутбук и сказал себе, что завтра проверю его снова.

14. После того, как я выключил свой ноутбук, я получил письмо на электронную почту [email protected], содержащее ссылку для сброса пароля, относящуюся к учетной записи сотрудника. Я начал смеяться 😂.

15. Я снова открыл ноутбук и проверил электронную почту, и да, я изменил пароль сотрудника и был в его учетной записи.

16. Зайдя в аккаунт Сотрудника, я тоже был в шоке! В разделе профиля ввод электронной почты показывал адрес электронной почты сотрудника, а не мой адрес электронной почты, хотя действующим адресом электронной почты теперь является мой адрес электронной почты.

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

Резюме ::

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

В качестве доказательства концепции я сделал это для учетной записи, связанной с частной программой, и показал им, как я смог завладеть их учетной записью и запретить им доступ к ней.

Хронология отчета ::

  • 28 апреля 2021 г .: я записал видео PoC и сообщил о проблеме частной программе на сайте hackerone.
  • 29 апреля 2021 г .: команда HackerOne проверила отчет и снизила уровень серьезности с критического до среднего.
  • 29 апреля 2021 г .: я попросил их пересмотреть серьезность и оценить ошибку в соответствии с бизнес-риском компании и влиянием, которое может оказать на репутацию компании и ее бизнес.
  • 3 марта 2021 г .: Дальнейшее обсуждение серьезности проблем между мной, командой HackerOne и внутренней командой Программы.
  • 25 марта 2021 г .: внутренняя группа программы оценила его как средний, указывая на то, что вы должны быть администратором / менеджером, чтобы управлять другими учетными записями. И они попросили меня подождать дальнейшего расследования основной причины этой проблемы, прежде чем назначать вознаграждение.
  • 9 июля 2021 г .: я попросил сообщить обновленную информацию об этой проблеме.
  • 12 июля 2021 г. Команда продолжает расследование.
  • 21 июля 2021 г .: внутренняя группа присвоила уровень серьезности "Средний". И наградил меня в общей сложности 600 долларами (награда 500 долларов + бонус 100 долларов).

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

Воздействие ::

Воздействие здесь безгранично. Любой менеджер или пользователь с правами администратора может взять на себя управление и получить доступ к любому другому пользователю, находящемуся в той же компании. Таким образом, вы можете украсть информацию, изменить данные или выполнить некоторые вредоносные действия внутри учетных записей пользователей.

Мои фавориты - ошибки бизнес-логики и обход конфигураций безопасности. Раньше я находил несколько подобных сценариев, но эта ошибка была уникальной, и я впервые нахожу что-то подобное.

Я также готов опубликовать рецензию об ошибке, обнаруженной в Apple, которая заплатила мне 5000 долларов за раскрытие адресной информации и номеров телефонов пользователей Apple путем связывания IDOR с ограничением скорости.

Вы можете подписаться на меня:

Твиттер, Инстаграм и мой сайт.

Спасибо за прочтение!