Після логауту користувача VK можна отримати керування його сторінкою

Вирішив спробувати себе у роботі з API Вконтакте та натрапив на цікаву особливість.

При написанні цієї нотатки жоден користувач ВК не постраждав.

Ви можете допомогти і перевести небагато коштів на розвиток сайту

Коментарі (75):

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

Вони ще й перманентно банять тих, хто не пише їм, а експлуатує та публічно розповсюджує

Погано шукали: hackerone.com/vkcom. Півроку тому отримав $200 за дуже несерйозну вразливість. Правили довго, щоправда.

Як наївний користувач, я вважав, що вікно з описом уразливостей знаходиться на сайті ВК.

Ну начебто це логічно, а взагалі вони виплачують за bug bounty

Більше року висить бага, їм ваще на цю програму.

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

Щоб зробити розлогін для токена вам потрібно використовувати методи API із зазначенням токена, якщо такі там передбачені.

Так як у вас у статті немає жодної детальної інформації про подальший доступ до сторінки користувача, впевнений, що далі базових прав, які ви дали токену при його створенні, ви не отримаєте. Це основний принцип OAuth.

Більше того, неправильно звинувачувати когось у вразливості керування сторінкою після розлогіну, не надавши докладного опису з наведеними доказами і тим більше писати не ним, а публічно. А те, що OAuth створювався навіть для управління - це так.

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

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

Хіба старий токен не повинен інвалідуватись на сервері після логауту?

Чистить де? У браузері, на сервері, у додатку?

У браузері. На сервері також можна інвалідувати попередню сесію — вона вже не знадобиться. Додаток вк не контролює, там все, як є, воно ні чому не завадить - свій токен, живе окремим життям.

Ще раз повторю: при "розлогу" людини в браузері, жоден токен деактивуватися не повинен. Так задуманий OAuth. І саме це логічно. Тому що я хочу розлогитися на ВК, а не на хабрі, наприклад. Давайте подивимося на реалізацію від GitHub: Логін на GitHub. Ідемо на dubblet.com і логінимось через GitHub OAuth. Розлоговуємося в GitHub. Повертаємось у dubblet, створюємо новий документ, зберігаємо його. І дивуємось тому, що в GitHub з'явився новий gist. Хоча ми були розлогі в GitHub!

І що, ви коли в гітхабі логінітеся новим користувачем отримуєте при цьому доступ до даних старого? Ось те й воно!

Загалом, так, я вважаю, що після логіна другого користувача доступ до даних першого має бути припинено. А OAuth чи не OAuth роялі не грає.

Та не важливо виходив він чи не виходив. Що там відбувається з його додатком не важливо. Важливо, що він залогінився в другому користувачі, а отримав дані першого. Ось цього не повинно відбуватися. Але відбувається просто судячи з відповіді техпідтримки (не бага, а фіча). Тобто, вони визнали, що так і відбувається.

Всю процедуру я описав. Що конкретно вас цікавить?

Щодо винуватця — OAuth чи не OAuth — я цього знати не можу. Я просто описав, як виявив баг. Коли я намагався виконати весь цей фокус без участі API, через браузер (Opera) - у мене не вийшло. Але я не виключаю можливості того,що є якийсь спосіб провернути це все без участі API та OAuth. Але й стверджувати можу тільки те, що бачив на власні очі.

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

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

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

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

Відразу згадався анекдот — втрачений пістолет Макарова серії 1234321 вважати недійсним. Тобто. злом за неправильним посиланням вважати недійсним?

Найголовніше, що розробники мені написали і подякували за те, що підказав цей невеликий косячок. Техпідтримка мені написала та вибачилася за те, що проігнорувала моє звернення. Ніхто з них не написав, що я дурень і все придумав.

Але на хабрі є люди, які точно і точно знають, як все було насправді. Вони точно знають, що я дурень і вигадник, і вони вже приготували весь жирний шрифт, щоб вивести мене на чисту воду. Ви з якого цирку, панове? Мене не треба нікуди виводити — я написав те, що бачив, і відійшов у тінь. Жодних лаврів у мене немає. Жодних грошей мені не заплатили. Жодних пропозицій від гугла стати СЕО мені не надійшло. І я ось взагалі не розумію — де й чого тут заздрити? Навіщо приходити та виливати свою жовч фразами «та я вже давно все це знаю, тільки нікому не розповів», «та витут все на оманах вигадали, а я точно знаю, як все було», «Щас я тут напишу свою викривальну статтю, почну її з поливання брудом, а далі відведу душу і зберу всі рейтинги!»

На всі запитання про уточнення я відповів. На ті, звичайно, де було написано, чого не вистачає.

А зараз він уже навіть придумав, що я піст переписав більш ніж повністю. Так, реально відповідь професіонала, що збирається об'єктивно розібратися в поведінці системи.

Закриття безглуздої демагогії я підтримую.

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

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

Що мною відредаговано:

Це і є відредагований більш ніж повністю пост?

«Не зміг докопатися, то хоч піду, грюкнувши дверима»

Так. Це і є. Це єдиний параграф, який хоч щось прояснює.

Це не єдині редагування, але добре, спробуйте прочитати статтю без цього абзацу) Складається враження що виною всьому OAuth і за допомогою програми можна отримати доступ до сторонньої сторінки, що є дуже серйозною вразливістю. Це те, що я зрозумів, прочитавши вранці ваш пост. Але пізніше зміг переконався що справи зовсім інакше.

Але вам, звичайно, видніше, які у мене в пості редагування.

Повідомляв їх про це трохи більше року тому. Відповіли, що цього не може бути і у мене їде дах.

Тому й не пишу їм, обзовуть дурнем і засудять ще (скажутьщо це я зламав). Так, це триває вже не один рік.

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

Можу потеоритезувати. Можливо, у них access_token живе не в сесії, а наприклад в localdb.

А як же "Завершити всі сеанси"? Правда на поточний не спрацює

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

А де Ви знайшли це «стандартне» посилання для виходу?

З кнопки "Вихід" на сайті ВК.

Так… дивно. Може, вже змінили. Посилання точно брав з кнопки Вийти, тільки не пам'ятаю точно з якої сторінки — зі звичайного інтерфейсу користувача або зі сторінки установки програми. Там і зараз відрізняються між собою посилання, але того, яке в мене описано, немає тепер ні там, ні там.