Взлом акканутов Instagram c Fuckerom
Как я мог взломать любой инстаграм аккаунтМногие хотят знать как это выглядит. Я покажу в видео, которое для вас записал. Многие не поймут, но если интересно - смотрите.
Эта статья описывает мой поиск уязвимости в Instagram, которая позволяет хакнуть любой аккаунт без явного разрешения. Facebook и команда безопасности Instagram уже исправили уязвимость и выплатили мне 30.000 $ по программе bug-bounty.
Facebook работает изрядно для улучшения их контроля безопасности на всех их платформах. И часть из этой работы можно увидеть в их недавнем повышении выплат о нахождении критических уязвимостей, которые включают взлом аккаунтов. Поэтому, я решил попробовать найти что-то в Facebook и Instagram. К счастью, я был способен найти одну такую уязвимость в Instagram.
«Instagram забывает конечную точку отправки пароля» - первое, что пришло мне в голову, пока я искал уязвимость. Я попытался восстановить свой пароль на сайте Instagram. Механизм сброса пароля оказался довольно сильный, и по этому, я ничего не нашел за несколько минут тестирования.
После этого, использовал восстановления пароля на мобильном устройстве, где я уже нашел предсказуемое поведение. Когда пользователь вводит свой номер телефона, ему отправляется код из 6 цифр в виде смс на его телефон. И что бы изменить свой пароль, пользователь должен ввести этот код. И из этого следует, что если мы способны попробовать все вариации кода на конечную точку, мы сможем изменить пароль на любом аккаунте. Но я был уверен, что должен существовать такой механизм и лимит ввода кода, чтобы избежать подобного брут форса. И я решил протестировать.
Мои тесы показали наличие подобного механизма. Я отправил около 1000 запросов, и 250 из них прошли удачно, но 750 были уже не приняты из-за ограничение попыток (ошибка rate limit). Я попробовал другую 1000 запросов, но теперь еще больше запросов имели эту ошибку. Поэтому, их система определяет и отвергает запросы превосходно.
Всего двумя вещами я был поражен: количеством запросов и отсутствием черного списка. Я могу отправлять запросы непрерывно, без ошибок и блокировок, хотя количество запросов, которые я могу отправить за короткий промежуток времени, ограничено.
После двух дней тестирования, я нашел такие способы решения, которые мне бы позволяли обойти этот лимит запросов:
- Конкуренция ( Race Hazard)
- Смена IP
Если вы впервые столкнулись с первым пунктом, вы можете более детально ознакомиться здесь ( Скрыто от гостей). Отправка конкурентных запросов, используя огромное количество IP, позволит мне отправлять большое количество запросов без лимитов.
Номера запросов, которые мы можем отправлять, зависят от условий и от IP, которые мы используем. Также, код работает 10 минут, и это делает атаку еще сильнее, поэтому, нам необходимо тысячи IP что бы выполнить атаку.
Я отписал про уязвимость в команду безопасности Facebook, и они не смогли воспроизвести из-за малого количество информации в моем докладе. Спустя пару сообщений и качественного доказательства, в виде видеозаписи атаки, я все же смог убедить их, что атака осуществима.
PoC (Proof of Concept)
Запрос кода
Код:
POST /api/v1/users/lookup/ HTTP/1.1 User-Agent: Instagram 92.0.0.11.114 Android (27/8.1.0; 440dpi; 1080×2150; Xiaomi/xiaomi; Redmi Note 6 Pro; tulip; qcom; en_IN; 152830654) Accept-Language: en-IN, en-US Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Accept-Encoding: gzip, deflate Host: i.instagram.com Connection: keep-alive q=mobile_number&device_id=android-device-id-here
Жертва получит код и он исчезнит через 10 минут.
Проверка кода
Код:
POST /api/v1/accounts/account_recovery_code_verify/ HTTP/1.1 User-Agent: Instagram 92.0.0.11.114 Android (27/8.1.0; 440dpi; 1080×2150; Xiaomi/xiaomi; Redmi Note 6 Pro; tulip; qcom; en_IN; 152830654) Accept-Language: en-IN, en-US Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Accept-Encoding: gzip, deflate Host: i.instagram.com Connection: keep-alive recover_code=123456&device_id=android-device-id-here
Теперь нам надо пробрутфорсить эту конечную точку, используя большое количество IP. Приблизительно 200 000 запросов я смог отправить, используя только один IP, при этом обходя лимит.
Секрет заключается в использовании 1000 разных устройств (чтобы легко достигнуть конкуренции) и IP, что бы отправить 200 000 запросов в моих тестах.
В сценарии реальной атаки, хакер должен иметь 5000 IP чтобы взломать аккаунт. Звучит сложно, но будет гораздо легче, если у вас имеется облако от Amazon или Google. Это будет стоить приблизительно 50 $ что бы воспроизвести полную атаку.
Команда безопасности Facebook была убеждена, предоставив вышеупомянутое видео об отправке 200 000 действительных запросов. Они также быстро решили и устранили проблемы.