| сохранено

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

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

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

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


Рецепт:

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

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

Демо

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

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

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

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

комментарии (51)

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

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

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

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

А после его закрытия, алерт с моим именем все так же появляется.
0
EnterSandman ,  
а у меня попап вылезает и закрывается. дальше все срабатывает
что надо почистить для чистого теста?
0
Lexxtor ,  
надо удалить приложение test vk.com/apps?act=settings
–7
+1 –8
gwer ,  
Итак, мы получили id юзера ВК, имя, фамилию, фото и md5 от всего этого (с секретным ключом нашего приложения). И что дальше? Это открытые данные, не дающие доступ ни к чему. Разве что легкий налет деанонимайза.
+12
4ikist ,  
Получить список его друзей, добавить связи, и при посещении сайта сделайть фейковые отзывы с фотками его друзей. Подло, но мы же говорим о последствиях…
0
AlexWinner ,  
Разве приложение не должно запрашивать доступ к связям на отдельной страничке?
+5
Chesnovich ,  
friends.get, users.get, photos.get — Это открытые методы, не требующие access_token.
+2
4ikist ,  
+4
DarkByte ,  
Это публичная инфа, но она ни к кому не привязана. А вот когда пользователь заходит на твой сайт, а ты без его ведома получаешь его аккаунты из ВК, ОК, яндекса и мейла, включая всю открытую информацию — то это уже совершенно другое дело. Сразу же открываются новые векторы, как для атак, так и для привлечения пользователя к сайту.
+9
+10 –1
mberkut ,  
Зашел на демо с Ghostery со всем активными блокировками, долго думал, почему демо не работает…
+31
GAS_85 ,  
NoScript реагирует ну очень адекватно.
0
+1 –1
Pongo ,  
А есть для фф способ защиты от clickjacking'а, но без установки noscript? (не хочу блокировать скрипты)
+3
Falcon_peregrinus ,  
Не блокируйте. Его можно настроить так, чтобы использовать только определённые виды защиты.
+3
Dragonizer ,  
У меня уже привычка — если что-то не работает, проверить HTTPS Everywhere, Ghostery и ABP. Так что виновник был найден быстро. :)
–4
+2 –6
Wyrd ,  
Мышка из стрелочки превращается в «руку» (потому что под ней всегда кнопка, пусть даже и прозрачная).

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

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

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

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

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

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

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

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