Раскрытие электронной почты и захват аккаунта в Facebook

Marat_1162

Стаж на ФС с 2014 г
ЖУРНАЛИСТ
Private Club
Старожил
Migalki Club
Меценат
Регистрация
25/3/16
Сообщения
4.625
Репутация
8.866
Реакции
22.633
RUB
0
Сделок через гаранта
4
Депозит
3 500 рублей
Эта статья носит исключительно образовательный характер. Автор не несет ответственности за любые последствия ее прочтения.

Данная статья является переводом и ведется со слов автора. .

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

Я скачал кучу apk файлов Facebook и мессенджеров разных версий, нашел все конечные точки, отсортировал их и просмотрел.

В процессе я наткнулся на одну интересную конечную точку с названием:

POST auth/flashcall_account_recovery
8e32e7f065f34a02211e3.png

Конечная точка требует 3 параметра:

cuid, encrypted_phone_numbers и cli

CUID в основном означал зашифрованную электронную почту/номер телефона, которые оказалось легко найти.

Просто указываем адрес электронной почты жертвы в конечной точке

POST /recover_accounts
7319975c199a1331d1957.png

И в ответ вы получите CUID.

Затем, следует пройти по пути восстановления пароля на Facebook.

Я заметил, что в конечной точке, ответственной за отправку OTP кода в Facebook, был параметр с именем:

should_use_flash_call=false

Если он установлен в false, вы получите OTP SMS на свой телефон, а если он установлен в true, вы получите телефонный звонок вместо OTP для восстановления учетной записи.

И в ответе содержались требуемые зашифрованные номера телефонов.

eb908be6057de2d484a07.png

Теперь я не мог понять, что означает параметр cli.

Единственное, что мне пришло в голову, это «интерфейс командной строки (cli)».

Не сумев понять, я подставил null вместо значения.

Когда я сделал запрос, я получил идентификатор пользователя, значение электронной почты которого я указал в качестве CUID.

Это означает, что злоумышленник может предоставить чей-либо адрес электронной почты/телефона в качестве CUID, и в ответ он сможет точно определить, кому принадлежит этот адрес электронной почты.

e7a88599c492c3a5f7594.png

Я быстро отправил отчет, и он был принят и исправлен в течение дня.

Мне было очень интересно узнать об этой конечной точке, поскольку я никогда не использовал «восстановление с помощью телефонного звонка» для сброса пароля.

Ни в моем пользовательском интерфейсе, ни в Google, ни в Youtube не было много информации об этом процессе восстановления учетной записи.

Итак, я начал анализировать, как работает этот процесс восстановления.

Конечная точка работала следующим образом.

  1. Я ввожу свой адрес электронной почты / телефон.
  2. Выбираю вариант восстановления с помощью телефонного звонка.
  3. Мне звонят по телефону.
  4. Этот номер телефона будет автоматически передан конечной точке как:
POST /flashcall_account_recovery

cuid=x&enc_phone=x&cli=+1xxxxx
Оказывается, в cli параметре мы должны указать номер телефона, с которого мы получили телефонный звонок на шаге 3.

Теперь стало понятно, почему это назвали восстановлением с помощью телефонного звонка. Я думаю, что cli означает что-то вроде caller identification.

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

{"id":"UserID","nonce":"XXXX","skip_logout_pw_reset":""}
5e26054d18db5309b584b.png

Значение nonce действует как код OTP, а затем будет передано в конечную точку для проверки OTP.

Эта конечная точка выполняет проверку nonce и установку нового пароля.

71415946dca056da11823.png

В POST /flashcall_account_recovery, я сначала проверил будет ли работать сброс, если указать валидный cli другого пользователя, вместе с cuid жертвы, но это не сработало.

Я пробовал заменить все параметры тут и там, но ни один из них не работал.

Теперь единственный вариант, который у меня оставался, - это брутфорс параметра cli.

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

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

Следовательно, атака будет работать так:

  1. Пользователь подставляет cuid жертвы и enc_phone_number в конечную точку flashcall_account_recovery
  2. Брутфорс cli
  3. Получаем nonce из ответа
  4. Предоставляем nonce в конечную точку проверки OTP и устанавливаем новый пароль для учетной записи жертвы.
Вот видео, демонстрирующее, как по умолчанию работает процесс восстановления учетной записи с помощью телефонного звонка:


Таймлайн раскрытия электронной почты

Submitted: April 25, 2021

Triaged: April 27,2021

Fixed: April 27,2021

Таймлайн захвата аккаунта

Submitted: April 29, 2021

Triaged : April 30, 2021 at 3:32 PM

Fixed: April 30, 2021 at 3:49 PM

5a9647e87712c5f2b249a.png

Мне потребовалось больше времени, чтобы проверить исправление, чем у Facebook, чтобы выпустить исправление, лол.

После тщательного расследования Facebook не обнаружил доказательств злоупотреблений, и 2 сентября вопрос был окончательно закрыт.
 
Сверху Снизу