Майнинг еды или «Пятерочка» глазами хакера

Введение


Написать этот пост меня вдохновила статья, которая давно висит на Хабре. Сразу хочу извиниться перед автором, лучше названия и придумать нельзя. Как вы все знаете «Пятерочка» активно рекламирует свои карты лояльности. В статье выше нам рассказывали о том, что мошенники активируют чужие карточки и списывают баллы. Хакеры пошли дальше и вместо активации чужих карт просто стали взламывать личные кабинеты пользователей. А что? Звучит даже проще активации карт, давайте разберёмся поподробнее.

Немного о безопасности личных кабинетов


image

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

image

Казалось бы, как взломать такое? Перебрать код невозможно, есть лишь 3 попытки, а код четырёхзначный. Сразу отбрасываем данный вариант, но хакерам же как-то удаётся, значит и у нас получится!

Приложение «Пятерочка»


Как и у любого другого магазина с программой лояльности у сети магазинов «Пятерочка» есть своё приложение. Только вот приложение не простое, а со своими тараканами в коде. Давайте же разберёмся, что не так с приложением.

Вход в личный кабинет осуществляется так же с помощью номера телефона и пароля, а ещё сверху приходит смс подтверждение, но вот есть один интересный момент. Приложение «запоминает» учётную запись и при следующей попытке входа вместо смс кода на телефон отправляет пуш уведомление напрямую в приложение. Сейчас объясню поподробнее. Войдя впервые на свою учётную запись вам предстоит ввести код из смс для входа. Если вы по какой-то причине решили выйти и зайти снова, то во второй и последующие разы смс код вам приходить не будет, а вместо него в приложении будет само заполняться поле смс кода. Во диво! Сделано это конечно красиво, но есть один огромный недостаток. Замечен баг был мной в приложении «Пятерочка» версии 2.12.1, возможно есть и в других версиях. Что за баг и как его повторить?

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

i.imgur.com/BcLnANt.mp4
i.imgur.com/LIGOkBT.mp4

В первом видео видно, как хакер вводит данные для входа, после чего принимает смс на телефон и заходит в свой аккаунт. После чего выходит и проходит авторизацию снова. Во второй раз нам прекрасно видно, что никакая смс на телефон не приходит и поле для ввода автоматически заполняется пуш уведомлением."

Во втором видео злоумышленник уже пытается войти в аккаунт не принадлежащий ему. Он вводит данные, но кода из смс он не знает по понятным причинам. Потом он убирает приложение из процессов и запускает его снова. На этом моменте прекрасно виден баг приложения. Открывается совершенно белое окно, после чего злоумышленник выходит из аккаунта. После чего вводит данные для входа повторно и о чудо, ему приходит пуш уведомление! Почему же такое произошло? Спросить надо у разработчиков приложения…

Методы решения


Лично я могу посоветовать разработчикам отключить пуш уведомления, что злоумышленники не могли взламывать аккаунты. Отключить конечно же на время до решения проблемы. Сам я не силён в разработке приложений и ничего дельного посоветовать не могу, но пуш уведомления они до сих пор не отключили.

Последствия


Из-за ошибки в коде страдают обычные люди, а именно добросовестные покупатели. Почитать гневные отзывы о том, что у людей украли баллы можно по ссылке: vk.com/topic-19098821_24191218. Ниже оставлю пару постов, на самом деле их намного больше, но думаю сейчас уже не смогу найти некоторые.

image

image

image

Проблема с воровством баллов очень актуальна и процветает это дело минимум год. Даже на пикабу можно найти посты.

Выводы


Не бывает идеальных приложений, но этот баг ужасен. Я не призываю вас преступать закон и особенно воровать что-то у кого-то! Пост был создан с целью исправить баг и достучаться до разработчиков приложения (письмо отправлял им больше месяца назад и результата ноль).

Всем добра и не допускайте таких ошибок в коде!"

Комментарии 36

    +6
    Для полноценной статьи не хватает деталей: какие именно запросы куда и как уходят…
      +5
      Если я правильно понял, то после первой успешной авторизации входа в ЛК с помощью SMS, конкретная установка приложения становится авторизованной вообще, а не авторизованной для соответствующего телефонного номера, и дальше можно резвиться напропалую? А-ху-ди-ви-тель-но…
        +4
        То есть, баг фактически нивелирует влияние второго фактора (код).

        Но злоумышленнику ведь ещё надо узнать и пароль (первый фактор). Без знания пароля до кода (в SMS / пуше) дело даже не дойдёт.
          0
          Да, это важное уточнение. Но судя по всему, защита от подбора недостаточная.
            0

            Всё проще, люди используют одни и те же пароли везде, а они уже 100 раз утекли в сеть. Остаётся только найти номер телефона клиента

          0
          Это, увы, распространенная практика, хотя вполне очевидно, что использовать пуш-уведомления как транспорт одноразовых кодов для авторизации по телефонному номеру нельзя ни в коем случае, потому что они будут доставлены на все инстансы приложения и не подтверждают принадлежность данного инстанса приложения владельцу этого телефонного номера. Они подтверждают лишь то, что владелец этого номера когда-то авторизовывался в данном инстансе приложения. А с тех пор много воды могло утечь, владелец устройства мог давно смениться и т.д.

          Да и для подтверждения каких-либо критичных операций внутри сессии — по большому счету тоже нельзя, по тем же причинам.
            0

            Не на все инстансы. Вообще все уведомления они персональные, просто используют их часто для массовой рассылки

              0
              Не на все инстансы

              Прошу прощения — в процессе выражения мысли посредством печатных слов была утеряна важная деталь. Следует читать «на все инстансы, ассоциированные с данным пользователем».

              Хотя даже если и только на один, как в обсуждаемом кейсе, это ничего не меняет, поскольку соответствие телефонного номера не гарантируется и теряется первоначальный смысл операции, он подменяется на другой. А уж подстановка кода из пуша в поле ввода — это имитация чистой воды и совершенно лишний шаг, оправданность которого не вполне понятна. Приложение уже получило в свое распоряжение этот код, реакция юзера не требуется.
          0
          Долго угорал когда с моей карты купили в соседнем регионе.
            +1
            Минусы то за что накидываем?

            Реальная история. Были какие то баллы на карте, захожу в приложения там покупки в Кемерово – Ягуар и пару пачек чипсов, я живу вообще в центре России.

            Меня эта ситуация повеселила, «гопнули» на баллы.
            +1
            С картами пятерочки давно творится всякая фигня. На некоторых сайтах продают чужие карты с балансом. В магазинах (скорее всего тупо из вредности) с определенного момента перестали списывать баллы не с физической карты, хотя раньше прекрасно работало. У меня и не было никогда физической карты.
            Маленький лайфхак, если вызвериться на кассира ее дают бесплатно. А таскать ее все равно лень, ибо давно все карты в телефоне.
            В общем происходит лютая дичь, могли бы взять за основу приложение перекрестка, все равно та же Х5
              +1
              На некоторых сайтах продают чужие карты с балансом.


              Скорее всего, это не взломанные карты. Я нередко замечаю, как в Пятерочке, когда я говорю, что бонусной карты у меня нет, кассир достает откуда-то свою карту и проводит её. Даже если у 10-20% посетителей Пятерочки нет бонусной карты, так любой кассир может себе нафармить десяток карт с тысячным балансом за смену.
                0
                кассир достает откуда-то свою карту и проводит её


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

                В Перекрестке в свое время дыра была ещё больше, даже СМС не требовались...

                  0
                  В магазинах (скорее всего тупо из вредности) с определенного момента перестали списывать баллы не с физической карты

                  Я пожаловался однажды на горячую линию и так делать перестали
                  +5
                  С «Пятёрочкой» был ещё проще вариант, сам столкнулся года 1.5 назад: без регистрации на карту начисляются баллы, но списать их нельзя, при этом в чеке печатается «простыня» напоминания об этом.
                  Ходил с электронной версией такой карты, думал, ну потом когда-нибудь… И вот как-то случайно замечаю, что «простыня» в чеке изменилась. Присматриваюсь: карта зарегистрирована на какую-то Наташу, баллов нет.
                  А всё просто: чтобы зарегистрировать карту, нужно было всего лишь указать её номер и любой свой телефон, на который придёт код. И вот, кто-то «собирал» незарегистрированные карты и списывал баллы. Даже по 100 руб. с карты без всяких «взломов», 10 карт — уже поесть на сутки.
                    +5

                    Да, теперь взламывают ради еды.

                      0

                      Аналогично. Ходил с незареганой картой года три, набрал около 6тыс баллов, в ноябре попытался активировать карту через веб страницу (не приложение), сайт начал адско зависать. Вроде бы с третьей попытки зарегал.
                      Полез в личный кабинет — карты нет.
                      Пишу в ТП пятерочки — просят номер телефона и фото карточки. Проверяют и говорят: ваша карта зарегистрирована на другого человека, сделать ничего не можем и не будем, берите новую.
                      Через 20мин зашёл в магазин, сделал контрольную закупку — в чеке ноль бонусов и появился некий Егор.


                      Чтоб ты сдох, Егор!

                        0
                        Скорее всего, к этому причастны сами сотрудники — не обязательно кассиры (хотя они видят бонусы и можно ли их списать), но и кто-то, кто имеет доступ к базам данных. Уж больно много таких случаев…
                      –2
                      Лютый оффтопик, но коль скоро уж мы в хабе «Информационная безопасность», то не могу не удивиться хабраотцу, выдавшему инвайт: Зарегистрирован в 2013, 5 комментариев, 1 не особо популярная (+11) статья, после 2015 активности в форме статей либо комментариев не видно.

                        +1
                        Во-первых, причем тут активность? Если у человека есть идея годной статьи, то сначала надо пару лет оставлять комментарии различные и писать статьи в другие хабы?
                        Во-вторых, в песочнице же вроде до инвайта не видно никакой информации об авторе
                          –1
                          Как правило, многолетнее молчание указывает на заброшенность аккаунта. Вероятность того, что долгие годы молчавший истинный хозяин аккаунта будет искать что-то достойное инвайта в песочнице стремится к нулю. Далеко не каждый завсегдатай Хабрахабра заглядывает туда.
                            0
                            А, блин, прошу прощения, я думал, речь об авторе этой статьи. Но в любом случае, какая разница?
                        0
                        Вот оно! Я проходил через этот ад — каждый день круглосуточно уведомления «ваш код для доступа в личный кабинет -****». Тысячи их! И ночью, и днем, и постоянно смс валились. В магазине ничего не могли сделать, после месячной ругани по телефонам и в ВК наконец-то отключили этот кошмар. При этом еще нагло доказывали, что проблема не на их стороне.
                          +2
                          У них там много багов. Например, на ценнике написано: «продукт, 19 рублей 99 копеек». Пробиваем чек — и…

                          Оказывается, что «продукт» стоит 49 рублей 99 копеек, и к нему применена скидка в сколько-то процентов (допустим, X). Дальше начинается цирк с конями.

                          Первый «продукт» в чеке: 49,99 × (1 − Х) = 19,99. Как и должно быть. Второй «продукт» в том же чеке: 49,99 × (1 − X) = 20,00. Третий… Ну вы поняли, да. Нечеткая арифметика по версии «Пятерочки»…
                            0
                            если цена вышла в полкопейки, то у финансистов она округляется не всегда только в большую или меньшую сторону. Еще хуже когда нужно чтобы полная сумма со скидкой совпадала с суммой цен со скидкой. Если все эти цены округлять только вверх или вниз то вся их сумма будет не совпадать если эту скидку применить к полной сумме. Хотя это наверно ближе к налогам, налоговики считают налог от полной суммы товаров, а покупателю достаются суммы каждой отдельной покупки. И там хоть что делай, но роди эту копейку.
                              0
                              Еще раз: покупаю две единицы одного и того же товара. Цена в базе и на ценнике не совпдают, магазин делает скидку (нафига так извращаться — не знаю). На каждую единицу должна предоставляться одна и та же скидка (иначе будет расхождение с ценником). В чеке две записи, и каждая запись имеет разнцу цену за единицу товара с учетом скидки, хотя расчет ведется по одной и той же формуле, и округление должно проходить одинаково. Но почему-то не проходит…
                                +1
                                не обязано финансовое округление быть одинаковым.
                                допустим товар стоит 99.50, скидка 5%, продали 10шт.
                                Хозяин считает 10*99.5*0.95=945.25руб
                                Продавец продал по цене 99.5*0.95=94.53руб 10 шт = 945.30руб. Не сходится, НДС, касса, капец продавцу.
                                Округляем тогда вниз 94.52руб 10шт = 945.20руб, опять 5 копеек не сходится касса. Уволить продавца!
                                Теперь прикинь какие проблемы когда нужно посчитать счет-фактуры еще и с НДС, а суммы в итоге не бьются на копейки
                                  0
                                  Не так. Беру с полки две единицы одинакового товара. На ценнике — 19,99. Продать должны по ценнику.

                                  На кассе выясняется, что в базе по кой-то черт товар числится по 49,99, и должен продаваться всем со скидкой 60,012%. Сканируем первый товар, в чеке: исходная цена — 49,99, скидка — 30,00, цена для клиента — 19,99, количество — 1, итого — 19,99. Сканируем второй товар: цена — 49,99, скидка — 29,99, цена для клиента — 20,00, количество — 1, итого — 20,00. Как при расчете по одному и тому же алгоритму получается разный результат?
                                    0
                                    не бывает такой скидки с тысячными процента. Есть абсолютная скидка и есть относительная, хз какие именно скидки они там накрутили, но если есть копейки в цене после скидки, то округляться может и так и сяк для сохранения баланса. В самом примитивном случае каждый второй чек округляется вверх, а другой вниз
                                      0
                                      еще проще пример, пришел товар на 100руб, его расфасовали на 3 порции и продали по 33.33руб+33.33руб+33.34руб. Одному не повезло
                                        0
                                        Если товар фасуется в магазине, то получается несколько индивидуальных товаров, каждый из которых отличается от остальных. Тогда можно каждому назначить свою цену. По уму, кстати, третий товар в Вашем примере должен быть чуть тяжелее остальных.
                                        0
                                        Неважно, до каких знаков округляют скидку. Считают-то по одному и тому же алгоритму при одинаковых исходных условиях, но результат получается разный.

                                        А по уму, не надо было выеживаться и поставить в базе нормальную цену без всяких скидок, соответствующую ценнику. Или, как правильно заметили выше, применять скидку не в процентах, а в рублях.
                              0

                              Недавно я не смог списать баллы на кассе пятёрочки. Даже кассир удивилась но ничего не могла сделать. После обращения в поддержку пятерочки оказалось, что каждый раз генерируется новый штрих-код в приложении и без интернета он не работает. В общем какую то защиту списывания баллов по скриншоту они реализовали. Теперь вопрос как воры списывают баллы войдя в чужой личный кабинет?

                                0
                                Вероятно они тратят их не в самой Пятерочке, а выводят их в голоса Vk, баллы от Одноклассников и т.п.

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

                              Самое читаемое