Решил попробовать себя в работе с 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.
В поддержку я писал задолго до того, как опубликовал статью на здесь. Собственно, публикация статьи здесь и произошла в результате того, что поддержка данный сигнал проигнорировала в духе «это не баг, а фича, но, возможно, что-то изменится в будущем».
Поделиться с друзьями
-->

Комментарии (75)


  1. ifaustrue
    25.07.2016 08:40
    +2

    А разве у ВК нет программы оплаты за найденные уязвимости?
    Ваша заметка как раз похожа на такое.


    1. kovalevsky
      25.07.2016 08:54
      +3

      Они ещё и перманентно банят тех, кто не пишет им, а эксплуатирует и публично распостраняет


      1. prohodil_mimo
        25.07.2016 09:15
        +9

        Никаких специальных окошек для обращения за оплатой за баги я не нашёл. В поддержке же (куда я обратился задолго до этой публикации) мне сказали, что это не баг, а фича. Поэтому «умываю руки».


        1. Dionis_mgn
          25.07.2016 10:17

          Плохо искали: hackerone.com/vkcom. Полгода назад получил $200 за весьма несерьёзную уязвимость. Правили долго, правда.


          1. prohodil_mimo
            25.07.2016 10:18
            +8

            Как наивный пользователь, я полагал, что окно с описанием уязвимостей находится на самом сайте ВК.


      1. Arslanbekov
        25.07.2016 12:36

        Ну вроде как это логично, а вообще они выплачивают по bug bounty


        1. atrolov
          26.07.2016 10:21

          Больше года висит бага, им ваще на эту программу…


  1. dmx102
    25.07.2016 09:02
    +3

    Здесь нет бага. Вы путаете два не связанных механизма.
    OAuth для авторизации сторонних приложений и авторизацию/разлогин самого сайта.

    Фактически сайт ВК это такое же приложение и вы разлогинитесь в нем, вместо своего.

    Чтобы сделать разлогин для токена вам нужно использовать методы API с указанием токена, если такие там предусмотрены.


    1. prohodil_mimo
      25.07.2016 09:25

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

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


      1. dmx102
        25.07.2016 09:41
        -1

        В приведенном коде авторизации вы используете Implicit flow. Иными словами это локальная авторизация приложения. Access_token который вы получили, хранится у вас в браузере и сервер или кто угодно еще не имеют к нему доступа. При попытке повторной авторизации вы инициируете создание ЕЩЕ одного токена.

        Так как у вас в статье нет ни какой подробной информации о последующем доступе к странице пользователя, уверен, что дальше базовых прав, которые вы дали токену при его создании, вы не получите. Это основной принцип OAuth.


        1. dmx102
          25.07.2016 09:47
          -1

          Более того, неправильно обвинять кого-то в уязвимости управления страницей после разлогина, не предоставив подробного описания с приведенными доказательствами и тем более писать не им, а публично. А то, что OAuth создавался в том числе и для управлять – это да.


        1. prohodil_mimo
          25.07.2016 09:51
          +5

          В том-то и весь сыр-бор — я получаю полный доступ, причём через браузер.

          Авторизуюсь под пользователем П1 через API.
          Разлогин под пользователем П1.
          Дальше любые попытки отправить запрос в API или зайти через браузер оканчиваются требованием авторизоваться.
          Авторизуемся под пользователем П2 через API.
          Заходим в браузер (через который авторизовывались) и получаем полный доступ к аккаунту пользователя П1 (не П2, под которым заходили)! Даже не смотря на то, что авторизовались якобы для использования API и даже могли самые скромные права затребовать для своего приложения.


          1. GlebkaF
            25.07.2016 12:28
            +1

            Токен пользователя П1 в куках разве не перезаписывается токеном пользователя П2? Подменой кук на валидные «ломается» любой oAuth, тут ничего не поделать


            1. avost
              25.07.2016 12:39

              Разве старый токен не должен инвалидироваться на сервере после логаута?


              1. GlebkaF
                25.07.2016 12:54
                -2

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


                 vk.com/login.php?op=logout

                А для логаута из vk oAuth нужно использовать другой адрес, что-нибудь вроде такого:


                https://oauth.vk.com/logout

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


                Доверенные приложения могут получить неограниченный по времени access token для доступа к API, передав логин и пароль пользователя.
                Выдаваемый access token не привязан к IP-адресу пользователя, поэтому его достаточно для последующей работы с API без повторения процедуры авторизации.


                1. avost
                  25.07.2016 13:41
                  +2

                  Ок, давайте по-другому — при логине второго пользователя, куки и сессии прежнего разве не должны очищаться?


                  1. GlebkaF
                    25.07.2016 13:42
                    -1

                    То есть вы логинитесь на одном сайте (vk.com), а куки и сессии чистятся на другом сайте (ваше приложение которое использует vk api)?


                    1. avost
                      25.07.2016 14:59
                      +2

                      Вторым пользователем мы логинимся на vk.com и получаем _там_ (на вк, а не в приложении) сессию первого пользователя. При логине на вк надо очищать все возможные куки и токены от предыдущих логинов. Я так понимаю, предыдущий токен не чистится, вк получает И куку новой сессии И старый токен. И считает токен приоритетнее. Тут вообще не должно быть важно разлогинивался пользователь в приложении или нет и каким способом тоже. Не?


                      1. Dionis_mgn
                        25.07.2016 15:18
                        -1

                        Каким образом вк получает старый токен? Токен к кукисам браузера не привязан. Токен — он для приложения. Куки — для браузера. Приложение получает токен с помощью переадресации браузера. На этом пути куки и токена расходятся навсегда (так задумано, по крайней мере).
                        Автор рассказал слишком мало, чтобы можно было хоть о чём-то говорить.
                        upd.: Нет, при разлогировании пользователя в браузере, в приложении его токен не должен быть «деактивирован». У токена есть своё время жизни, не зависящее от куков и сессии пользователя в браузере.


                        1. avost
                          25.07.2016 15:55
                          +1

                          Понятия не имею как у них так получается. Возможно, api.vk запихал токен в куку с доступом *.vk. возможно приложение как-то умудрилось запихать его в куку с именем, которое случайно совпало с вк-шным и кука пролезла на соседний сайт :). Возможно даже пользователь зашёл на вк с прописанным в урле параметром с этим токеном. Это не так сильно важно. Но логично же, что при логине нового пользователя должны очищаться _все_ возможные прежние аутентификационные и авторизационные метки. Я даже не говорю, что их логично очищать и при разлогине (тем более, что это делается как раз на сайте vk), но при новом логине просто обязательно.
                          Да, автору хорошо было бы дать побольше информации — просто интересно в каком месте информация просачивается с одного сайта на другой.


                          1. boblenin
                            26.07.2016 05:40

                            Очищать где? В браузере, на сервере, в приложении?


                            1. avost
                              26.07.2016 06:14

                              В браузере.
                              На сервере тоже можно инвалидировать предыдущую сессию — она уже не понадобится.
                              Приложение вк не контролирует, там всё, как есть, оно ни чему не помешает — свой токен, живёт отдельной жизнью.


                          1. Dionis_mgn
                            26.07.2016 09:56

                            Еще раз повторю: при «разлогивании» человека в браузере, ни один токен деактивироваться не должен. Так задуман OAuth. И именно это — логично. Потому как я хочу разлогиниться на ВК, а не на хабре, например.
                            Давайте посмотрим на реализацию от GitHub: Логинимся на GitHub. Идём на dubblet.com и логинимся через GitHub OAuth. Разлогиниваемся в GitHub. Возвращаемся в dubblet, создаём новый документ, сохраняем его. И удивляемся тому, что в GitHub появился новый gist. Хотя мы были разлогинены в GitHub!


                            1. avost
                              26.07.2016 11:07
                              +1

                              И что, вы когда в гитхабе логинитесь новым юзером получаете при этом доступ к данным старого? Вот то-то и оно!


                              1. Dionis_mgn
                                26.07.2016 11:35
                                -1

                                А вы считаете, что автор получает доступ к данным старого аккаунта именно по вине vk? Вы вообще смогли понять, какую проблему обнаружил автор? Он ОЧЕНЬ куцо описал проблему. Никаких выводов сделать нельзя. Я месяц назад реализовывал авторизацию средствами vk OAuth и ничего подобного не наблюдал.
                                Ниже люди жалуются на «подобные» проблемы. Но при этом OAuth в их рассказах не упоминается. Возникает вопрос: при чем тут OAuth? Даже если проблема есть, очевидно, он тут ни при чем. Проблемы, с которыми столкнулся автор, могут быть вызваны самим автором. Если бы он описал подробно, кто какие запросы в каком порядке шлёт — можно было бы о чем-то говорить.


                                1. avost
                                  26.07.2016 12:11
                                  +1

                                  >А вы считаете, что автор получает доступ к данным старого аккаунта именно по вине vk?

                                  В общем, да, я считаю, что после логнина второго пользователя доступ к данным первого должен быть прекращён. А OAuth или не OAuth рояли не играет.

                                  >Проблемы, с которыми столкнулся автор, могут быть вызваны самим автором.

                                  Нет, так быть не должно. То, что автор не использовал этот сценарий в плохих целях не значит, что этого не сделает кто-нибудь другой.


                                  1. Dionis_mgn
                                    26.07.2016 12:16
                                    -1

                                    Почему на остальное не отвечаете? Вы смогли понять, с какой проблемой столкнулся автор? Если да — поведайте, пожалуйста. Если нет — я по-прежнему не понимаю, о чём тут можно говорить.
                                    Сейчас я склонен считать, что автор и вовсе не выходил из аккаунта.


                                    1. avost
                                      26.07.2016 12:39
                                      +1

                                      Да не важно ведь выходил он или не выходил. Что там происходит с его приложением не важно. Важно, что он залогинился в вк вторым пользователем, а получил данные первого. Вот _этого_ не должно происходить. Но происходит просто судя по ответу техподдержки (не бага, а фича). То есть они признали, что так и происходит.


                                1. prohodil_mimo
                                  26.07.2016 16:36

                                  Всю процедуру я описал. Что конкретно Вас интересует?

                                  Что касается виновника — OAuth или не OAuth — я этого знать не могу. Я просто описал, каким образом обнаружил баг. Когда я пытался проделать весь этот фокус без участия API, через браузер (Opera) — у меня не получилось. Но я не исключаю возможности того, что есть какой-то способ провернуть это всё без участия API и OAuth. Но и утверждать могу только то, что видел своими глазами.

                                  Что касается подробного описания процесса и отправляемых запросов — не было никаких запросов, кроме запроса на авторизацию, самого первого. Его я и привёл в статье. Отправляю запрос на авторизацию, разлогиниваюсь через указанную ссылку, отправляю запрос на авторизацию, вхожу в аккаунт другого пользователя и пользуюсь страницей первого. Всё. Это все запросы и весь порядок — в статье он описан.


                                  1. GlebkaF
                                    26.07.2016 17:20
                                    -1

                                    Что именно вы подразумеваете под «пользуюсь страницей первого»? Вы пользуетесь ей в своем приложении или на вк.ком? Если в приложении, то какими именно возможностями вы располагаете?
                                    Имхо, проблема действительно описана очень размыто.
                                    Вообще, мне кажется я понял в чем дело, авторизация через oAuth происходит условно в два этапа:
                                    1. Юзер авторизовывается на vk.com
                                    2. Юзер авторизовывается в вашем приложении через oAuth. Здесь вам, как разработчику, дают access token для дальнейшей работы с данными пользователя.
                                    Когды вы пытаетесь разлогинить пользователя, вы даете ему выйти из аккаунта на vk.com (Но не в вашем приложении!). Таким образом, access token продолжает храниться на вашей стороне, и, по всей видимости, когда новый юзер авторизовывается, второго этапа авторизации в вашем приложении не происходит, т.к. у вашего приложения уже есть действительный access token предыдущего юзера. Т.е. проблема безопастности исключительно на вашей стороне, вы не позаботились о том, что бы после завершения сессии пользователя почистить все его данные авторизации.
                                    Поправьте меня если я не прав и не могли бы вы показать ваш запрос в ТП и их ответ?


                                    1. prohodil_mimo
                                      26.07.2016 17:57

                                      Пользуюсь именно через браузер.на вк.ком.

                                      Описанная Вами гипотеза была бы, возможно, верна, если бы пользоваться чужим аккаунтом можно было только через приложение. Но, как я уже несколько раз писал выше — дальнейшее использование аккаунта происходит именно в браузере, под полными правами, вне зависимости от затребованных приложением прав, даже при выключенном или даже удалённом приложении.

                                      Про размытость описания я уже несколько раз читал в комментариях, но так и не понял, что ещё нужно описать. Весь процесс, как я его видел, я описал в статье и немножко дополнил в комментариях (в том числе в том, на который Вы только что ответили).

                                      Как я уже несколько раз писал в статье и в комментариях я даю выйти пользователю именно в моём приложении!

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

                                      Если честно — я восхищаюсь Вашим упорством. Даже после того, как официальные представители ВК признали наличие бага и пообещали его закрыть — Вы всё равно в довольно категоричной форме строите предположения о том, что это моё кривое приложение (оно действительно ещё довольно кривое) выдаёт глюки, а не ВК.

                                      Переписку с ТП я выкладывать не буду. Во-первых, ВК дал официальный комментарий, поэтому доказывать наличие запросов от меня в ТП и их содержание бессмысленно. Во-вторых, там довольно большой объём текста. Ну и в-третьих, всё-таки это переписка, не знаю, насколько корректно это будет по отношению к сотрудникам.

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


                                      1. Dionis_mgn
                                        26.07.2016 18:09
                                        -1

                                        «Даже после того, как официальные представители ВК признали наличие бага» — можете ссылочкой поделиться?
                                        Какой именно метод авторизации использовался?


                                    1. Dionis_mgn
                                      26.07.2016 17:59
                                      -1

                                      del


                                  1. Dionis_mgn
                                    26.07.2016 17:54
                                    -1

                                    Вы не описали ровным счётом ничего, что позволило бы понять суть проблемы.
                                    Я понял только, что Ваше приложение получило токен для пользователя. А дальше: Что за приложение (веб-сайт/десктоп/что-то еще)? Какой именно метод авторизации используется? КТО отправил запрос на завершение сессии в вк? Браузер? Ваше приложение? В любом случае, ссылка неправыильная, так чего Вы ожидали? Вы убедились, что разлогирование действительно произошло?
                                    Как связаны права, которые запрашивает приложение к доступу к вк через браузер? Браузер о токене для Вашего приложения ничего не знает.
                                    Расскажите подробно (желательно, в посте), что именно и в какой последовательности какие запросы слало на сервера ВК и какие ответы получало. Вот тогда можно будет говорить о чём-то. А так — каждый понял ситуацию как ему ближе и в итоге развели непонятно что.


                                    1. prohodil_mimo
                                      26.07.2016 18:32

                                      Метод авторизации описан в статье и, в принципе, понятен из ссылки на авторизацию (параметр response_type).
                                      Связь браузера и токена описана в статье.
                                      Убедился ли я в разлогировании — описано в статье.
                                      Тип приложения я добавил в статью.
                                      Все запросы, которые я отсылаю (точнее, один запрос), описаны в статье и дополнительно описаны специально для Вас (потому что ответ был на ваш комментарий) в комментарии, на который вы только что ответили.

                                      Статью немножко поправил, добавил пояснения, хотя вся процедура настолько проста, что даже не знаю, что ещё тут пояснять.

                                      Завершение сессии отправляется из приложения — как мы уже убедились, такой ссылки больше нигде на сайте ВК нет, поэтому она может существовать только в приложении.

                                      В любом случае, ссылка неправыильная, так чего Вы ожидали?


                                      Сразу вспомнился анекдот — утерянный пистолет Макарова серии 1234321 считать недействительным. Т.е. взлом по неправильной ссылке считать недействительным?


                                    1. kowack
                                      28.07.2016 12:46
                                      -1

                                      1. prohodil_mimo
                                        28.07.2016 13:54

                                        вау! срыв покровов!
                                        Моя статья вообще не вышла бы в свет, если бы поддержка не послала меня.
                                        Она и задумывалась как способ привлечь внимание поддержки.
                                        Не думал, что у кого-то так сильно подгорит от неё. Не думал, что на хабре есть люди, которым какие-то циферки в рейтингах, особенно чужих, делают так больно. Даже неудобно себя чувствую.


                                      1. prohodil_mimo
                                        28.07.2016 13:58

                                        И да, мне кажется, что спамить комменты своими ссылками — это неэтично. Особенно, если это даже не прошедший модерацию материал.


                                        1. Dionis_mgn
                                          28.07.2016 14:15
                                          -1

                                          Человек ответил на мой комментарий (за что ему большое спасибо). Потому что его пост отвечает на все мои вопросы. Вместо того, чтобы истекать желчью, лучше бы взяли с него пример: именно так посты писать и надо. Хорошо во всём разобраться. Отбросить истерики и бессмысленные громкие заявления. Излагать чётко и целостно. Так что его ссылка на не прошедший модерацию материал — очень даже к месту.
                                          И да, человеку наплевать на цифорки и рейтинги (у нас с ним их попросту нет). Человек хочет помочь остальным разобраться в ситуации (и очень помог в этом мне лично, например). Вы — не хотите. Он — молодец. Вы — редиска.
                                          Удачи!


                                          1. prohodil_mimo
                                            28.07.2016 14:43

                                            Человек (как, кстати, и Вы) пришёл и начал со всей категоричностью заявлять, что я — дурак, а он — молодец. При том, что я просто описал то, что вижу. Не претендуя ни на что. Просто — увидел, написал в поддержку, был послан, написал сюда. Неужели так сложно прочитать и понять — это просто описание увиденного? НЕ экспертное мнение, НЕ гипотеза, НЕ претензия, НЕ интерпретация — просто увиденное своими глазами поведение системы. Проверенное несколько раз.

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

                                            Но на хабре есть люди, которые точно и определённо знают, как всё было на самом деле. Они точно знают, что я — дурак и выдумщик, и они уже приготовили весь жирный шрифт, чтобы вывести меня на чистую воду. Вы из какого цирка, господа? Меня не надо выводить никуда — я написал то, что видел, и отошёл в тень. Никаких лавров у меня нет. Никаких денег мне на заплатили. Никаких предложений от гугла стать СЕО мне не поступило. И я вот вообще не понимаю — где и чему тут завидовать? Зачем приходить и изливать свою желчь фразами «да я уже давно всё это знаю, только никому не рассказал», «да вы тут всё на заблуждениях придумали, а я точно знаю, как всё было», «Щас я тут напишу свою разоблачающую статью, начну её с поливания грязью, а дальше отведу душу и соберу все рейтинги!»

                                            Я бы на вашем месте, господа, с присущей мне корректностью, построил бы диалог по-другому. Я бы написал, что наблюдал совершенно другое наблюдение. Когда автор мне напомнил бы, что он видел что-то другое, я бы заметил, что, возможно, поведение системы уже изменилось или же произошло что-то, чего я не знаю (так бывает). Ну нет у меня такого свойства — забегать в комменты и сразу начинать всех обзывать дураками. Ну не могу я обвинять во лжи человека, которого не знаю, и которого на лжи точно и определённо не поймал. Но мы с вами, видимо, из разного теста. Ваше тесто, видимо, подразумевает непреложную веру в своё абсолютное знание.

                                            И то, что этот ваш «бескорыстный» человек хочет помочь разобраться — да честь ему и хвала! Одна из целей моей публикации была — спросить компетентного мнения и самому разобраться в том, что происходит. Только зачем начинать разбирательства с обвинений (скрытых и явных). Если я написал, что видел такое поведение — значит я его видел. А отвечать мне в духе «камни с неба падать не могут, потому что их там нет» — отличный способ во всём разобраться.

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

                                            П.С. вот уж не думал, что на хабре можно попасть в ситуацию, когда придётся отгавкиваться от чьих-то личных мнений, как будто я куда-то в комменты какой-нибудь смехогруппы вконтакте попал.


                                            1. Dionis_mgn
                                              28.07.2016 15:01
                                              -1

                                              Дураком Вас никто не называл. Никто не говорил Вам, что Вы всё придумали. Вас никто ни в чем не обвинял. Вы написали пост. Его оказалось недостаточно для понимания ситуации. Попытки прояснить ситуацию Вы восприняли в штыки. Теперь вон вообще строчите огромные комментарии (чуть ли не больше самого поста), просто чтобы доказать незнакомому человеку, что он — редиска.
                                              Человек пришёл и доходчиво объяснил, что именно Вы наблюдали. Вы вот сами в ситуации не разобрались, решили просто рассказать сообществу, что что-то видели. Человек разобрался и высказал свои выводы (как Вы говорите, честь ему и хвала за это, верно?). Сообществу. Потому что для того оно и задумывалось. И всё. Чем Вас это задевает?
                                              Я предлагаю закрыть эту бессмысленную демагогию.


                                              1. prohodil_mimo
                                                28.07.2016 15:20

                                                На все вопросы об уточнениях я ответил. На те, конечно, где было написано, чего конкретно не хватает.

                                                А в штыки я начал воспринимать только неприятные лично мне категорические заявления.

                                                «4. Баг (не фича) в том, что какие бы вы данные не ввели в форму, вас просто перебросит на ранее авторизованную станицу, даже если вы ввели валидные авторизационные данные для другого аккаунта.» Это заявление, на котором комментатор и построил все свои дальнейшие рассуждения и обвинения. На самом деле они не соответствовали действительности в моём случае. Потому что это означало бы, что перейди я на любую другую страницу без ввода авторизации, я бы мог без проблем туда попость. Между тем никакой переход ни на какую страницу не мог быть осуществлён без ввода авторизационных данных. В описываемом мною случае. Но Остапа уже понесло — не разобравшись в описываемых событиях он уже начал обвинять в том, что кто-то другой в чём-то не разобрался.

                                                А сейчас он уже даже придумал, что я пост переписал более, чем полностью. Да, реально ответ профессионала, собирающегося беспристрастно разобраться в поведении системы.

                                                Закрытие бессмысленной демагогии я поддерживаю.


                                      1. prohodil_mimo
                                        28.07.2016 14:10

                                        Кстати, я на хабре пару дней, ещё не освоился — тут есть какой-то способ передавать рейтинг и карму другим пользователям? Я вижу что вам ооочень надо, я бы с вами, как с особо нуждающимся в циферках на экране, тешащих ущемлённое самолюбие, поделился бы — лишь бы не видеть этого самоунижения и «изкожилезенья» ради «славы» (даже смешно это слово в данном контексте применять).


                                        1. kowack
                                          28.07.2016 15:16
                                          -1

                                          Сейчас пост вами отредактированный более чем полностью, содержит другие формулировки и дополнительную информацию, из-за чего часть комментариев выглядит теперь странно.

                                          Мой пост прошёл модерацию, но остался в песочнице.


                                          1. prohodil_mimo
                                            28.07.2016 15:23

                                            Что мною отредактировано:

                                            Добавлено

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

                                            И
                                            "Это авторизация методом Implicit flow."
                                            Добавлено по той же причине.

                                            Это и есть отредактированный более чем полностью пост?

                                            «Не смог докопаться, так хоть уйду, хлопнув дверью»


                                            1. Dionis_mgn
                                              28.07.2016 15:38
                                              -1

                                              Да. Это и есть. Это единственный параграф, который хоть что-то проясняет.


                                            1. kowack
                                              28.07.2016 15:54
                                              -1

                                              Это не единственные правки, но хорошо, попробуйте прочитать статью без этого абзаца) Складывается впечатление что виной всему OAuth и при помощи приложения можно получить доступ к посторонней странице, что является очень серьёзной уязвимостью. Это то, что я понял прочитав утром ваш пост. Но позже смог убедился что дела обстоят совсем иначе.


                                              1. prohodil_mimo
                                                28.07.2016 16:10

                                                Это единственные правки, не считая последний абзац, который я добавил почти сразу после публикации, когда у статьи было, по-моему, едва пара тысяч просмотров, после первых комментариев о том, что мне нужно было обращаться вначале в поддержку.

                                                Но вам, конечно, виднее, какие у меня в посте правки.

                                                Но самое главное, что абсолютно все эти правки уже были на момент вашего комментария на тему «скандалы, интриги, расследования». Т.е. с данными правками ваши комментарии были уже неактуальны? Зачем же вы их публиковали? Если же они актуальны и этими правками, т.е. и сейчас, тогда почему же вы пишете, что после (вами придуманного) «полного переписывания» моего поста, многие комментарии потеряли актуальность?

                                                П.С. два пользователя, зарегистрированные с разницей в месяц одновременно поочерёдно пишут мне почти одинаковые по содержанию и некоторым семантическим особенностям «обличающие» комментарии. Совпадение — не думаю) Несложно перелогиниваться?


  1. AVX
    25.07.2016 10:07
    +9

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

    Вот и сошлось. Я думал, это только у меня такие странности ИНОГДА происходят. У меня и у жены есть аккаунты в ВК. Она обычно не выходит, а просто браузер закрывает (firefox). А мне приходится при открытии ВК нажимать «выход» и потом логиниться под собой. Так вот, уже много раз было так, что после ввода своего логина и пароля я попадаю в её аккаунт. Со всеми правами. При этом к своему аккаунту уже не имею доступа. Не помогает ни обновление страницы, ни чистка кэша/куков. Повторно выхожу-захожу — опять то же самое. Помогает чаще всего выход, чистка куков и смена внешнего IP (выключить-включить роутер). Иногда просто нужно подождать какое-то время.
    Но это далеко не всегда происходит. В последние месяцев 4-5 не замечал такого, но ранее — как минимум раз в месяц попадалось.


    1. GoldGoblin
      25.07.2016 12:43
      +6

      Сообщал им об этом чуть более года назад. Ответили что этого не может быть и у меня едет крыша.


      1. AVX
        25.07.2016 13:00

        Потому и не пишу им, обзовут дураком и засудят ещё (скажут что это я поломал).
        Да, это тянется уже не один год.


    1. Plesser
      25.07.2016 12:47

      только сегодня с этим столкнулся впервые.
      дал девушке планшет поиграться, она не вышла.
      нажал выход — ввел свои данные и попал на ее страницу.
      снова вышел — снова зашел — результат тот же.
      подумал что заглючил планшет (но не планшет а сам хром) — хотя куки сносил несколько раз.
      через несколько часов снова повторил эксперимент, результат тот же. потыкал по ссылкам и в какой то момент меня благополучно катапультировало на мою страничку.


    1. inout
      25.07.2016 16:52

      Подтверждаю. Неоднократно сталкивался с таким поведением при логине/разлогине.


    1. boblenin
      26.07.2016 05:38

      Могу потеоритезировать. Возможно у них access_token живет не в сессии, а например в localdb.


  1. logofiles
    25.07.2016 12:43
    -1

    А как же «Завершить все сеансы»?
    Правда на текущий не сработает


    1. krimtsev
      25.07.2016 14:14
      +1

      при чем здесь это? люди говорят о доступности к личной информации других пользователей, а не о возможности разлогиниться


  1. alifar
    25.07.2016 12:52

    интересная фича. работает только с того ПК, где происходила первая авторизация?


  1. Tsivarev
    25.07.2016 16:46

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


    А где Вы нашли эту «стандартную» ссылку для выхода?


    1. prohodil_mimo
      25.07.2016 16:59

      Из кнопки «Выход» на сайте ВК.


      1. Tsivarev
        25.07.2016 17:09

        Но в кнопке «Выход» везде ссылка такого вида «https://login.vk.com/?act=logout...». Или где-то есть другие ссылки?


        1. prohodil_mimo
          25.07.2016 17:20

          Да… странно. Может уже поменяли. Ссылку точно брал из кнопки Выйти, только не помню точно с какой страницы — из обычного пользовательского интерфейса или со страницы установки приложения. Там и сейчас отличаются между собой ссылки, но той, которая у меня описана, нет теперь ни там, ни там.


  1. Tsivarev
    25.07.2016 17:07

    DELETED


  1. perfect_genius
    25.07.2016 19:16

    После выхода остаются пиктограммы тех, с кем чатился, можно просмотреть имена и фамилии. Интересно, это тоже фича а не баг?


    1. rensaid
      26.07.2016 21:29

      Кажется, всегда так было. Справа снизу?


      1. perfect_genius
        26.07.2016 22:51

        Да.


  1. kowack
    27.07.2016 17:22
    -1

    Объясняю как всё на самом деле:
    1. Автор поста из стороннего приложения переходит по ссылке https://vk.com/login.php?op=logout
    2. На сайте ВК такая ссылка сопровождается хешем https://vk.com/login.php?op=logout&hash=abcdefgh
    3. Фича (не баг) в том, что при невалидном (пустом) хеше выход из аккаунта не происходит, а автор видит страницу которую и запрашивал (/login.php)
    4. Баг (не фича) в том, что какие бы вы данные не ввели в форму, вас просто перебросит на ранее авторизованную станицу, даже если вы ввели валидные авторизационные данные для другого аккаунта.

    p.s.: репортил пару лет назад, сказали не баг, а для удобства глупеньких)


    1. prohodil_mimo
      27.07.2016 20:12

      И опять человек, который знает «как было на самом деле». Как было «на самом деле» я описал в статье.


      1. kowack
        27.07.2016 20:47
        -1

        При всём уважении, статья строится на заблуждении.
        И да, я повторил описанные вами действия.

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

        Это не так. Переход по ссылке https://vk.com/login.php?op=logout не завершает сессию пользователя.
        Ссылка не действительна без параметра «hash».

        Дальше пользователь П2 авторизуется через приложение.

        Это не так. Запросите с полученным токеном данные текущего пользователя. Это П1.

        После этого ни через браузер, ни через приложение зайти в ВК без авторизации не получится.

        Это не так. Любая страница требующая авторизацию работает с данными П1, к примеру, https://new.vk.com/im


        1. prohodil_mimo
          27.07.2016 20:58

          При всём уважении, Ваше заявление строится на невнимательности. В статье описано, что после перехода на данную ссылку, происходит логаут. Никакое действие после данного перехода не может быть выполнено без авторизации. Об этом в статье написано. Т.е. логаут всё же происходит. Повторюсь в который раз — ни одно действие после перехода по указанной ссылке не могло быть произведено без авторизации — ни запросы из приложения, ни переходы по ссылкам ВК в браузере. Что ещё считать логаутом, как не перманентное требование авторизации?

          И ещё не забывайте о том факте, что почти сразу же ВК отреагировали (мне в личку и здесь, и в ВК писали разработчики), поэтому абсолютно не исключено и даже наверняка, сейчас всё описанное в статье уже не работает, а работает очень даже скорее всего так, как Вы описали. НО — на момент публикации всё было так, как описано в статье. И было так на протяжении длительного времени — после моего обращения в поддержку по этому вопросу, после подтверждения поддержкой данной «функциональности» и дальнейшего отказа от реагирования, до публикации прошло, кажется, дней пять.


          1. kowack
            27.07.2016 21:16
            -1

            Как я писал ранее, этот баг с многолетней выдержкой.

            Сами перейдите по ссылке https://vk.com/login.php?op=logout.
            Вы увидите форму авторизации.

            Если теперь перейти по ссылке https://vk.com или https://vk.com/habr вы всё ещё видите форму авторизации.

            Но если же перейти по ссылке https://vk.com/im, которая требует обязательную авторизацию, то вы вдруг окажитесь залогинены.

            Так было годами ранее, так есть и сейчас.


            1. prohodil_mimo
              27.07.2016 21:34

              Про многолетнюю выдержку — я даже не сомневаюсь. Собственно, если бы он не был с многолетней выдержкой — о нём бы сейчас и не говорили. На право первородства совершенно не претендую. Увидел баг, сообщил куда следует, был послан, опубликовал. Вас задевает конкретно факт того, что я написал о том, о чём Вы уже давно знаете?


              1. kowack
                27.07.2016 22:33
                -1

                Ни в коем случае. После прочтения вашего поста не до конца ясна суть проблемы, комментарии тому подтверждение. Я попытался разъяснить что к чему, не более.

                К тому же вы используете ряд ошибочных допущений, ещё и выделяете главное заблуждение жирным. И пользователь П2 тут не нужен, причина в неправильной ссылке выхода и последующем дурацком поведении ВК при невалидном (в вашем случае пустом) параметре hash.


                1. prohodil_mimo
                  28.07.2016 10:21

                  Общение с человеком, который и без тебя знает, как всё на самом деле, априори бессмысленно.

                  Как в ещё одном анекдоте — «сейчас ты будешь верить своим бесстыжим глазам, а не любимой жене».

                  Поведение, с которым я столкнулся, описано в статье, некоторые дополнения даны в комментариях. Честно говоря, не знаю, что ещё добавить. Признаться, что я — дурак с галлюцинациями, а Вы — великий учёный, вычисливший Нептун на кончике карандаша — извините, пока не убедили. Своим бесстыжим глазам я пока ещё верю.


                  1. kowack
                    28.07.2016 12:25
                    -1

                    Я ни коим образом не хотел задеть ваше ЧСВ. Каюсь если так вышло.

                    Вы указываете OAuth и П2 как часть бага, которые тут ни при чём.
                    Проблема исключительно в ссылке выхода без обязательного параметра.
                    Это я и пытаюсь вам объяснить)


                    1. prohodil_mimo
                      28.07.2016 12:41

                      По-моему, это ваше ЧСВ задето. Кто-то написал о баге, о котором я знаю много-много лет, надо срочно написать, что он не прав и рассказать народам мира «как всё было на самом деле». В сотый раз повторяю — поведение системы, которое я наблюдал, я описал в статье. Там же я указал, что не берусь судить о том, является это багом или уязвимостью или и правда «фича».

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

                      Гипотезы, обсуждение, спор — это нормально, но когда приходит человек и говорит — вы все дураки, а я точно знаю, как было на самом деле, щас я вам тут все ваши заблуждения жирным шрифтом-то повыделяю — ну это, как мне кажется, немножко неправильная постановка вопроса. Особенно после того, как сами разработчики сказали, что подлатают, и теперь уже ничего, наверное, не докажешь — ну да, быть самым умным задним числом — это, наверное, кого-то согревает холодными зимними вечерами.

                      В общем, описание того, что я видел своими глазами — в статье. Вашу версию «точного знания как всё было» вы тоже описали. Можно я пойду?