История одного виджета

в 12:21, , рубрики: Вконтакте, информационная безопасность, социальные сети, метки: ,

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

Интро

Вконтакте — отличный пример сервиса, для людей, в котором: и качественный код, и отличный саппорт. Однако, его минусом являются побочные проекты.

Так был закрыт xmpp протокол, выпилены: виджеты групп, площадка объявлений, апи магазинов и многое другое. Эта история об одной интересной уязвимости виджета Вконтакте, который смог.

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

Основная часть

Так как меня интересовала логика запроса и возможность изменить его под свои нужды, вооружившись tamper data, схукал передаваемый на сервер запрос:
История одного виджета
Виджет = фрейм, дабы не создавать себе лишних преград, было решено действовать без посредника, благо ВК это позволяет. Для этого берем строку реферера, в чистом виде, без лишних параметров (высота, ширина и т.д.), она представляет собой:

http://vk.com/widget_comments.php?app=APPID&_ver=1&page=0&status_publish=1&attach=*&url=http%3A%2F%2Fsite.ru%2F&title=&description=&image= 

При работе напрямую сохраняется функционал отправки комментариев, но, к сожалению, прикрепления загружаться отказываются.

Опытным путем устанавливаем, что в таком виде виджет более не привязан к сайту, на котором был размещен (любой тип виджета требует «подключить» сайт к системе, если appid не соответствует домену, то виджет не будет отображен), и самое интересное заключается в том, что за ссылку отвечает параметр url в аттаче. Нет, это логично, но только относительно прикрепленной ссылки.

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

vk.com/widget_comments.php?app=APPID&_ver=1&page=0&status_publish=1&attach=*&url=http%3A%2F%2Fm.habrahabr.ru%2F&title=habrahabr.ru&description=Привет!&image=XXXX_XXXX 

Где image = XXXXX_XXXXX из photoXXXXX_XXXXX, который находится в url любой фотки ВК.
Пишем произвольный комментарий (с флагом «отобразить на вашей странице) и публикуем. Получаем на стену
История одного виджета

Я уже упомянул, что любой виджет прикручивается к сайту и если открыть его, минуя фрейм, это условие обходится, но так же обходится невозможность воткнуть вместо своего домена, домен vk.com. Проведя манипуляции над исходной ссылкой, мы можем очень просто сослаться на страницу любого пользователя и оставить комментарий, якобы, на его стене. Практической пользы, естественно, никакой, но как один из вариантов использования — СИ.
История одного виджета

Заключение

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

Автор: hMartin

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js