Доброго времени суток, эта статья является переводом оригинальных (
Из-за того что оригинальные статьи небольшие, я решил объединить их в одну
Эта статья описывает мой поиск уязвимости в Instagram, которая позволяет хакнуть любой аккаунт без явного разрешения. Facebook и команда безопасности Instagram уже исправили уязвимость и выплатили мне 30.000 $ по программе bug-bounty.
Facebook работает изрядно для улучшения их контроля безопасности на всех их платформах. И часть из этой работы можно увидеть в их недавнем повышении выплат о нахождении критических уязвимостей, которые включают взлом аккаунтов. Поэтому, я решил попробовать найти что-то в Facebook и Instagram. К счастью, я был способен найти одну такую уязвимость в Instagram.
«Instagram забывает конечную точку отправки пароля» - первое, что пришло мне в голову, пока я искал уязвимость. Я попытался восстановить свой пароль на сайте Instagram. Механизм сброса пароля оказался довольно сильный, и по этому, я ничего не нашел за несколько минут тестирования.
После этого, использовал восстановления пароля на мобильном устройстве, где я уже нашел предсказуемое поведение. Когда пользователь вводит свой номер телефона, ему отправляется код из 6 цифр в виде смс на его телефон. И что бы изменить свой пароль, пользователь должен ввести этот код. И из этого следует, что если мы способны попробовать все вариации кода на конечную точку, мы сможем изменить пароль на любом аккаунте. Но я был уверен, что должен существовать такой механизм и лимит ввода кода, чтобы избежать подобного брут форса. И я решил протестировать.
Мои тесы показали наличие подобного механизма. Я отправил около 1000 запросов, и 250 из них прошли удачно, но 750 были уже не приняты из-за ограничение попыток (ошибка rate limit). Я попробовал другую 1000 запросов, но теперь еще больше запросов имели эту ошибку. Поэтому, их система определяет и отвергает запросы превосходно.
Всего двумя вещами я был поражен: количеством запросов и отсутствием черного списка. Я могу отправлять запросы непрерывно, без ошибок и блокировок, хотя количество запросов, которые я могу отправить за короткий промежуток времени, ограничено.
После двух дней тестирования, я нашел такие способы решения, которые мне бы позволяли обойти этот лимит запросов:
Номера запросов, которые мы можем отправлять, зависят от условий и от IP, которые мы используем. Также, код работает 10 минут, и это делает атаку еще сильнее, поэтому, нам необходимо тысячи IP что бы выполнить атаку.
Я отписал про уязвимость в команду безопасности Facebook, и они не смогли воспроизвести из-за малого количество информации в моем докладе. Спустя пару сообщений и качественного доказательства, в виде видеозаписи атаки, я все же смог убедить их, что атака осуществима.
PoC (Proof of Concept)
Запрос кода
Жертва получит код и он исчезнит через 10 минут.
Проверка кода
Теперь нам надо пробрутфорсить эту конечную точку, используя большое количество IP. Приблизительно 200 000 запросов я смог отправить, используя только один IP, при этом обходя лимит.
Секрет заключается в использовании 1000 разных устройств (чтобы легко достигнуть конкуренции) и IP, что бы отправить 200 000 запросов в моих тестах.
В сценарии реальной атаки, хакер должен иметь 5000 IP чтобы взломать аккаунт. Звучит сложно, но будет гораздо легче, если у вас имеется облако от Amazon или Google. Это будет стоить приблизительно 150 $ что бы воспроизвести полную атаку.
Команда безопасности Facebook была убеждена, предоставив вышеупомянутое видео об отправке 200 000 действительных запросов. Они также быстро решили и устранили проблемы.
Сообщение от Facebook для автора статьи, о начислении 30 000$ за найденый баг.
Эта статься описывает мой поиск уязвимости в Instagram, которая позволяет хакнуть любой аккаунт без явного разрешения. Facebook и команда безопасности Instagram‘а уже исправили уязвимость и выплатили мне 10.000 $ по программе bug-bounty.
В прошлом месяце я опубликовал уязвимость по взлому аккаунта в Instagram, где за 10 минут смог взломать любой аккаунт. Эта уязвимость похожа с прошлой, но с меньшей критичностью.
Как вы могли заметить в моем предыдущем посту, ID устройства – уникальный идентификатор, используемый Instagram‘ом для проверки кодов сброса пароля. Когда пользователь запрашивает код, используя свой номер телефона, ID устройства отправляется с запросом. Тот же ID устройства использовался снова для проверки кода.
Проверка кода
ID устройства является случайной сгенерированной Instagram‘ом строкой. Поэтому, что если тот же ID устройства снова использовать для запроса кодов от нескольких учетных записей Instagram.
В чем заключается взлом?
Что бы проверить все возможное коды, которые состоят из 6 цифр, понадобится 1 миллион кодов (от 000001 до 999999). Когда мы запрашиваем код от нескольких пользователей, мы повышаем возможность взлома аккаунтов. К примеру, если вы запрашиваете код от 100 000 пользователей используя один ID устройства, вы можете уже достичь 10% успеха, потому то для одного ID выдается 100 000 кодов. Если мы запросим пароли для 1 миллиона пользователей, мы сможем взломать все миллионные учетные записи, увеличивая код доступа по одному.
Поэтому, хакеру стоит запросить кода от 1 миллиона пользователй чтобы завершить атаку с полным успехом. Стоит отметить, что код существует только 10 минут, и поэтому, вся атака должна произойти в течении 10 минут.
Сейчас все проблемы уже были решены командой безопасности Facebook и мы не можем взломать Instagram аккаунты используя эту уязвимость.
После патча
Сообщение от Facebook для автора статьи, о начислении 10 000$ за найденый баг.
Ссылка скрыта от гостей
,
Ссылка скрыта от гостей
).Из-за того что оригинальные статьи небольшие, я решил объединить их в одну
Как я мог взломать любой инстаграм аккаунт
Эта статья описывает мой поиск уязвимости в 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. Это будет стоить приблизительно 150 $ что бы воспроизвести полную атаку.
Команда безопасности Facebook была убеждена, предоставив вышеупомянутое видео об отправке 200 000 действительных запросов. Они также быстро решили и устранили проблемы.
Сообщение от Facebook для автора статьи, о начислении 30 000$ за найденый баг.
Как я опять взломал Инстаграм
Эта статься описывает мой поиск уязвимости в Instagram, которая позволяет хакнуть любой аккаунт без явного разрешения. Facebook и команда безопасности Instagram‘а уже исправили уязвимость и выплатили мне 10.000 $ по программе bug-bounty.
В прошлом месяце я опубликовал уязвимость по взлому аккаунта в Instagram, где за 10 минут смог взломать любой аккаунт. Эта уязвимость похожа с прошлой, но с меньшей критичностью.
Как вы могли заметить в моем предыдущем посту, ID устройства – уникальный идентификатор, используемый Instagram‘ом для проверки кодов сброса пароля. Когда пользователь запрашивает код, используя свой номер телефона, ID устройства отправляется с запросом. Тот же ID устройства использовался снова для проверки кода.
Проверка кода
Код:
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=device-id
ID устройства является случайной сгенерированной Instagram‘ом строкой. Поэтому, что если тот же ID устройства снова использовать для запроса кодов от нескольких учетных записей Instagram.
В чем заключается взлом?
Что бы проверить все возможное коды, которые состоят из 6 цифр, понадобится 1 миллион кодов (от 000001 до 999999). Когда мы запрашиваем код от нескольких пользователей, мы повышаем возможность взлома аккаунтов. К примеру, если вы запрашиваете код от 100 000 пользователей используя один ID устройства, вы можете уже достичь 10% успеха, потому то для одного ID выдается 100 000 кодов. Если мы запросим пароли для 1 миллиона пользователей, мы сможем взломать все миллионные учетные записи, увеличивая код доступа по одному.
Поэтому, хакеру стоит запросить кода от 1 миллиона пользователй чтобы завершить атаку с полным успехом. Стоит отметить, что код существует только 10 минут, и поэтому, вся атака должна произойти в течении 10 минут.
Сейчас все проблемы уже были решены командой безопасности Facebook и мы не можем взломать Instagram аккаунты используя эту уязвимость.
После патча
Сообщение от Facebook для автора статьи, о начислении 10 000$ за найденый баг.
Последнее редактирование: