Критическая уязвимость на Droplr

Критическая уязвимость на Droplr

Сервисом d.pr я пользовался достаточно давно. Так получилось, что знакомство началось не очень приятно – пруф. После публикации поста разработчики немного поправили код, добавили некоторую защиту от брутфорса.

Всё было хорошо до тех пор, пока не понадобилось передать файл с iPad девайса во внешний мир. Сразу скажу, что DropBox я не использую вообще. GoogleDrive и Yandex Диск на планшет ставить не хотелось. Решил посмотреть на знакомый сервис Droplr. Приложение красивое, над дизайном постарались 😉 Но вот проблема, последний раз заходил на сайт давно, пароль, конечно же, забыл. Решил восстановить. Для восстановления пароля необходимо знать только e-mail. После отправления данных на почту пришло письмо со ссылкой. Ссылка представляла из себя следующее: https://auth.droplr.com/reset/[0-9a-z]{40}.

40 символов, алфавит составляют хекс значения. Смахивает на результат SHA1.

После перехода по ссылке предлагают ввести новый пароль для нашего пользователя. Окай.

Пароль сменил. Прошло некоторое время, снова забыл. Повторная процедура восстановления на почту – и тут начинается интересное. Новая ссылка для восстановления идентична прошлой.

Одинаковые ссылки

Первое, что приходит в голову – генерация кода восстановления основана на каких-то константных величинах.

В профиле имеется несколько полей, которые можно редактировать.

Поля в профилеПроверил все. После каждого изменения смотрел на код восстановления. Он не менялся до тех пор, пока не сменил адрес почты.

Интересная ситуация получается – e-mail участвует в генерации кода восстановления. Данная фича редко встречается. Были мысли побрутить хеш, подставляя e-mail в разные места, используя различные алгоритмы. Но на это было нужно время. И тут в голову пришла мысль посмотреть хеш от самого e-mail.

После увиденного я был похож на этого гражданина:
Код для восстановления пароля - это sha1 от email

Код для восстановления пароля генерируется следующим образом (абстракция на PHP):

$reset_code = sha1($user_email);

Зная e-mail пользователя и используя данную уязвимость можно было поменять пароль и получить полный доступ к файлам и аккаунту.

Шаги для получения доступа к аккаунту:

  1. Узнаем e-mail жертвы
  2. Сбрасываем пароль
  3. Переходим по ссылке https://auth.droplr.com/reset/SHA1(e-mail пользователя)
  4. Вводим новый пароль
  5. Наслаждаемся 😉

Кроме всего прочего, ссылка для сброса пароля остается живой даже после перехода по ней. Таким образом имеется возможность не делать ретрив пароля вовсе. Достаточно выполнить 3 шаг и списка выше. Пароль будет изменен, а владелец аккаунта не получит и письма.

На данный момент уязвимость исправлена.

Ответ от администрации:

Ответное сообщение