Pull to refresh

После логаута пользователя VK можно получить управление его страницей

Reading time 2 min
Views 74K
Решил попробовать себя в работе с API Вконтакте и наткнулся на интересную особенность.

Один из способов авторизации в API — это OAuth. Вкратце всё происходит так: создаёте приложение ВК, получаете его ID, а затем отправляете браузер пользователя на адрес:

				https://oauth.vk.com/authorize"
					+ "?client_id=123"    // ID вашего приложения
					+ "&display=page"
					+ "&redirect_uri=https://oauth.vk.com/blank.html"    // URL, на который попадёт пользователь после успешной авторизации. ВК требует указания этого сайта в настройках приложения и только для приложения типа Сайт. Для остальных работает только указанный УРЛ, в целях безопасности
					+ "&scope= права доступа"
					+ "&response_type=token"
					+ "&v=5.52"
					+ "&state=123456"

Это авторизация методом Implicit flow.

Если пользователь залогинен, ему будет сразу предложено установить приложение, если нет — вначале залогиниться, а уже потом устанавливать. Если приложение уже установлено, то идёт сразу переход на страницу, в хэше которой будет токен. Дальше идёт работа с API.

Самое интересное начинается после выхода из ВК. Ваше приложение может иметь ссылку на выход вида vk.com/login.php?op=logout. Это стандартная ссылка на выход из VK. Но после выхода пользователя из VK куки остаются рабочими.

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

Т.е. работа ведётся следующим образом — пользователь П1 авторизуется ВКонтакте через приложение. В приведённом примере я использую standalone-приложение, но, возможно, получится и с другими видами приложений. Дальше пользователь П1 нажимает на ссылку выхода из ВК, приведённую выше. После этого ни через браузер, ни через приложение зайти в ВК без авторизации не получится. Дальше пользователь П2 авторизуется через приложение. Затем, уже через браузер пользователь попадает на страницу пользователя П1, вместо своей страницы П2. И может делать с этой страницей абсолютно всё, что угодно, приложение на данном этапе уже не нужно и не играет никакой роли.

Самое смешное то, что вы можете использовать в вашем приложении самые безобидные права. То есть не нужно пугать пользователя тем, что вы просите доступ к фоткам, аудио, видео, сообщениям и всему остальному. Можно оставить только базовые — и всё. Куки при этом всё равно будет полностью рабочими, используя их вы попадёте прямиком на страницу пользователя.

Можно ли считать данную особенность уязвимостью — думайте сами. По-моему, это как минимум не то, чего ожидает пользователь, нажимая на кнопку «Выход» и надеясь на то, что теперь уж его страница в безопасности.

При написании данной заметки ни один пользователь ВК не пострадал.

UPD. При авторизации использовался браузер IE7.
В поддержку я писал задолго до того, как опубликовал статью на здесь. Собственно, публикация статьи здесь и произошла в результате того, что поддержка данный сигнал проигнорировала в духе «это не баг, а фича, но, возможно, что-то изменится в будущем».
Tags:
Hubs:
+47
Comments 75
Comments Comments 75

Articles