Как стать автором
Обновить

Перевод: Захват аккаунта: Эпическая история баг-баунти

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров2.3K
Автор оригинала: Jaydev Ahire

Здравствуйте, друзья! Я вернулся после долгого перерыва с интересной ошибкой Account Takeover и тем, как я связал ее с XSS. Вы можете запутаться, поскольку это длинная статья, но не волнуйтесь, дочитайте до конца; в конце я все упростил для лучшего понимания.

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

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

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

Нет возможности изменить электронную почту
Нет возможности изменить электронную почту

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

Я заметил и начал играть с UserAttributes. Сначала я изменил name на update_email и value на почту существующего аккаунта.Я получил ошибку -
{
“__type”:”InvalidParameterException”,
”message”:”user.update_email: Attribute does not exist in the schema.\n”
}

Я снова изменил name на change_email и отправил запрос, но получил ту же ошибку -...
{
“__type”:”InvalidParameterException”,
”message”:”user.change_email: Attribute does not exist in the schema.\n”
}

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

{
“__type”:”InvalidParameterException”,
”message”:”user.Username: Attribute does not exist in the schema.\n”
}

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

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

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

Ух ты! Я слишком разволновался, составил отчет и отправил его :)

В течение нескольких часов они изменили его на "Неприменимо" и прислали мне этот ответ:

Получив этот ответ, я вернулся в приложение и попытался войти в систему, используя почту жертвы (Cyborj27+9@gmail.com) и пароль злоумышленника, и получил ошибку - "имя пользователя или пароль неверны".

Затем я попытался сбросить пароль, чтобы проверить, отправил ли он какой-либо OTP.

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

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

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

Через 15 минут я попытался войти в систему с помощью электронной почты жертвы и пароля, использованного при регистрации. Но я все еще получал эту ошибку - "имя пользователя или пароль неверны".

Тогда я попытался войти в систему с помощью электронной почты жертвы (cyborj27+9@gmail.com) и пароля злоумышленника (wrestlingmaster27+2@gmail.com). И к моему удивлению, я получил доступ к аккаунту!

Теперь главная проблема заключалась в следующем.

"Пароль может быть сброшен владельцем адреса электронной почты в любое время".

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

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

Я такой:

Проблема решена! Пользователь не может сбросить свой пароль через ссылку сброса пароля.

Возможно, до сих пор это было не очень понятно, но я подытожу вкратце:

  1. Две электронные почты:Нападающий - Wrestlingmaster27+2@gmail.comЖертва (незарегистрированный аккаунт) - Cyborj27+9@gmail.com

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

  3. Из учетной записи атакующего измените адрес электронной почты на адрес жертвы, перечислив значение UserAttributes.
    "UserAttributes":[
    {"Name": "email",
    "Value": "cyborj27+9@gmail.com"
    }

  4. Когда злоумышленник сменит почту, жертва получит OTP-код для проверки.

  5. Но проверять почту не нужно, злоумышленник уже получил электронную почту жертвы, привязанную к ее аккаунту.

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

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

  8. Через 15 минут злоумышленник возвращается к панели входа и успешно входит в систему, используя электронную почту жертвы и пароль злоумышленника.

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

  10. Из-за сильной неправильной конфигурации (Broken Access Control) у злоумышленника есть учетная запись, связанная с электронной почтой жертвы. Атакующий только зарегистрировал электронную почту и не верифицировал ее, поэтому на внутреннем сервере нет записи об электронной почте жертвы. (Это только мое предположение, я не уверен).

Я заблокировал все способы восстановления аккаунта для жертвы:

  1. Жертва не может сбросить свой пароль с помощью "функции сброса пароля".

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

Но все же оставалось одно условие "Если", что если жертве удастся восстановить свой аккаунт?

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

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

Я поместил основную XSS полезную нагрузку в поле фамилии, но приложение показало пустое белое пространство и никакого предупреждения.

После нескольких часов попыток я выяснил, что приложение имеет только базовую защиту от XSS, и фильтрует только <script>, <img>, alert и т.д.

Затем я создал полезную нагрузку, заменил alert на prompt, и все заработало!

<a onmouseover=”prompt(document.cookie)”>Here</a>

Как только жертва прокрутит страницу с фамилией, сработает XSS.

Я заблокировал все способы получения пароля жертвой, и даже если им удастся это сделать (что практически невозможно), то в разделе профиля их ждет XSS.

Влияние на бизнес:

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

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

  3. Как злоумышленник, я могу установить имя жертвы в качестве хранимой XSS полезной нагрузки, поскольку приложение уязвимо к хранимому XSS. Когда жертва сбросит свой пароль (что практически невозможно), она войдет в свой аккаунт. Как только жертва войдет в систему, сработает XSS полезная нагрузка, что приведет к раскрытию cookies.

  4. Обход механизмов аутентификации этого приложения позволяет злоумышленнику (предварительно) завладеть учетной записью жертвы. Как злоумышленник, я могу использовать любой адрес электронной почты жертвы для регистрации/привязки аккаунта и выполнения действий от имени жертвы.

"Если вы дошли до этого момента, я хочу сказать вам спасибо за то, что прочитали эту длинную историю!"

Давайте общаться: Twitter и Linkedin.

Оригинал статьи - здесь.
Поддержите автора хлопками на Medium.

Перевод статьи был выполнен проектом перевод энтузиаста:

  • ? @Ent_TranslateIB - Телеграмм канал с тематикой информационной безопасности

  • ? @Ent_Translate - Инстаграм проекта

Теги:
Хабы:
Всего голосов 9: ↑7 и ↓2+8
Комментарии2

Публикации

Истории

Работа

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
10 – 11 октября
HR IT & Team Lead конференция «Битва за IT-таланты»
МоскваОнлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн