Как взломать двухфакторную аутентификацию Яндекса

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

QR-код расшифровывается в ссылку вот такого вида:

yandex.ru/promo/2fa? track_id=38e701d0bb5abaf50d381c3f95e0f341a8

Внутри всего этого веб-страничка с QR-кодом постоянно опрашивает сервер в ожидании авторизации:

POST /auth/magic/status/ HTTP/1.1 Host: passport.yandex.ru

track_id=38e701d0bb5abaf50d381c3f95e0f341a8 Как только пользователь отсканирует приложением Яндекса QR-код, следующий такой запрос отдаст браузеру куку.В чем здесь проблема? Для получения куки используется тот же ID, что закодирован в QR-коде.Обратите внимание на параметр track_id в ссылке и такой же параметр в POST-запросе.Это значит, что злоумышленник может подсмотреть из-за плеча пользователя его QR-код, достать из него ID сессии, и, притворившись браузером, выполнять часто-часто такой же запрос.

И если хакер раньше жертвы успеет получить сессию — он сразу окажется в аккаунте пользователя.

Я написал на коленке простенькое приложение под Android, которое демонстрирует эту уязвимость.Достаточно встать за спиной жертвы и успеть отсканировать qr-код раньше нее, пока жертва запускает приложение и вводит пин-код.

После того, как она авторизуется, приложение покажет вам почтовый ящик жертвы.

Приложение декодирует QR-код с помощью библиотеки github.com/dm77/barcodescanner, быстро-быстро делает POST запросы к Яндексу, получает куки, подставляет их в WebView и открывает в нем Яндекс.Почту.

Для успешной атаки требуется относительно быстрый интернет на смартфоне (чтобы успеть получить cookie раньше жертвы) и желательна хорошая камера на устройстве. У меня код успешно распознавался с расстояния до метра, при этом мои подопытные друзья ничего не замечали и очень удивлялись этому фокусу, когда я им показывал их почту на своем телефоне.

© Habrahabr.ru