Легальный Clickjacking ВКонтакте

    Поговорим о виджете для авторизации.

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

    Также, нам говорят, что:
    В результате авторизации виджет возвращает следующие поля: uid, first_name, last_name, photo, photo_rec, hash.


    Рецепт:

    1. Создаем приложение.
    2. Добавляем виджет на наш сайт.
    3. С помощью js заставляем его следовать за курсором.
    4. С помощью css делаем его прозрачным.
    5. Пользователь делает клик на странице.
    6. ????????
    7. PROFIT!

    Для работы демо, вы должны быть авторизованы Вконтакте.

    Демо

    Я оставил полупрозрачность для лучшего понимания механики процесса. В реальной жизни значение opacity будет равно нулю.

    Мне подумалось, что нехорошо данные о пользователях раздавать и я написал в службу поддержки.
    Ответил мне некто Агент поддержки #920:

    Это не уязвимость. Да и что в этом страшного?

    Такая вот недокументированная возможность…

    Only registered users can participate in poll. Log in, please.

    Вы считаете, что это

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

    More
    Ads

    Comments 52

      +6
      злоумышленник может использовать это для социального взлома.
      ну или для недобросовестной рекламы.
      «Ваш друг Василий Петрович уже купил нашу кофеварку, а Мария Петровна очень хочет получить такую в подарок.»
        0
        Это уже делается, к примеру посмотрите что за собой тащит код PLUSO (минимум 3 системы статистики)
          +1
          Теоретически, у реклаы с направленностью на конкретного человека может быть вообще весьма неплохая эффективность. Я ещё несколько лет назад размышлял на эту тему, и, в частности, думал вот о каком примере. Допустим, человек пользуется сайтом, куда загрузил несколько своих фотографий. На этом веб-сервисе рекламируется какой-то сайт или услуга. И на рекламной картинке (баннере) оказывается одна из фотографий пользователя. Она может быть отображена там как угодно: стоящая в рамке, лежащая на столе в куче других фоток, прикрепленная магнитом на whiteboard — в общем, простор для фантазии. Рекламировать так можно, наверно, что угодно: ноут/монитор/телефон/КПК/фоторамка — фотка на экране, книга — фотка вставлена в качестве закладки. И так далее. А пользователь заинтересуется, почему вдруг его фотка попала на баннер — и пройдёт по ссылке.

          Ну, а тут, фактически, то же самое, только ещё проще: поскольку пропускаем шаг с регистрацией и загрузкой каких-либо фотографий (впрочем, загрузка фотографий и без таких уязвимостей не столь уж обязательна для такой рекламы: фотографии часто можно автоматически получить из других источников в Интернете по указанным при регистрации данным).
            0
            Или ещё лучше: в рекламе отображается картинка с монитора пользователя realtime
          +3
          Помнится была похожая тема с двумя кубиками (красный и синий/зелёный?), под видом проверки на робота, делался лайк и «рассказать друзьям».
            +17
            По нормальному тут должен быть запрос на разрешение доступ к своим данным приложению, так что это никак не фича, а, скорее всего, уязвимость.
              –1
              Он так и работает. Пользователь щелкает на кнопку (прозрачную или непрозрачную). Открывается отдельный большой красивый iframe, в котором пользователь должен подтвердить, что хочет предоставить свои данные сайту.
              Так что с помощью этой «уязвимости» можно заставить пользователя сделать щелчок по кнопке, но нельзя получить его данные, не поставив его в известность. В отличие от виджета «мне нравится», который никакого доступа не спрашивает.

              UPD: если пользователь уже нажимал кнопку «предоставить данные этому сайту», второй раз его об этом спрашивать не будут. Видимо из-за этого автор подумал, что авторизация прозрачная и посчитал это уязвимостью.
                +7
                А вы по ссылке Демо (http://jsfiddle.net/Ej25j/) проходили? Я проходил, поменял apid, проверил на всякий случай, что в приложениях ВК нет jsfiddle и все равно сработало.
                  +10
                  Проверил еще раз, действительно данные передаются сайту без запроса доступа. Раньше такого не было. На самом деле уязвимость, и довольно неприятная.
                    +1
                    Я вот тоже зашел в настройки приложения, удалил (подумал, мало ли чего), но сработало опять, и в приложении прописалось что я дал доступ к публичной информации (чего я, естественно, не делал).
                    +1
                    Я бы не писал, если бы получил такой iframe (вы сами-то пробовали?).
                    vk.com/app4213269
                    Вот это приложение использует автор поста, я не помню чтобы когда-то давал ему доступ, но пример сработал без iframe.
                      0
                      точно точно и ещё один баг — приложение не появляется в списке «Мои приложения» vk.com/apps?act=apps т.е. пользователь вообще никогда не узнает о этой проблеме. Сие однозначно уязвимость.
                        0
                        Оно там в «настройках» vk.com/apps?act=settings
                        Уязвимость уже исправили, раньше не проверял, но сейчас её у меня нет:
                        Зашел на jsfiddle.net/Ej25j кликнул, появилось окошко разрешения доступа к ВК, жму разрешить, появляется алерт с моим именем, а в vk.com/apps?act=settings приложение test, удаляю его и на jsfiddle.net при клике опять разрешение надо давать — все нормально.
                          0
                          Действительно, теперь вылазит попап. Правда у меня он выводит:

                          {"error":"invalid_request","error_description":"Security Error"}
                          

                          А после его закрытия, алерт с моим именем все так же появляется.
                            0
                            а у меня попап вылезает и закрывается. дальше все срабатывает
                            что надо почистить для чистого теста?
                –7
                Итак, мы получили id юзера ВК, имя, фамилию, фото и md5 от всего этого (с секретным ключом нашего приложения). И что дальше? Это открытые данные, не дающие доступ ни к чему. Разве что легкий налет деанонимайза.
                  +12
                  Получить список его друзей, добавить связи, и при посещении сайта сделайть фейковые отзывы с фотками его друзей. Подло, но мы же говорим о последствиях…
                    0
                    Разве приложение не должно запрашивать доступ к связям на отдельной страничке?
                      +5
                      friends.get, users.get, photos.get — Это открытые методы, не требующие access_token.
                        +2
                      +4
                      Это публичная инфа, но она ни к кому не привязана. А вот когда пользователь заходит на твой сайт, а ты без его ведома получаешь его аккаунты из ВК, ОК, яндекса и мейла, включая всю открытую информацию — то это уже совершенно другое дело. Сразу же открываются новые векторы, как для атак, так и для привлечения пользователя к сайту.
                      +9
                      Зашел на демо с Ghostery со всем активными блокировками, долго думал, почему демо не работает…
                        +31
                        NoScript реагирует ну очень адекватно.
                          0
                          А есть для фф способ защиты от clickjacking'а, но без установки noscript? (не хочу блокировать скрипты)
                            +3
                            Не блокируйте. Его можно настроить так, чтобы использовать только определённые виды защиты.
                          +3
                          У меня уже привычка — если что-то не работает, проверить HTTPS Everywhere, Ghostery и ABP. Так что виновник был найден быстро. :)
                          –4
                          Мышка из стрелочки превращается в «руку» (потому что под ней всегда кнопка, пусть даже и прозрачная).

                          Продвинутого пользователя это должно наводить на «мысли».
                            +6
                            ну вот это вообще не проблема поправить.
                              0
                              Хмм, так это же `iframe` на другом домене — никакие стили внутрь не пробросить, из основной страницы также нельзя присвоить. Какой же способ есть?
                                +2
                                Курсор действительно не заменить, но можно же подставлять этот виджет только под ссылки или кнопки (если мышка над ссылкой, передвинуть туда виджет).
                                  0
                                  «Так то оно так», но здесь явно просматривается каскад проблем. А про каскад проблем при проектировании можно писать большие статьи. Но в любом случае, как я могу видеть данная проблема решается лишь на самом верхнем уровне: уровне концепта, то это явно очень большая проблема. Конечно, это возможно не в этой ситуации, но при реальном проекте — это было бы, можно сказать, катастрофическая трудность. Я просто уже много раз слышал фразу «это вообще не проблема поправить», а потом оказывается что, утрирую, нужно пол проекта перелопатить.
                                  0
                                  Можно, например, попробовать еще один прозрачный элемент сверху с pointer-events:none; cursor:default;
                                    0
                                    Ничего не получится — насколько могу помнить, у элементов с `pointer-events:none` игнорируется значение `cursor`.
                              0
                              так всегда и было как мне кажется

                              в виджете видны твои друзья в топе

                              и вся публичная инфа о тебе известна без предупреждения

                              image
                                +2
                                Их из виджета не выцепить, если я не ошибаюсь. И сайту, соответственно, неизвестно, кто ты и кто твои друзья. В отличие от входа на сайт «через вк».
                                  +23
                                  Вытаскивать инфу может и не потребоваться. Достаточно, например, создать видимость, что твой знакомый положительно отозвался о товаре. А это можно сделать, например, наложив интерфейс поверх виджета:
                                +16
                                [irony]Какой интересный метод собрать информацию о хабражителях[/irony]
                                  +1
                                  При Павле Дурове такого не было!

                                  P.S. Получается, можно узнать какие персоны посещали твой сайт о_О
                                    +7
                                    Ну все, теперь на сайте онлайн заявки ТКС банка после любого клика на странице начнут писать ВКонтакте следующее «Здравствуйте, вы начали заполнять заявку на кредитную карту, но не завершили и т. д.»

                                    Кто не в теме — когда тыкал ради интереса их форму, вбил пару полей и закрыл вкладку — мне начали присылать email-ы и даже звонили. Оказалось, они ajax-ом отправляли все что введено в поля.
                                    +5
                                    Оказывается, это используется уже давно. Пара цитат с сайта одного сервиса:

                                    Сервис является первым полностью автоматизированным поставщиком потенциальных клиентов из социальной сети ВКонтакте. Он не только раскрывает личность посетителей сайтов и собирает общедоступную информацию о них в Интернете, но и предоставляет инструменты для взаимодействия с аудиторией в социальных сетях. Все это позволяет использовать новые подходы к продажам в сети, обеспечивать высокий персональный уровень сервиса для клиентов.

                                    Сервис был основан в конце 2012 года для личных целей группы специалистов в интернет-рекламе и маркетинге.
                                      0
                                      Ссылку на сервис? Можно в личку.
                                        0
                                        Он гуглится по первому предложению.
                                      +1
                                      Гугл реклама, да и всё что угодно во фрейме так накручивается уже очень много лет.
                                        +1
                                        Можно я скажу что хабр иногда торт, а вы меня не будете минусить?)
                                          +1
                                          Если вам понравился пост, достаточно просто поставить плюсик.
                                          0
                                          Изгалялся как мог, но пример в обязательном порядке выкидывал окно от ВК с предупреждением о том, что приложение test хочет получить доступ…
                                          Все таки закрыли этот путь?
                                            0
                                            У меня даже если дать доступ, дальше ничего «полезного» не происходит.
                                              0
                                              Скорее всего, за год успели внести изменения со стороны ВК.
                                              0
                                              Сейчас вроде делают через кнопку лайка, после чего смотрится список пользователей, кто лайкнул запись/фото/и т.п. Или это тоже учитывали?
                                              0
                                              Если что, то тут уже Яндекс отреагировал yandex.ru/blog/webmaster/21745 (Как кликджекинг влияет на ранжирование)
                                                0
                                                В принципе возможно, что пользователь на сайте введет такой же пароль, а там и до полного доступа к аккаунту не далеко. Такие дела. Конечно, это плохо.

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