
Кто я
Я Махмуд Круш, студент третьего курса факультета инженерии. Я стремлюсь стать тестировщиком на проникновение и в данный момент подрабатываю охотником за уязвимостями.
Введение
В этом отчете я расскажу о шагах, которые я предпринял для того, чтобы превратить «Pre-Account Takeover» в «Privilege Escalation». Уязвимость возникла из-за отсутствия надлежащего подтверждения электронной почты в процессе создания учетной записи в приложении.
Краткая информация о цели
Целевой платформой была система, предназначенная для создания и размещения веб-страниц, изображений и текста (с использованием интерфейса drag-and-drop). Платформа поддерживает совместную работу через рабочие пространства workSpace, предусматривающие разные уровни привилегий пользователей:
-
Owner → Обладает полными привилегиями в рабочей области.
-
Admin → Имеет те же привилегии, что и владелец, за исключением возможности управлять владельцем (удалять или изменять).
-
Publisher → Может публиковать и редактировать страницы, а также управлять содержимым в пределах публикации.
-
Editor → Может редактировать существующие страницы и создавать новые, но не может их публиковать.
-
Guest → Имеет только право просмотра.
Первый шаг
Во время изучения цели — назовем её example.com — я начал узнавать о различных уровнях привилегий на сайте и способах взаимодействия пользователей с платформой.
Зарегистрировавшись на сайте, я заметил, что могу сразу же получить доступ к своему аккаунту, не подтверждая свой адрес электронной почты. Хотя подтверждающее письмо было отправлено, оно не требовалось для активации или обеспечения доступа к аккаунту.
В тот момент я задумался о возможной уязвимости, связанной с предварительным захватом аккаунта. В прошлом, я сообщал об этой проблеме примерно три-четыре раза, но постоянно она помечалась как информативная, поэтому я решил двинуться дальше и прекратить её изучение.
Второй шаг
Исследуя цель как пользователь-гость, я обнаружил, что могу просматривать приглашенных пользователей, которые были в состоянии ожидания (т.е. они были приглашены, но еще не завершили свою регистрацию).

Это привлекло мое внимание — я понял, что потенциально это можно использовать в Pre-Account Takeover сценарии. Я задумался: что, если я смогу зарегистрироваться, используя тот же электронный адрес, который уже был приглашен, и получить доступ с повышенными привилегиями?
Третий шаг
Теперь давайте подумаем о том, как бы я мог принять приглашение, даже если оно отправлено только на электронную почту пользователя. Я пробовал несколько методов, таких как повторное использование ссылок (предыдущие приглашения), но ничего не сработало.
Помогая мне с этой задачей, мой друг обнаружил GraphQL запрос, который возвращал детальную информацию о рабочем пространстве, включая данные о приглашенных пользователях. Я решил исследовать этот запрос дальше, чтобы посмотреть, смогу ли я извлечь какую-либо полезную информацию, которая могла бы помочь в создании успешной атаки Pre-Account Takeover.

Просматривая GraphQL ответ, я нашел раздел, в котором содержалась информация о приглашенных пользователях, и, что самое важное, там был ID приглашения.

Затем я вернулся к анализу процесса принятия приглашения и обнаружил, что он использует мутацию GraphQL, которая требует ID приглашения для завершения процесса. Это было важным открытием — имея ID в открытом доступе, у меня было все необходимое, чтобы попытаться принять приглашение самостоятельно.

Итак, давайте соберем все воедино. Теперь у нас есть полный сценарий, который приводит к повышению привилегий на моем почтовом аккаунте.
Для достижения этого мне понадобились лишь две вещи:
-
Токен авторизации, который я получил через Pre-Account Takeover.
-
ID приглашения, который я обнаружил благодаря избыточному раскрытию данных в API (в частности, в ответе GraphQL).
С этими двумя элементами я смог успешно принять приглашение, предназначенное для другого пользователя, и получить доступ к рабочему пространству с привилегиями администратора — используя мой собственный email.
Теперь давайте пройдемся по полному сценарию шаг за шагом, чтобы понять, насколько опасна эта уязвимость на самом деле.
Сценарий атаки
-
Я начинаю как гость, ожидая, пока владелец пригласит пользователя с привилегиями администратора.
-
Я беру приглашенный адрес электронной почты и указав его прохожу регистрацю (пользуясь отсутствием подтверждения электронной почты).
-
С помощью Burp Suite нахожу UserSettingsWorkspace GraphQL запрос в ответе.
-
Извлекаю ID приглашения из этого ответа (благодаря избыточному раскрытию данных).
-
Получаю мутацию принятия приглашения (либо из GraphQL, либо из ранее перехваченного запроса).
-
Заменяю токен авторизации на токен недавно зарегистрированного (контролируемого атакующим) аккаунта, и внедряю ID приглашения.
-
Теперь я успешно получаю доступ к целевому рабочему пространству и повышаю свои привилегии с гостя до администратора.
-
Наконец, я удаляю оригинальный приглашенный email (тот, который я перехватил) и приглашаю снова, используя свой собственный email, чтобы полностью захватить роль администратора.

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

Еще больше познавательного контента в Telegram-канале — Life-Hack — Хакер
ссылка на оригинал статьи https://habr.com/ru/articles/944220/
Добавить комментарий