29 мая ВКонтакте торжественно объявили о запуске открытой программы вознаграждений за уязвимости. Это, как и некоторые другие события, побудило меня на написание этой статьи. История началась еще в сентября 2014, когда во время написания мною сервиса, основанного на API социальной сети, я обнаружил уязвимость, которая позволяла узнавать как администратора сообщества, сделавшего пост, так и человека предложившего эту запись.

1. Обнаружение уязвимости


Уязвимость заключалась в методе API newsfeed.get. При выполнении самого обычного запроса к нему, в объекте, среди прочих, возвращался массив из 4-5 пользователей (profiles). Они, судя по документации, должны были являться пользователями из ленты новостей. Однако я никак не мог найти в ленте этих людей, и зачастую в массиве встречался только мой собственный аккаунт.

image

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

То есть, сделав к newsfeed.get запрос для получения последнего поста в ленте новостей, в массиве profiles мне возвращало администратора написавшего и пользователя предложившего как эту запись, так и предыдущие три.

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

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

image

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

После сбора массивов для максимально возможного количества постов, скрипт начинал их анализировать. Для начала находились те пользовательские id, которые встречаются ровно в четырех массивах. Из четырех постов, связанных с этими массивами я находил самый ранний. Этот пост был предложен в сообщество пользователем, чей id мы нашли. Затем эти пользователи отфильтровывались из массивов и мною составлялся список администраторов.
При желании вы можете посмотреть код эксплуатации уязвимости на Github

2. Сообщаем об уязвимости


Являясь сознательным пользователем, после этого я отправился сообщать об уязвимости. Так как открытый баг-трекер я счел не лучшим местом для такого рода уязвимости, я связался сразу напрямую с разработчиками. Первый из разработчиков просто не ответил на мое сообщение, второй ответил спустя 4 дня, поблагодарил и обещал подумать, как это исправить.



Я знал об отсутствии официальной bug bounty программы у ВКонтакте, но также знал, что нередки были случаи поощрения за уязвимости внутренней валютой(голосами), однако решил отложить эти вопросы на момент исправления уязвимости. После этого я стал изредка мониторить уязвимость. Это продолжалось до апреля 2015, когда прочитав очередную статью об уязвимости и вознаграждении, я снова проверил свою уязвимость и она не была исправлена.

Я решил связаться по поводу уязвимости с техподдержкой где, спустя две недели ожидания, мне написали, что код передан разработчикам и меня оповестят, как только появятся новости.

image

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

image

Со мной связались лишь 29 мая, спустя несколько часов после запуска программы вознаграждения за уязвимости, заявив, что раз “уязвимость уже исправлена, то она не подпадает под новую программу и им мне нечего предложить”.

Итоги


  1. Очередная уязвимость в приватности ВКонтакте
  2. Потребовалось 8 месяцев и 3 моих обращения для исправления
  3. Вопросы о вознаграждении игнорировались вплоть до запуска bug bounty программы, после чего мне под ее предлогом было отказано в какой-либо выплате
  4. Техподдержка предпочла длительное игнорирование каким-либо действиям


