Персональные данные пользователей Rozetka.ua в публичном доступе

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



По причинам, которые мне не хочется объяснять, мне потребовалось доставать отзывы о товарах с сайта rozetka.ua. Когда у сайта нет публичного API, то приходится искать более изысканные варианты. Парсинг HTML-кода страниц оставил как крайний вариант и приступил к поиску более оптимальных путей извлечения данных.

Первым делом обнаружил мобильную версию сайта и, как оказалось, она является SPA. Все данные с помощью нехитрого API вытягивались через AJAX-запросы. Доступ есть ко всему, что требуется для получения отзывов:

Cписок категорий:

http://m.rozetka.ua/?action=getJSONDataFromAdapter&m[0]=getOffersSections&p[0]=['123',0,15]

Cписок товаров:

http://m.rozetka.ua/?action=getJSONDataFromAdapter&m[0]=getOffersByParams&p[0]=['123',{},0,15]

Cписок отзывов:

http://m.rozetka.ua/?action=getJSONDataFromAdapter&m[0]=getCommentsByOffer&p[0]=['123',0,15]

Значению p[0], кстати, необходимо было 2 раза сделать URL encoding. Зачем это было сделано — загадка.

Как только я добрался до получения отзывов, моим глазам предстала такая картина:

{
  "content": [
    {
      "result": {
        "_0": {
          "text": "[ТутБылТекстОтзыва]",
          "created": "2015-02-13T17:22:17+02:00",
          "user": {
            "title": "Вася",
            "email": "вася@example.com"
          },
          "positive_vote_count": "0",
          "negative_vote_count": "0",
          "rating": "0",
          "percent_dignity": "0"
        },
        ...
        "_3": {
          "text": "[ТутБылТекстОтзыва]",
          "created": "2015-02-09T11:30:44+02:00",
          "user": {
            "title": "Виктор Викторович",
            "email": "виктор@example.com"
          },
          "positive_vote_count": "1",
          "negative_vote_count": "0",
          "rating": "0",
          "percent_dignity": "100"
        }
      },
      "code": "0"
    }
  ],
  "code": 1
}

Как можно увидеть, кроме имени пользователя присутствует и его email. Необходимо упомянуть несколько фактов об отзывах в этом интернет-магазине:
  • Email для авторизованных пользователей подставляется автоматически;
  • Без указания email-а нельзя опубликовать отзыв;
  • Все отзывы проходят модерацию;
  • Некоторые люди указывают кроме имени ещё и фамилию/отчество.

Итак, мы имеем большую базу данных email-ов с именами, а иногда и с фамилиями, таргетированную по определённым группам товаров. Так как я никогда не имел дел с внутренностями «Розетки», то решил, что этот ответ, возможно, скоро поправят и забыл об этом сайте на месяц.

В феврале этого года «Розетка» выкатила редизайн и я решил проверить состояние уязвимости в мобильной версии. Оказалось, что версия API обновилась до 3-й (видимо, ранее была вторая версия), в которой немного изменили структуру запросов и ответов. Переход на страницу отзывов и открытие инструментов разработчика показало, что email более не приходит в ответе на запрос. Осталось только поле имени. На этом можно было бы остановиться и забыть про этот случай. Но интерес одолел меня и я решил выполнить запрос по старой ссылке. На что браузер мне успешно вернул тот же самый ответ. Старый API не закрыт, уязвимость на месте.

На следующий день было написано письмо разработчикам интернет-магазина. Мне оперативно ответили, подтвердили уязвимость и через несколько часов API второй версии был прикрыт. Насколько я понял, этот API первоначально использовался для внутренних нужд, а когда его вывели на публику, то email остался. После прихода третьей версии, вторая версия продолжала работать.

Как всегда, простейшая невнимательность в нашей профессии может привести к печальным последствиям…

Similar posts

AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 38

    +1
    Ну хоть телефонными номерами не светят.
      +7
      С одной стороны да, неприятно. С другой вспоминаются гостевых книги десятилетней давности, где тоже надо было вводить имя и e-mail и они выводились прямо на странице, а e-mail даже делался ссылкой.
      Как-то выжили всё-таки.
        –53
        Мне вот интересно, а автор пробовал для начала связаться с владельцами сайта перед тем как выкатывать в паблик информацию?
        Я понимаю что это не совсем уязвимость, но все-же.
          +8
          Мне оперативно ответили, подтвердили уязвимость и через несколько часов API второй версии был прикрыт.

          Я может неправильно понял, но вот же автор подтверждает закрытие уязвимости?
            +13
            Разработчики быстро отреагировали и закрыли API с уязвимостью. После этого была написана статья.
            +23
            текст читать пробовали?
              –19
              Вообще по тексту получается что сначала прикрыли, но потом при выходе третьей версии — вторая работала…
                +4
                читайте внимательно предпоследний абзац
                  +8
                  Может он снизу вверх читает?
                    0
                    Знаю с лево на право, с право на лево, сверху вниз но вот про снизу вверх слышу впервые =)
              –2
              Объясню свою мысль почему я спросил:
              — Описано, что выявлена ошибка
              — Описано, что ошибка исправлена (оперативно и все такое)
              А потом вдруг написано что с в недрением новой версии АРI работает и старая:

              После прихода третьей версии, вторая версия продолжала работать.

              Как всегда, простейшая невнимательность в нашей профессии может привести к печальным последствиям…

              Вот я и предположил что где-то случайно восстановили старую ошибку и автор решил пнуть через хабр.
                0
                Вы точно читали текст полностью? Советую еще раз перечитать.
                  0
                  а вы, я вижу, комментарии тоже через один читаете ;)
                  ДА. я читал текст полностью
                0
                предпоследний абзац прочитайте повнимательнее )
                ой
                –3
                Мне прийдется ответить, чтобы это не выглядело как уязвимость.
                Это API действительно пытались сканировать. Мы добавили в ответы специально зарегистрированные нами email'ы, чтобы узнать кто на них начнет отправлять спам и является заказчиком. Эти email мы перемешали с тем, что были добавлены в тело комментариев и доступны в открытом доступе без API.
                  0
                  Т.е. вы считаете, что кто-то парсил комментарии без email с целью рассылки спама?
                    0
                    Комментарии и так доступны в публичной части сайта и не являются персональной информацией. Единственное, к чему можно попытаться достучаться дополнительно через API — это email.
                      0
                      С вашего предыдущего комментария я понял, что email в ответах раньше не было и вы их добавили уже после того, как вас начали активно парсить. Если были — тогда это ошибка/уязвимость, а если нет, тогда не понятно зачем вы их добавили.
                    +2
                    Тогда не понятно как в моём отзыве оказался мной указанный email.
                      0
                      Вы обращались с того же IP, с которого добавляли отзыв.
                    0
                    Вы думаете такая база нужна только с целью рассылки спама?)
                      0
                      А когда узнаем всё это, то что будем делать?
                      –4
                      Меня Розетка неприятно удивила, прислав после смены пароль в письме в открытом виде. Закралось подозрение, что они их так и хранят.
                        +5
                        Нет, пароли хранятся в sha1 с солью
                          0
                          Спасибо, будем знать
                          +4
                          Если так и хранят, то пришлют его же при восстановлении.
                          А если просто продублировали один раз в письме, это не говорит совершенно ни о чем, не нужно бредить на пустом месте.
                            +2
                            К чему такая агрессия? Я просто поделился впечатлениями.
                            А в общем, всегда считал, что присылать пароль по почте — моветон.
                              0
                              Невежество в ИТ-среде непростительно, а ваше предположение — это чистой воды невежество.
                              0
                              мне озон при восстановлении прислал пароль в открытом виде
                          +8
                          Уязвимости в любой системе возможны, какая бы она крупная/крутая/солидная не было.
                          А вот «оперативно ответили и устранили» — это реально плюс. Буду продолжать пользоваться розеткой.
                            +1
                            Я с вами солидарен.
                              –1
                              А если у какого-то магазина цена на тостер будет на 200 грн меньше, вы скажете: «Черт, да как же я могу у них его купить, ведь они же не оперативно латают дыры в безопасности!?»
                              0
                              Без указания email-а нельзя опубликовать отзыв;
                              Все отзывы проходят модерацию;


                              Не понятно одно. Зачем вообще e-mail нужен для того, чтобы отзыв оставить свой? Для того чтобы глупость не писали, так там же модерация есть.
                                –3
                                Может мне кто-то объяснить причину слива моей кармы? Вроде пытался донести посыл, что нужно быть внимательней, а получил минуса прямо в карму.
                                  +2
                                  Заголовок желтоват.

                                  Only users with full accounts can post comments. Log in, please.