Картинка для привлечения внимания взята тут
Пиццерия Папа Джонс открыта во многих странах, движок сайтов же практически везде разный. Тем не менее, движок, который разработали где-то в России, также используется на сайтах для Польши, Киргизии и Беларуси. Его и рассмотрим.
Посмотреть сам движок можно на мобильном сайте для России, к примеру. Почему мобильный? Потому что десктопный не имеет даже формы регистрации, хотя это объяснено тем, что регистрация автоматическая при заказе. Решил я проверить однажды то, как там с уязвимостями дела обстоят.
Так как ковыряться в приложениях проще всего, взял его. К своему удивлению выяснил, что приложение является просто странной оберткой для сайта, хотя и при запросах сервер ясно может отличить, от кого пришел запрос. Тестировать оказалось можно с равным успехом как приложение, так и мобильную версию. Отличие лишь в том, что для мобильного сайта передается поле 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)
Lyazar
30.07.2018 12:17Стоило зарепортить результаты ретеста еще раз, и если им было бы пофиг — можно было бы и писать.
thebeginning Автор
30.07.2018 12:21Признаю, что вы правы, но я общался с человеком мне ответившим дважды. Я, конечно, не эксперт в разработке подобных сервисов, но минимальные рекомендации «от себя» дал сразу же. Разве три месяца не достаточно для того, чтобы это пофиксить?
Suvitruf
30.07.2018 12:55А вы общались с подрядчиком или с представителем Папа Джонс?
thebeginning Автор
30.07.2018 13:16Я написал в их поддержку, потом мне отписал человек, который является разработчиком. Я ему все объяснил, дал скрипт потестить, спросил про bug bounty, в итоге получил пиццу и 1000 баллов. После этого через какое-то время я обнаружил, что сайт для Польши такой же, отписал туда. Мне ответила какая-то женщина, про которую я нашел информацию на Linkedin о том, что она занимает не последнюю должность, но там реакции не было, зато был форвард письма главе, должно быть, подразделения по разработке. Я гуглил имена, но уже не вспомню. Суть сводится к тому, что я общался с конкретным человеком с почтой papajohns.ru, назвавшим себя разработчиком, а также с человеком с почтой papajohns.pl, что как бы указывает на официальность контактов.
denis-19
30.07.2018 12:54Мне подарили 1000 баллов и пиццу
Какой-то неправильный «bug-bounty program» в ПД.thebeginning Автор
30.07.2018 13:26Мне сказали, что «как таковой bug bounty нет», но «могу Вам предложить промокод на любую пиццу от 0 рублей, а так же 1000 баллов». Честно говоря, лучше бы она у них была.
TimsTims
30.07.2018 13:05Мне подарили 1000 баллов и пиццу. Пицца вкусная, но адрес я там хранить не буду.
Но ведь пиццу то вам куда-то привезли :)?thebeginning Автор
30.07.2018 13:17Адрес можно удалить в профиле с ПК. В мобильной версии кнопки нет, да и заказываю я по привычке без номера квартиры. Истории про агрессивный маркетинг Бургер Кинга как-то заставляют задумываться перед указанием полного адреса.
Suvitruf
30.07.2018 14:19Где гарантия, что адрес удаляется, а не просто помечается как удалённый? (:
thebeginning Автор
30.07.2018 14:36Одно дело — это если ко мне придет сам Папа Джон, другое — если злоумышленник. Вероятность, конечно, минимальная, но и отрицать невозможно. Да и кто знает, сколько там еще уязвимостей.
ilyaplot
30.07.2018 15:23В истории заказов адрес может быть строкой, а не FK :) Так что, ждите. После этого поста могут привезти «пиццу»
thebeginning Автор
30.07.2018 16:14Действительно, в мобильной версии и такое есть. А удаления в ней же нет. Придется бояться.
Akuma
30.07.2018 16:17Ну не знаю. Когда я им писал о том, что из формы заказа было бы неплохо убрать обязательный номер квартиры, т.к. существуют люди, живущие не в квартирах, они все сделали всего за каких-то полтора года. Только вот пиццу мне никто не подарил :(
Правда в последний раз они вообще отказались везти мне пиццу, т.к. внезапно я пропал из региона доставки (на самом деле нет) и ехать целых 10 минут ночью им было лень.
Glays
31.07.2018 11:20Перестал заказывать у них, когда моего БЦ не оказалось в их каталоге адресов.
Причём я тогда заказал на соседний дом, записав в комментарии правильный адрес, но курьер всё равно приехал не туда. В итоге оказалось, что на распечатке заказа на комментарий просто не осталось места.
Ну и обязательное заполнение почты и имени с фамилией это что-то.
Krylaty
История про «хакера в столовой», лайт версия
nps
xakep.ru/2006/12/16/35784
dartraiden
Тут пожёстче. Если пользователь за 2 недели не заметит, что его пароль поменялся — можно увести его бонусные баллы.