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

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

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

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


    Рецепт:

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

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

    Демо

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

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

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

    Такая вот недокументированная возможность…
    Вы считаете, что это

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

    Поделиться публикацией
    Реклама помогает поддерживать и развивать наши сервисы

    Подробнее
    Реклама
    Комментарии 51
    • +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
                    Разве приложение не должно запрашивать доступ к связям на отдельной страничке?
                • +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 (Как кликджекинг влияет на ранжирование)

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