Как я получил возможность пить кофе бесплатно из-за оплошностей программистов

Marat_1162

Стаж на ФС с 2014 г
Private Club
Старожил
Migalki Club
Меценат💰️
Регистрация
25/3/16
Сообщения
4.642
Репутация
9.166
Реакции
22.700
RUB
0
Депозит
3 500 рублей
Сделок через гаранта
4
Совсем недавно в парижском Cité des Sciences et de l’Industrie прошла хакерская конференция LeHack. В этот день у меня была прекрасная возможность встретиться и пообщаться с большим количеством технически подкованных людей, настоящих профессионалов своего дела, а заодно и отведать бесплатной еды, которой всех угощали. Наевшись сверх нормы, я почувствовал усталось и решил отпить кофе - здесь и начинается эта история.

Введение

vodka.jpg



Вполне обычная кофемашина. Я заплатил за кофе кредитной картой и собрался уже уходить, но увидел это.

vodka.jpg



Здесь написано: «Загрузите приложение Coffee cApp и оплачивайте свои покупки со смартфона». Итак, это приложения на Android при помощи которого можно покупать кофе, я хакер, находящийся на хакерской конференции, и у меня много свободного времени. Пора заняться своим любимым делом!

vodka.png



Я скачал это невероятно *удобное* (судя по отзывам) приложение и начал им пользоваться. Следующие два часа оказались довольно продуктивными.

Account Takeover

vodka.png



Я создал аккаунт и в ответе от сервера увидел свой UserId.

vodka.png



После этого я сбросил пароль от учетной записи и вновь посмотрел на запрос. В нем я увидел параметр «Password», который был моим текущим паролем, параметр под названием «ConfirmPassword», который был моим новым паролем, и... Невероятно! Параметр с именем «UserUId». Его значение эквивалентно «UserId», которое я уже видел ранее, когда создавал учетную запись. Что произойдет, если я подменю свой UserUId на чужой? Давайте-ка попробуем!

Чтобы проверить, могу ли я сбросить пароль другой учетной записи, я создал еще одну учетку. Сбросил ее пароль и в POST-запросе к эндпоинту /User/ResetPassword заменил значение UserUId на UserUId своей первой учетной записи. Бинго, все работает! Пароль 1-го аккаунта сброшен!

Хорошо, Эллиот, это круто, но для захвата чужой учетной записи нам еще нужно иметь username жертвы.

Account enumeration

vodka.png



В первом запросе, сделанном во время сброса пароля, приложение отправляет ваше имя пользователя, которое совпадает с номером телефона, на свой сервер. Если это имя пользователя существует, вы получите 200 код ответа.

vodka.png



vodka.png



Если вы отправляете случайное имя пользователя, сервер выдает сообщение «UserNotExists».

Я отправил этот запрос в Burp Suite Intruder и... да! Ограничения со стороны сервера отсутствовали, можно было перебрать все допустимые имена пользователей (номер) и, таким образом, получить список валидных учеток. Объединив эти две уязвимости, мы можем взломать все учетные записи, которые есть в приложении.

Pin bruteforce
И последнее, но не менее важное: я обнаружил в приложении еще одну уязвимость. Когда вы создаете учетную запись, для ее активации, приложение отправляет вам код подтверждения в смс-сообщении.

vodka.png



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

Вывод
Не совершайте глупых ошибок с безопасностью и ваш кофе никто не выпьет.
 
  • Нравится
Реакции: XABA
Сверху Снизу