![](https://habrastorage.org/files/1fd/b2e/f95/1fdb2ef95d674795a46390441b72de11.png)
Не отрицая факт наличия простых критический уязвимостей и по сей день, что подтверждается на практике, хотел бы рассказать об одном интересном и в тоже время простом логическом баге в социальной сети VK.com.
Наверняка всем, кому это хоть как-то интересно, давно известно, что ВКонтакте запустила свою программу вознаграждения за уязвимости на базе Hackerone. Торжественно объявив об этом на хабре, социальная сеть по всей видимости получила то, о чём все знают, но по каким-то причинам забывают. Имею в виду хабраэффект. Иначе не могу объяснить неприлично долгого ожидания ответа по моему репорту. Если быть более или менее точным, то время ожидания на текущий момент составляет больше полугода. Являясь терпеливым по натуре человеком, я особо не доставал команду VK, как это делают многие нетерпеливые ресёрчеры. Предоставляю таймлайн для наглядности:
31.05.15 Отправлен репорт.
9.06.15 Присвоен статус «Triaged».
21.07.15 Спрашиваю как обстоят дела.
8.09.15 Интересуюсь о времени рассмотрения.
30.09.15 Посылаю ping.
6.11.15 Еще раз напоминаю о последствиях баги. Заявляю о снятии с себя ответственности.
17.12.15 Ещё один ping.
23.12.15 Извещаю о написании статьи на хабр.
Как можно заметить, кроме изменения статуса репорта с сообщением «Спасибо. Мы исследуем проблему и напишем вам.» никаких действий со стороны ВКонтакте не последовало. Несомненно, приватность фоток, XSS и любые другие виды атак на пользователей, важнее багов затрагивающий бюджет социальной сети. Поэтому я терпеливо ждал своей очереди. Но переодически наблюдая за открытой активностью в программе VK.com, я понял, что на мой репорт забили по каким-то причинам и ответа я так и не дождусь. Поэтому, выждав адекватное количество времени для реагирования на инцидент, решил поделиться с вами своей интересной находкой.
Описание бага, стоит начать с того, что он, по моим предположениям, существует с момента появления таргетированной рекламы по модели CPC в vkontakte.ru. Неизвесто сколько денег ВКонтакте потерял «благодаря» этой оплошности. Так вот, решив как-то раз стать крутым арбитражником, довольно длительное врямя проводил в рекламном разделе, что и столкнуло меня с этим упущением программистов ВК.
Выяснилось, что при совокупности некоторых действий, существует возможность не платить за клик по рекламе. Означает это то, что вы можете сливать неограниченные бюджеты заплатив при этом 100 рублей, и те нужны только для того, чтобы войти в минимальные пороги системы. Теперь, к подробностям, привожу содержание своего репорта отправленного 31 мая:
Здравствуйте. В Таргетинге по модели CPC имеется, на мой взгляд, серьёзный баг позволяющий крутить рекламу, с любой стоимостью клика, безлимитно и почти бесплатно. Для POC понадобится:
— Создать любую рекламную кампанию с оплатой CPC.
— Установить для неё лимит в 100 рублей, т.к. меньше нельзя.
— Потратить в ней 100 р., для достижения минимального лимита.
— Теперь можно выставить любую стоимость клика от 0,5 до 100. Возьмём, к примеру — 10 руб.
— Установить лимит в 110 р.
— Запустить кампанию.
— Обновлять страницу кампании до изменения статуса с «Запускается» на «Запущено».
— Уменьшить лимит до 100 р.
Далее, в статистике, будут отображаться показы и охват, всё как обычно. После того как произойдёт клик, кампания остановится и этот клик не отобразится в статистике. Деньги при этом не спишутся! Хотя пользователь будет успешно перенаправлен на рекламируемую страницу. Это можно наблюдать в логах сервера, куда будет перенаправлен пользователь.
В итоге безлимитный таргетинг обходится — 100 рублей на кампанию. При всём этом, в несколько строк кода, процесс можно успешно автоматизировать и распараллелить на нескольких аккаунтах.
Не берусь оценивать, так как понятия не имею об архитектуре системы, но очень похоже на логический баг. О серьёзности судить вам :)
Надеюсь, репорт был полезен для вас.
На текущее время 28.12.15 18:15 по Москве, фишка полностью функциональна и доступна для использования. Скриншотов и видео пояснений публиковать не буду, так как не сохранял ничего и считаю, что ответственный человек сразу поймёт о чём идёт речь. И воспроизвести последовательность по описанию не составит труда.
Возможно, я в каком-то роде преувеличил значимость этой ошибки и это не так важно. Но я всё ещё надеюсь, что репорт будет полезен для них. И это прочтут люди ответственные не за вопросы безопасности, которые не придали накакого, хотя бы малейшего, интереса, а те кто заведует материальными делами компании.
Для меня же, эта статья служит лишним поводом напомнить людям начинающим, коим являюсь, и тем кто планирует заниматся ресёрчем багов. Что не обязательно уметь находить сложные цепочки для выполнения кода при десериализации объектов. Не всегда нужно изучать тонны спеков и мануалов. Многие интересные, а зачастую критические баги лежат на поверхности, стоит лишь попробовать использовать предоставленный функционал немного не стандартно.
Спасибо, что уделили время на прочтение этого небольшого крика души. Всем благ и вкусных багов!
P.S. Ни в коем случае не пытайтесь повторить описанные действия. Использование этого материала в личных целях может преследоваться по закону!
P.P.S. На следующий день после публикации (29.12.15), баг закрыли со статусом «Duplicate». Никаких разъяснений не последовало.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Критична ли бага по вашему мнению?
81.1% Да2274
27.03% Нет758
Проголосовали 2804 пользователя. Воздержались 1205 пользователей.