image

Картинка для привлечения внимания взята тут

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

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

Так как ковыряться в приложениях проще всего, взял его. К своему удивлению выяснил, что приложение является просто странной оберткой для сайта, хотя и при запросах сервер ясно может отличить, от кого пришел запрос. Тестировать оказалось можно с равным успехом как приложение, так и мобильную версию. Отличие лишь в том, что для мобильного сайта передается поле platform — mobSite, а приложения сообщают систему и версию.

Успеха я достиг сразу же, потому что начал с восстановления пароля. Предлагаю взглянуть на то, как это происходит.

Для начала нужно получить сам код в СМС. Запросим по ссылке с JSON в теле:

POST https://www.papajohns.ru/api/auth/recovery/requestCode

{
	"username": "+79номертелефона",
	"transport": "sms",
	"lang": "ru",
	"version": "1.0.34",
	"platform": "Android"
}

Сервер отвечает:

{
	"status": true
}

Странно, данных мало. Идентификатор или сессию хотя бы, но смотрим дальше.

В СМС приходит четырехзначный код (только цифры). Его мы отправлять не будем, так как смена пароля ведет к блокировке баллов на две недели, а у меня на них планы были. Попробуем отправить случайный:

POST https://www.papajohns.ru/api/auth/recovery/updatePassword

{
	"code": "1234",
	"password": "123456qwe",
	"transport": "sms",
	"version": "1.0.34",
	"platform": "Android"
}

Я был очень сильно поражен. Получилось так, что при запросе СМС в базу записывается пара номер телефона + код в СМС, а при запросе восстановления по коду сервер проверяет наличие кода в базе и, если код найден, устанавливает принятый пароль в базу.

Ситуация становится хуже от того, что не существует ограничения на перебор кода. Опытным путем я выяснил, что перебором за 10 минут скрипт гарантированно устанавливает пароль. А если запросить восстановления на все 10000 кодов с 0000 до 9999?

12 мая я сообщил все детали непосредственно разработчику сайта (ну, по крайней мере он им представился). 19 июня мне стало интересно, как обстоят дела с закрытием уязвимости. Скрипт отправил около трехсот запросов и встал. Уточнив у разработчика статус, выяснил, что сервер теперь блокирует по IP, если получает 5 некорректных запросов. Сегодня я вновь проверил, не изменилась ли логика, и готов сообщить: не изменилась. Серверу теперь тоже безразлично: я отправил 3000 запросов без особых сложностей, так что и все 10000, полагаю, уйдут без проблем.

Опасность раскрытия всех сохраненных адресов только по наличию номера мобильного телефона остается существенной. Банковские карты удаляются при сбросе пароля. Мне подарили 1000 баллов и пиццу. Пицца вкусная, но адрес я там хранить не буду.

Комментарии (19)


  1. Krylaty
    30.07.2018 12:16
    +3

    История про «хакера в столовой», лайт версия



    1. dartraiden
      01.08.2018 03:44

      Тут пожёстче. Если пользователь за 2 недели не заметит, что его пароль поменялся — можно увести его бонусные баллы.


  1. Lyazar
    30.07.2018 12:17

    Стоило зарепортить результаты ретеста еще раз, и если им было бы пофиг — можно было бы и писать.


    1. thebeginning Автор
      30.07.2018 12:21

      Признаю, что вы правы, но я общался с человеком мне ответившим дважды. Я, конечно, не эксперт в разработке подобных сервисов, но минимальные рекомендации «от себя» дал сразу же. Разве три месяца не достаточно для того, чтобы это пофиксить?


      1. Suvitruf
        30.07.2018 12:55

        А вы общались с подрядчиком или с представителем Папа Джонс?


        1. thebeginning Автор
          30.07.2018 13:16

          Я написал в их поддержку, потом мне отписал человек, который является разработчиком. Я ему все объяснил, дал скрипт потестить, спросил про bug bounty, в итоге получил пиццу и 1000 баллов. После этого через какое-то время я обнаружил, что сайт для Польши такой же, отписал туда. Мне ответила какая-то женщина, про которую я нашел информацию на Linkedin о том, что она занимает не последнюю должность, но там реакции не было, зато был форвард письма главе, должно быть, подразделения по разработке. Я гуглил имена, но уже не вспомню. Суть сводится к тому, что я общался с конкретным человеком с почтой papajohns.ru, назвавшим себя разработчиком, а также с человеком с почтой papajohns.pl, что как бы указывает на официальность контактов.


  1. denis-19
    30.07.2018 12:54

    Мне подарили 1000 баллов и пиццу
    Какой-то неправильный «bug-bounty program» в ПД.


    1. thebeginning Автор
      30.07.2018 13:26

      Мне сказали, что «как таковой bug bounty нет», но «могу Вам предложить промокод на любую пиццу от 0 рублей, а так же 1000 баллов». Честно говоря, лучше бы она у них была.


  1. TimsTims
    30.07.2018 13:05

    Мне подарили 1000 баллов и пиццу. Пицца вкусная, но адрес я там хранить не буду.
    Но ведь пиццу то вам куда-то привезли :)?


    1. thebeginning Автор
      30.07.2018 13:17

      Адрес можно удалить в профиле с ПК. В мобильной версии кнопки нет, да и заказываю я по привычке без номера квартиры. Истории про агрессивный маркетинг Бургер Кинга как-то заставляют задумываться перед указанием полного адреса.


      1. Suvitruf
        30.07.2018 14:19

        Где гарантия, что адрес удаляется, а не просто помечается как удалённый? (:


        1. thebeginning Автор
          30.07.2018 14:36

          Одно дело — это если ко мне придет сам Папа Джон, другое — если злоумышленник. Вероятность, конечно, минимальная, но и отрицать невозможно. Да и кто знает, сколько там еще уязвимостей.


          1. ilyaplot
            30.07.2018 15:23

            В истории заказов адрес может быть строкой, а не FK :) Так что, ждите. После этого поста могут привезти «пиццу»


            1. thebeginning Автор
              30.07.2018 16:14

              Действительно, в мобильной версии и такое есть. А удаления в ней же нет. Придется бояться.


  1. Akuma
    30.07.2018 16:17

    Ну не знаю. Когда я им писал о том, что из формы заказа было бы неплохо убрать обязательный номер квартиры, т.к. существуют люди, живущие не в квартирах, они все сделали всего за каких-то полтора года. Только вот пиццу мне никто не подарил :(

    Правда в последний раз они вообще отказались везти мне пиццу, т.к. внезапно я пропал из региона доставки (на самом деле нет) и ехать целых 10 минут ночью им было лень.


    1. thebeginning Автор
      30.07.2018 16:19

      Не сделали, квартира все еще обязательна с полной версии.


      1. Akuma
        30.07.2018 16:33

        Хм. Вроде последний раз не заполнял.
        Может поэтому и везти отказались ))


  1. Glays
    31.07.2018 11:20

    Перестал заказывать у них, когда моего БЦ не оказалось в их каталоге адресов.
    Причём я тогда заказал на соседний дом, записав в комментарии правильный адрес, но курьер всё равно приехал не туда. В итоге оказалось, что на распечатке заказа на комментарий просто не осталось места.
    Ну и обязательное заполнение почты и имени с фамилией это что-то.