Кто я

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

Введение

В этом отчете я расскажу о шагах, которые я предпринял для того, чтобы превратить "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 - Хакер

Комментарии (0)