Автором поста является bleazer, у которого пока нет инвайта Спасибо egor_nullptr за инвайт

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


  1. hormold
    30.05.2015 21:45
    +21

    Подтверждаю. Буквально за сутки до запуска программы мне написали ребята и попросили передать баг — можно было читать комментарии даже на закрытой стене или находясь в черном списке. Например — у Дурова.
    Баг передал, исправили на следующее утро. Ребята даже заметку на HackerOne создали, в поддержку писали. Им никто не заплатил, с ними даже не связались.


    1. brainfucker
      31.05.2015 03:57
      -9

      ребята то, что было прислано на hackerone разбирается, это займет время так как нас завалили кучей осмысленных и не очень сообщений там. Все проблемы с безопасностью будут исправлены, все кто прислал чтолибо стоющее — будут вознаграждены, но не ручаюсь за то что было прислано до открытия программы на hacker one, все таки согласитесь, что сейчас будет сложно отследить кто именно и что именно репортил раньше, особенно учитывая что раньше мы выплачивали вознаграждения только за серьезные уязвимости, такие как xss или csrf.


  1. AndrewShmig
    30.05.2015 21:49
    +6

    А при запроса на newsfeed.get других групп (не той, администратором которой является автор) возвращался список профилей (пользователей предложивших запись и администраторов)?

    Если после публикации на хабре оплатят — сообщите, интересно же.


    1. painjkee
      30.05.2015 21:55
      +9

      Не удивлюсь, что где-нибудь запостят «опровержение», что, мол, все выплачиваем, а вот именно с вами что-то случилось не так


      1. AndrewShmig
        30.05.2015 22:01
        +8

        Скажут, что ранее сообщали о такой уязвимости, а вы второй/пятый/десятый, поэтому вознаграждение получит именно первый человек.


        1. painjkee
          30.05.2015 22:04
          -1

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


          1. AndrewShmig
            30.05.2015 22:07
            +4

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


            Должно ли это снимать все вопросы?


  1. pandas
    30.05.2015 22:10
    +1

    А вы не пробовали просить денег за уязвимости, которые были обнаружены после 29 мая? ВКонтакте платит как раз, просто важно соблюдать-таки условия их «конкурса» ))
    И да, то что уязвимости закрывают неохотно и долго — это бич всех, не только ВК. Но они молодцы хотя бы потому, что таким образом совершенствуются и делают мир лучше. Ага.


    1. Temirkhan
      30.05.2015 22:32
      -1

      А Вы, батенька, оптимист)


      1. pandas
        30.05.2015 22:38
        -6

        оптимист. а юридическое обрезание меня научило читать текст договоров очень прецизионно. и да, ошибку в 4 слове я нарочно допустил ) люблю, знаете ли, шоу this is хорошо )


  1. Lobey
    30.05.2015 22:19
    +15

    Мне кажется абсолютно логичным: перед запуском программы закрыть все старые уязвимости. А создавать гневный пост за то, что программа вознаграждения не имеет обратной силы — глупо же. Как и жаловаться, что вам не дали денег несмотря на то, что и не обещали. Такой заголовок, извините, мог придумать только чудак НТВ+.

    А вот если не дадут денег за баги найденные после запуска программы — соглашусь, что Вконтакте стали мерзавцами.


    1. veveve
      31.05.2015 02:02
      +2

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


      1. AllexIn
        31.05.2015 06:58
        -4

        будут ждать открытия новой программы

        Какой?

        продавать баги на сторону

        А это уже преступление.


        1. VenomBlood
          31.05.2015 07:04
          +4

          А это уже преступление.
          Всегда интересно было — а по какому закону это преступление? Найти баг — не преступление, почему же продать его — преступление?


          1. Borz
            31.05.2015 08:19
            -2

            а по какому закону это преступление?

            УК РФ, статья 272. А в некоторых случаях ещё и 273 или 274 статьи могут инкриминировать.

            ЗЫ: и да, с нахождением багов туда же


            1. VenomBlood
              31.05.2015 08:27
              +3

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

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


              1. Borz
                31.05.2015 08:35
                -1

                я говорю знаю и продаю информацию

                и тут же повторно (в первый раз, когда «создали» информацию о воспроизведении бага) попадаете под 273 статью

                Тут или сам поиск бага и отправка баг-репорта уже преступление

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


                1. VenomBlood
                  31.05.2015 08:44
                  +1

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


  1. DexterHD
    30.05.2015 22:38
    +6

    Какие там условия программы?

    … Мы крайне негативно относимся к эксплуатации найденных уязвимостей против наших пользователей, что означает полный отказ в выплате награды за нее.

    Ну вы поняли…


    1. Anton-K
      31.05.2015 00:36
      +3

      При желании можно любую демонстрацию наличия уязвимости назвать «эксплуатацией против пользователей».


  1. DimmoNz
    30.05.2015 22:50
    +34

    Кому надо денег, продавайте уязвимости в даркнете.