Уязвимость ВКонтакте: отправляем сообщение с кодом восстановления страницы на чужой номер



Обычным весенним днем, занимаясь «подготовкой» к ЕГЭ по информатике, наткнулся на статью об уязвимости Facebook, позволявшей взломать все аккаунты в социальной сети, за которую выплатили 15000$. Суть уязвимости заключалась в переборе кодов восстановления на тестовом домене компании. Я подумал, а чем собственно ВКонтакте хуже? И решил попробовать провернуть подобный трюк у них. Зная, что веб-версия уже достаточно хорошо исследована, жертвой должен был стать Android клиент, а что из этого вышло можно прочитать под катом.

Смотрим трафик


Первым делом я захотел узнать, какую информацию приложение передает в сеть во время процесса восстановления страницы. Помощником в этом деле выступил Fiddler, я настроил его и Android устройство, как написано в официальной документации. Таким образом в Fiddler становятся доступны все HTTP/HTTPS запросы c устройства. Теперь, в приложении, смело выходим из аккаунта ВКонтакте и нажимаем на кнопку «Забыли пароль?». После ввода номера телефона приложение отправляет 2 HTTPS запроса. Особую ценность представляет второй, потому что именно он отвечает за отправку SMS с кодом восстановления.



Особое внимание стоит обратить на некоторые параметры запроса:
phone — номер на который отправляется SMS
session_id — рандомно генерирующаяся сессия операции восстановления
Попытка отправить запрос изменив его не увенчалась успехом. Мешает параметр «signature», который выступает в роли «подписи», как она генерируется разберемся немного позже.

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



Честно говоря на этом моменте мне хотелось начать перебирать коды восстановления, меняя значение параметра «code». К сожалению, и этот запрос защищен от изменения с помощью «signature». Придётся разобраться, как генерируется эта подпись.

Реверс инжиниринг: декомпиляция


Для первоначального анализа можно попробовать декомпилировать приложение ВКонтакте. Так можно получить некоторые части исходного кода на Java.

Как это сделать
1. Загрузить и распаковать dex2jar и jd-gui
2. Открыть apk приложения, как обычный архив, и «перетащить» .dex файлы на d2j-dex2jar.bat

Открываем в jd-gui все полученные .jar файлы. И не долго думая, делаем поиск по строке «signature».



Библиотека libverify за авторством Mail.Ru явно выпадает из общего списка найденного. Смотрим и не ошибаемся, формируемая строка очень похожа на url из предыдущих запросов.

localObject3 = String.format(Locale.US, "%s%s?%s&signature=%s", new Object[] { d(), e(), localObject3, URLEncoder.encode(ru.mail.libverify.utils.m.b(f() + (String)localObject4 + ru.mail.libverify.utils.m.c(a.b())), "UTF-8") });

Эта библиотека сделана в лучших традициях security through obscurity, весь код надежно обфусцирован. Поэтому, через jd-gui мне удалось узнать только то, что за «signature» прячется MD5-хэш от неизвестной строки.



Реверс инжиниринг: дизассемблирование


Мне требовалось узнать, что за строка поступает в функцию ru.mail.libverify.utils.m.b(). Самый простой способ сделать это — немного изменить код приложения. Ну что ж попробуем. Для начала используем apktool, с командой:

apktool.jar d vk.apk -r
(ключ -r для игнорирования ресурсов)

Теперь, в папках с smali-кодом находим файл в котором происходит генерация MD5. В моем случае путь был такой: smali_classes3\ru\mail\libverify\utils\m.smali. Переходим к нужному методу:

...
.method public static b(Ljava/lang/String;)Ljava/lang/String;
    .locals 8
    .param p0    # Ljava/lang/String;
        .annotation build Landroid/support/annotation/NonNull;
        .end annotation
    .end param

    :try_start_0
    const-string/jumbo v0, "UTF-8"

    invoke-virtual {p0, v0}, Ljava/lang/String;->getBytes(Ljava/lang/String;)[B
    :try_end_0
    .catch Ljava/io/UnsupportedEncodingException; {:try_start_0 .. :try_end_0} :catch_2

    move-result-object v0

    :try_start_1
    const-string/jumbo v1, "MD5"

    invoke-static {v1}, Ljava/security/MessageDigest;->getInstance(Ljava/lang/String;)Ljava/security/MessageDigest;

    move-result-object v1

    invoke-virtual {v1}, Ljava/security/MessageDigest;->reset()V

    invoke-virtual {v1, v0}, Ljava/security/MessageDigest;->update([B)V

    invoke-virtual {v1}, Ljava/security/MessageDigest;->digest()[B

    move-result-object v0
    ...

Строка, которую требовалось узнать передавалась в функцию в первом параметр-регистре (p0). Поэтому, чтобы получить ее, следует куда-нибудь вывести параметр, например, в Logcat. Добавляем в код несколько строк:

...
.method public static b(Ljava/lang/String;)Ljava/lang/String;
    .locals 8
    .param p0    # Ljava/lang/String;
        .annotation build Landroid/support/annotation/NonNull;
        .end annotation
    .end param

    # PATCH
    # String v0 = "vk-research";
    const-string/jumbo v0, "vk-research"
    # Log.d(v0, p0), где p0 параметр метода
    invoke-static {v0, p0}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

    :try_start_0
    const-string/jumbo v0, "UTF-8"
    ...

После сохранения изменений собираем приложение с помощью apktool:

apktool.jar b vk -o newvk.apk

Теперь нужно подписать apk, я использовалAPK Signer.

После этого, предварительно удалив оригинальное приложение, можно установить и запустить наш измененный клиент ВКонтакте. Для получения logcat с устройства воспользуемся Android Debug Bridge. Подключаем Android-устройство по USB и последовательно выполняем команды:

adb devices
adb logcat

Как только присоединились к устройству и получили возможность смотреть логи, снова нажимаем на «Забыли пароль?» и вводим номер телефона. В окне adb появляется запись:



Становится понятно, что хэшируемая строка состоит из последовательно склеенных: части url, параметров запроса и еще одной строки-хэша (506e786f377863526a7558536c644968). И теперь, зная алгоритм генерации «signature» можем начать отправлять свои «подписанные» запросы.

Исследование


Для исследования я написал простую программу на C#, которая отправляла запрос на отправку SMS и делала попытки ввода кода. Воспользовавшись ей, я вводил случайные коды восстановления. Но ожидаемо уперся в лимит попыток:



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



Решил отправлять запросы с разными session_id, приходили смс с другими кодами восстановления, но я все еще упирался в лимит, теперь уже не в «ATTEMPTLIMIT», а в «RATELIMIT».



Про bruteforce
Наблюдая за приходящими SMS я заметил некоторую общую особенность кодов. Код восстановления состоял из 4 цифр (на момент написание статьи увеличили да 6) и одинаковые цифры не находились рядом. То есть всего ~6500 возможных вариантов кодов. Я подумал, что вполне возможно за 5 попыток угадать код, так например делали в Facebook. Но потом все же отложил эту затею.

Я пытался обойти лимиты всеми возможными способами. Менял IP-адреса, параметры запроса, номера телефонов, но сделать больше 5 попыток ввода кода у меня не получалось.

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


Из-за прокси нужна дополнительная проверка.

Таким образом получалась атака:

  1. Отправляем запрос на отправку SMS абоненту A с session_id C, ему приходит код 1234
  2. Отправляем запрос на отправку SMS абоненту B с session_id C, ему приходит код 1234
  3. Теперь, если абонент A знает номер телефона абонента B, он может восстановить его страницу. Восстанавливать можно было только ту страницу, на номер которой пришла последняя SMS с сходным session_id.

Вывод


Сразу после обнаружения уязвимости я написал репорт на HackerOne. Уже через 17 часов уязвимость была устранена. Спустя несколько дней мне выплатили 2000$. Данная уязвимость позволяла взломать большинство аккаунтов в социальной сети, в безопасности были только аккаунты с двухфакторной авторизацией (у них нельзя делать восстановление по номеру телефона). Репорт.

P.S. ЕГЭ по информатике сдал на 97 баллов. К сожалению, остальные предметы не так успешно.

UPD: Библиотека libverify так же использовалась в ICQ, следовательно уязвимость существовала и там. В программе bug-bounty ICQ мне была сделана доплата в размере 1000$.Репорт.
Метки:
Поделиться публикацией
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама
Комментарии 144
  • +1
    Данная уязвимость позволяла взломать большинство аккаунтов в социальной сети, в безопасности были только аккаунты с двухфакторной авторизацией (у них нельзя делать восстановление по номеру телефона).

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

    • +6
      Согласен, случайную страницу таким образом не взломать. Но все же при взломах есть некоторая информация о жертвах, можно, например, попробовать применить социальную инженерию.
    • 0
      Эта библиотека сделана в лучших традициях security through obscurity, весь код надежно обфусцирован.

      OMG… кто-то ещё такое использует в наши дни. Чего ради??? Чтобы потом это сломал школьник и VK с Mail.ru стало стыдно?

      • +20
        Вы так говорите «школьник», как будто школьники — идиоты.
        • +13

          С чего Вы это взяли?


          Я говорю "школьник" потому, что судя по упоминанию ЕГЭ в статье это сделал именно школьник. И какими бы умными не были школьники, квалификация людей профессионально занимающихся безопасностью обычно намного выше. Так что мой вопрос вполне уместен — если эта "защита" не в состоянии сдержать школьника, то хакера она тем более не сдержит — и зачем она тогда нужна вообще? Все остальные и так не будут пытаться подделывать HTTP-запросы.


          Проблема в том, что от такой реализации "безопасности" больше вреда, чем пользы: на самом деле она ни от чего не защищает, но создаёт у разработчиков ложное чувство безопасности — якобы параметрам запроса можно доверять, раз они корректно подписаны. А доверять им, разумеется, нельзя, и код будет намного безопаснее, если об этом никто из разработчиков не будет забывать ни на секунду.

          • +3
            Школьник вполне может быть квалифицированным специалистом. Хакером.
            Это в начальных классах еще дети, в старших — вполне уже личности и специалисты.
            • +1

              Может, конечно. Я сам таким был. Но суть вопроса ведь не в этом. Всё описанное в статье по сложности реализации доступно и понятно начинающим разработчикам под андроид. Добавляем к этому желание взломать и хакерский склад ума — и всё, "защита" моментально обходится. Если начинающий разработчик может обойти эту защиту — зачем её вообще делали? Против кого, собственно? Где целевая аудитория хакеров, которые хотят это сломать, но не смогут этого сделать из-за недостатка квалификации/времени/средств? Кто и для чего придумывает глупости вроде этой "подписи" параметров HTTP, выполняемой кодом на клиенте, который контролирует хакер? Я бы ещё понял, если бы они этот код вынесли в C-шную библиотеку набитую антиотладочными приёмами — тоже не сильно поможет, но было бы видно, что они хотя бы пытались поднять планку требуемой квалификации для взлома. А в текущем виде это просто профанация.

              • 0
                Имхо, такими вещами должен заниматься исключительно сервер, причем код восстановления ну никак не должен быть детерминированным.
              • НЛО прилетело и опубликовало эту надпись здесь
                • +3
                  Вы либо не понимаете термин скрипт-кидди, либо намеренно принижаете заслуги парня.
                  • НЛО прилетело и опубликовало эту надпись здесь
                    • +3
                      ТС очевидно не искал систему с конкретной уязвимостью, чтобы её «по шаблону взломать»(он не перебирал сервисы в поисказ уязвимости, а взял один конкретный для проверки).
                      Даже отсылка к Facebook не будет актуальной, потому что там совсем другая уязвимость и он её в ВК не нашел. Он нашел в ВК совсем другую уязвимость, уникальную, которую сам и разобрал. ПРи этом четко понимания что и зачем делает.

                      Где тут хоть один пункт совпадения с той огромной цитатой, что вы привели?
                      • НЛО прилетело и опубликовало эту надпись здесь
                        • +2
                          Перебор — признак скрипт-кидди. Потому что не видит возможностей, а тупо перепибарает варианты, как раз.
                          Здесь перебора нет. Попробовал одну уязвимость, в процессе увидел другую.
                          • НЛО прилетело и опубликовало эту надпись здесь
                            • +4
                              Открою секрет: между Pro и script-kiddie есть градации.
                              • НЛО прилетело и опубликовало эту надпись здесь
                                • +6
                                  Верно, фарс — прекрасное определение для высказываний вида «профессионал в отличии от скрипт кидди — тупо перебирает уязвимости»
                                  Удачи!
                                  • НЛО прилетело и опубликовало эту надпись здесь
                                    • +1
                                      Как почту ломанете — приходите.
                                      А собрать открытую информацию — много ума не надо. Это никак не показывает ваш уровень навыков. ;)
                                      Тем более ладно бы ломали человека, который пытаеться анонимность изображать. Я не изображаю и никогда о себе ничего не скрывал, о мой бог, как много вы обо мне знаете. :))))

                                      UPD: Ну или хотя бы сайт, который висит на деромохостинге и весь дырявый, даже https нет. лол. Справитесь?
                                      • НЛО прилетело и опубликовало эту надпись здесь
                                        • 0
                                          Вот только проблема в том, что вы откопали древний сайт, который не обновляет сколько… Не знаю точно, лет 5 думаю как минимум. А скорее всего даже и больше. Лол.

                                          Запустить вашу демку я конечно соглашусь. Поэтому у меня песочницы под qemu. Винда с UE не имеет доступа ни к каким из моих аккаунтов. Ну так уж повелось, что не верю я винде с тех пор как десятка вышла. ;)

                                          Подсудного дела нет. Я вам официально разрешаю сломать сайт. Как я уже сказал — это персональная страничка давно протухшая. Велкам.
                                          Её дефейс будет для всех здесь прекрасным доказательством вашей правоты. Вы же здесь для этого? Обосновать свою позицию. Вот и попробуйте.
                                          • НЛО прилетело и опубликовало эту надпись здесь
                                            • 0
                                              Мне не 13 чтобы кому то что то доказывать.

                                              Ну вы ж не поленились потратить некоторое время чтобы в гугле посмотреть результаты по запросу с моей почтой? :)
                                              Это уже говорит о том, что доказывать вам есть что. Не противореьте сами себе, этож палево.

                                              Мне и не нужны ваши аккаунты, я бы просто зашифровал вам диск.

                                              Это бы вам ничего не дало, во первых хрен бы вы чего зашифровали. :)
                                              Во вторых — у меня быкапы на защищенном от постороннего доступа сервере. :))

                                              Судя по вашей безалаберности в сети.

                                              Слушайте, ну воспользуйтесь хоть одним пунктом по безалаберности в сети? По вашему я дырявый идиот, ломаться должен за меньшее время, чем «граф на 2000 вершин» составлять. ;)

                                              Вы вообще не следите за безопасностью в своей системе.

                                              Бла-бла-бла

                                              Хорошо что хоть аккаунт в avast есть.

                                              Не, я не пользуюсь антивирусами. Лет уже так 10.

                                              Вот сайт который я делал четыре года назад.
                                              Можете смело делать что предлагали мне Велкам!

                                              Я разработчик игр, что вы мне предлагаете. :))

                                              Хотя боюсь вас посадят, несмотря на Велкам.

                                              Значит вы все таки боитесь, что я на вас настучу.
                                              Давайте я вам официальную бумажку с подписью и печатью дам, где разрешаю меня сломать? Естественно без причинения ущерба.
                                              • 0
                                                Отдельно весьма показатель, что не вы нашли второй сервер. Причем его данные тоже в свободном доступе и лежат на виду. Вы даж открытую инфу халтурно смотрели. :(
                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                  • 0
                                                    О господи, конечно я не знаю инструментов для взлома веба. :)
                                                    Я вообще вебом никогда не занимался.
                                                    И информационной безопасностью тоже.
                                                    Хакерство(открою секрет), бывает не только в вебе. ;) Конкретно в моём случае — это локализация и реверс игровых архивов.
                                                    Чтож, оценка за ваш анализ — двоечка.

                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                      • +1
                                                        Что происходит? Почему ты говоришь сам с собой?
                                                        • 0
                                                          Занятно, не ожидал что его «я щас администрации нажалуюсь, чтобы они удалили мои сообщения, где я так позорно сливаюсь» реально сработает.
                    • +1
                      Завидуешь, что он получил 3 килобакса?
                      • НЛО прилетело и опубликовало эту надпись здесь
                        • +1
                          Откуда мне знать, насколько они для тебя ощутимы
                          • НЛО прилетело и опубликовало эту надпись здесь
                            • 0
                              Это НЛО такое странное… Почему оно удалило этот комментарий, который написал пользователь ниже?
                              Тогда зачем интересуешься?

                              Хотя видимо ты ждешь ответа с числами, ок.
                              Моя зарплата 3200$ в месяц.
                              Мне придется работать почти весь месяц по 5 дней в неделю по 8 часов.
                              Но все равно не настолько чтобы кому то завидовать.

                              Я рад что у нас есть такие таланты, побольше бы таких.

                              Серьёзно, что он написал такого, матов не было, чего-то запрещённого законом РФ тоже…
                              И да, отвечу тому парню: я вообще-то даже не спрашивал, какая у тебя зарплата…
                              • 0
                                НЛО удалило сообщения не за нарушение. А по просьбе самого автора всех этих сообщений.
                                • 0
                                  0_о А что так можно было?
                                  • 0
                                    Все что делаю обсуждаю нашу беседу в телеграм с друзьями безопасниками.
                                    И веселю их степенью вашего маразма.

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

                                    Кстати, вся переписку у меня сохранена.
                                    Как думаете, куда выложить?
                                    Очевидно вне юрисдикции РФ, чтобы комрад опять свой позор не потребовал удалять.
                  • 0

                    Лучше посмотреть на это с другой стороны:
                    1) уменьшения безопасности конкретно вся эта обфускация и "подписывание" запросов не создаёт
                    2) разумные разработчики понимают, что всё, что сформировано на клиенте, не является доверенным и подлежит проверке — поэтому их это не запутает
                    3) небольшой препон к реверсу библиотеки и протокола это создаст
                    итого — вреда нет, польза, пусть и маленькая, есть, почему бы не сделать, раз есть такая возможность, причём почти бесплатная?

                    • +2

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


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

                  • 0

                    Школьники — нет, а вот...

                    • 0
                      А вот и кулхацкеры подъехали.
                    • 0
                      Мне кажется в такой библиотеке это довольно логичный ход. Кто знает, возможно, именно это и спасло от обнаружения уязвимости настоящими хакерами.
                      • +1
                        Скорее всего код не был обфусцирован. Это же декомпиляция. Для получения реальных имён переменных разработчик должен специально включить отладочный режим. Если же была включена какая-то дополнительная оптимизация, то код будет выглядеть ничуть не лучше обфусцированного.
                        • 0
                          Компилятор же не убирает реальные имена методов при компиляции. Даже при релиз сброке. Иначе как тогда reflection будет работать.
                      • 0
                        Сорри, не туда.
                        • +2

                          Куда поступать планируешь?)

                          • +3
                            Собираюсь использовать принцип «куда возьмут». Все же профильную математику я хорошо завалил и получил всего 60 баллов. Поэтому, скорее всего, Лэти, СПБГУТ, Военмех, Горный.
                            • 0

                              Не понял, а 97 баллов за что, за "базу"?
                              Общая сумма с учетом Информатики какая?
                              На счет вуза сильно не переживай, если захочешь учится то везде сможешь стать спецом.
                              Кроме вузов есть еще и Академия современного программирования, она тоже не плохо поможет.

                              • 0
                                Да я особо не волнуюсь. 97 баллов за ЕГЭ по информатике, это уже тестовые баллы.
                              • –23

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

                                • +19
                                  А я вот жалею что свалил с 1 курса.
                                  Стартап за 10 лет так и не смог построить, потому что разрпаботчик, а не бизнесмен, а карьеру строить и трактор снаряжать — отсутствие образования мешает.
                                  • –1
                                    а карьеру строить и трактор снаряжать

                                    Чтоб трактор заводить, образование не обязательно, желательно, но не обязательно, по крайней мере не во всех странах.
                                  • +11

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


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


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


                                    А, ну и хороший не заборостроительный — это ещё и социальные связи, что полезно.

                                    • +5

                                      Теоретически все оно так, но, например, не все могут запустить стартап. А при приеме на работу и во многих других ситуациях прежде всего смотрят на бумажку. Ну, так устроены люди. Им обязательно нужна какая-то простая метрика, по которой можно сравнивать кандидатов и людей вообще. Особенно умиляют кадры, которые хвастаются 2-3 образованиями. А с первого раза не дошло что-ли?


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

                                      • –7

                                        Пять лет опыта при приеме нормальную компанию дают больше шансов чем корочка. Сегодняшние воротилы начиная с Билла Гейтса — почти все забили на учебу. Вылетел из универа -> добился успеха, это на столько частая формула наблюдаемая на практике, что я даже и не знаю как нужно смотреть на мир чтобы ее не заметить, особенно в ИТ. В общем конечно каждому самому решать и все такое. Но те кто закончил за редким исключением будут говорить или учиться, потому что не признавать же себя неудачниками слившими молодость. Она один раз бывает, а жизнь и так коротка.

                                        • +5

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


                                          Есть преимущества и недостатки и у того и у другого. Кроме того, учиться — это не равноценно прожиганию времени. Можно и знания получить, и связи, и полноценно жить в это время.

                                          • +1
                                            Ну, я работаю за границей без диплома. Меня вообще ни разу не спросили про какие-то бумажки. На поиск работы это ни как не сказывается, если только не пытаться в какой-нить Газпром устроиться. Рядом со мной работают ребята из мгу, зря время потеряли. Наши вузы за границей не котируются от слова совсем. :) и связи, полученные в России, тоже никому не нужны, как мне тут подсказал один копетан. Имеет значение знания предметной области, профиль на гитхабе и адекватность во время интервью. Все. Как говорил Рик, «умному человеку делать в школе нечего».
                                          • +15
                                            Вылетел из универа -> добился успеха, это на столько частая формула наблюдаемая на практике, что я даже и не знаю как нужно смотреть на мир чтобы ее не заметить, особенно в ИТ.

                                            Типичная ошибка выжившего. Вы просто не замечаете, что существует гораздо большее число вылетевших / не поступивших, и ничего серьёзного не добившихся.
                                            • 0
                                              Ну мой совет относится к человеку, у которого явно есть талант, предрасположенность. Обычному работяге без способностей, коих большинство, идти по накатанной конечно будет проще. Таланту же это смерти подобно.
                                            • +3
                                              Да только вылетали и уходили они из Гарворда и и еще чего-то там, но никак не из какого-нибудь захудалого института, да и всегда надо иметь парашют на всякий, вот не выгорит стартап или вообще не запустится и что дальше? Либо на завод, либо учится, да и не что не мешает при нормальных мозгах, учится и развивать какой-нибудь стартап.
                                              • +1
                                                «Сегодняшние воротилы начиная с Билла Гейтса — почти все забили на учебу. Вылетел из универа -> добился успеха,»

                                                Единственное что, подобные воротилы — сперва добились успеха, а потом уже частично забили на учебу из-за недостатка времени. Причем подавляющее большинство из них угрохали все свое «незамутненное детство» на то, чтобы освоить какие-то технологии (а не на дотку и танчики) причем на таком уровне, что уже учась в универе смогли создать бизнес, дающим им бОльшие перспективы, чем корочка.

                                                Опять же, сравните требования к разработчику в 90-е и сейчас — в последнее время я все чаще и чаще даже на простых проектах наблюдаю необходимость в вузовской математике.
                                                • –3
                                                  За 20 лет ни разу не было необходимости что-то сложнее второго класса использовать. Вы точно программистом работаете а не математиком?
                                                  • +1
                                                    В проектах, где я был или принимал участие

                                                    1) разрабатывали систему активного шумоподавления для телевизоров. Я вообще не врубался о чем говорили товарищи про матрицы, частоты, волны, разбор это все по фурье и так далее.
                                                    2) Вы проходили во втором классе сложность алгоритмов? Можете сходу сказать сложность алгоритма обычной пузырьковой сортировки, и объяснить ее второкласснику?
                                                    3) Битовые операции, and/or/xor/not, и циклические сдвиги — это в принципе можно попробовать пояснить. Но вот когда начинаешь использовать это на практике для работы с графикой (банального отрисовывания спрайтов поверх других спрайтов) — мне школьного образования и интуитивного понимания не хватило, пришлось почитывать отдельно.
                                                    4) Принципы работы ssh-ключей на достаточном уровне, чтобы вообще понимать как оно работает? Как и почему работает https, что именно содержится в ключах и сертификатах?

                                                    Это только за минуту накидал из личной практики.

                                                    P.S. А я ведь даже не программист, а девопс. Просто приходится немного bash/java/c++/python/php/js ковырять на базовом уровне.
                                                    • 0
                                                      Какое отношение все это имеет к математике? Кроме матриц, для работы с которыми все библиотеки давно написаны математиками? Mathematicians do math, engineers use math.
                                                    • +2
                                                      За 20 лет ни разу не было необходимости что-то сложнее второго класса использовать

                                                      Не знаю, как можно работать со всякими OpenGL и при этом не знать аналитическую геометрию.
                                                      • –4
                                                        OpenGL со всей геометрией выражается при помощи системы уравнений. Синусы хоть и проходят в седьмом классе, это просто соотношение сторон, что есть второй класс. Помню даже статью писал пятнадцать лет назад в духе «скелетная анимация это просто».
                                                        • +2
                                                          OpenGL со всей геометрией выражается при помощи системы уравнений. Синусы хоть и проходят в седьмом классе, это просто соотношение сторон, что есть второй класс.

                                                          Мне кажется, что вы — гений (непризнанный)
                                                          • 0
                                                            Почему не признаный? Если верить словам господина(а других источников у нас нет) — он очень ценный и успешный сотрудник.
                                                            • 0
                                                              Просто наткнулся тогда на исходники анрил торнамента, все кредитсы — Тиму Свини. А вот исходники квейка я так и ниасилил, слишком сложно оказалось, так что не нужно вот этого сарказма.
                                                        • +4
                                                          А чем вы занимаетесь?
                                                          Я вот в геймдеве работаю, математики тоннами. Причем сейчас я работаю с UNreal Engine, казалось бы — там вся математика уже написано. А вот фиг, всё равно приходится много математики использовать.
                                                          Ок. Не геймдев.

                                                          Делал платежный терминал… Контрольную сумму чтобы посчитать — надо полиномы знать!
                                                          Ок. Можно использовать готовую формулу. Формулы для расчета контрольных сумм всегда есть в документации к API.
                                                          Но:
                                                          1) Много стоит специалист, который работает с чужим кодом как с черным ящиком? Вот вы говорите, что норм так работается. А вот я таких людей специалистами не считаю.
                                                          2) Если что-то пойдет не так, не зная как строится таже примитивная контрольная сумма — по логу ошибку понять сложнее.
                                                          • –3
                                                            Да я даже вики не буду открывать чтобы узнать что такое ваши полиномы. И да, я как специалист стою не мало. По зп всегда в топ 10%. И говнокод за мной никому не приходится переписывать, а совсем наоборот. Вот такая она реальность с другой стороны. Потому что важно не знать много, а уметь быстро учиться тому что нужно сейчас для решения конкретной задачи, чему в вузах не учат не смотря на громкие заявления.
                                                            • –1
                                                              Занимаюсь андроид разработкой, а геймдев, бухгалтерия, системное, бакенд, бд — в прошлом. Про математику в геймдеве я выше отписался. Ее было много, но она простая. В движках ее усложняют, но Тим Свини реализовал матрицы через три вектора, не знаю как сейчас, давно не смотрел в исходники анрил енжайна.
                                                              • 0
                                                                Ну вы либо действительно непризнанный гений, либо много фантазируете о собственных успехах.
                                                                Впрочем разницы нет, ваши советы все равно непригодны, в первом случае — потому что гении и так знают как им поступать, а во втором случае- потому что ценность нулевая.
                                                                • –2
                                                                  Мой совет может оказаться пригодным тому кому я его давал — т.е. школьнику, сломавшему пентагон.
                                                                • 0
                                                                  а геймдев, бухгалтерия, системное, бакенд, бд — в прошлом

                                                                  лол
                                                                  Даже комментировать не буду
                                                                  В движках ее усложняют

                                                                  лол x2
                                                                  Никто её намеренно не усложняет, разве что для эффективности.

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

                                                              Вообще говоря, её можно и самому изучить при достаточном желании.
                                                        • 0
                                                          Абсолютно согласен с написанным про лучшие годы. Себя образовывать надо самостоятельно, и с умом, развивая те скиллы, которые тебе интересны, и в которых ты можешь добиться успеха. А те, кто пропагандируют образование по устаревшим учебникам, и учебу у «престарелых пердуров», как уже выразились, вот как раз они и пишут в комментариях, что награда за такой баг очень достойная, и заодно минусуют. На моем комментарии так-же можно в этом убедиться.
                                                          • 0
                                                            Не всё так однозначно. Чтоб открыть свой стартап нужны в первую очередь хорошая идея и умение вести бизнес, а уже потом умение программировать. А на счёт ВУЗа, большинство не могут в самообучение, если человек из таких, то ему дорога в ВУЗ, также бывают ситуации, когда нужна корочка, например, для иммиграции, тогда тоже ВУЗ крайне желателен, ну и также для тех, кто ещё не определился, это хороший способ набраться опыта, т.к. свободного времени явно больше, чем на работе.
                                                      • –13
                                                        Молодец! Хорошая подготовка к ЕГЭ получилась!

                                                        У вас в начале написано, что «выплатили $15000», а в конце «выплатили 2000$». Общественность переживает, куда «утряслись» остальные $13000?
                                                        • +10

                                                          В начале статьи я писал про выплату от Facebook за похожую уязвимость.

                                                          • +19
                                                            Общественность читает статью *внимательно*.
                                                          • +2
                                                            Я в шоке. Серьезно? Сервак без проверок принимает любой номер от клиента и отправляет на него смс с кодом? И это крупнейшая соц. сеть?
                                                            • +3

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

                                                              • 0
                                                                Да, можно отправлять SMS на любой номер, тут ещё повезло, что есть лимиты. Мне кажется, раньше сам ВКонтаке занимался отправкой SMS, но потом этот сервис отдали Mail.Ru. И из-за этого возникла проблема с сессиями.
                                                                • 0

                                                                  То есть код восстановления на стороне сервера генерировался на основе лишь session_id без добавления самого номера?

                                                                  • 0
                                                                    Как именно все это работало знаю только сотрудники Mail.Ru. Могу только утверждать, что на одинаковый session_id, приходило одинаковое SMS. Так же я не помню менялись ли коды в сообщениях со сходными session_id с течением времени.
                                                                    • 0

                                                                      А как теперь стало? Смс на другой номер не приходит вообще или приходит с другим кодом восстановления?

                                                              • +1

                                                                Действительно круто! Остается только догадываться, сколько мошенники нагрели денег за взломы, из-за того, что кое-где программисты занимаются непонятно чем =)

                                                                • +12
                                                                  На самом деле, после анализа логов, мы не нашли использования данной уязвимости, кроме того, что делал автор статьи.
                                                                  • 0
                                                                    Возможно плохо искали, т.к. встречал несколько случаев угона аккаунта с похожими симптомами (приходили SMS-ки владельцу, потом терялся контроль над аккаунтом). То ли SMS-ки перехватывали, то ли это.
                                                                    • 0
                                                                      Воооот, такая же ситуация была, угнали акк в VK.
                                                                      А 1 Апреля угнали почту на Mail, хотя там стоит двуфакторная авторизация. Пришла СМС о том что сменили пароль и пипец, при чем восстановить по номеру телефона обратно не дало.
                                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                    • 0
                                                                      Ну во всех приложениях с этой библиотекой существовала уязвимость, разве это не проблема библиотеки?
                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                    • 0
                                                                      Тут скорее проблема в архитектуре библиотеки. В большинстве случаев сессии восстановления генерируются на стороне сервера, а тут эта задача лежит на клиенте от этого и проблемы. Ну а конкретн, то что на одну и также сессию генерировался один и тот же код проблема сервера.
                                                                      • 0

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

                                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                                          • 0
                                                                            Отладочный код не столько комментами надо сопровождать, сколько дефайнами, которые не могут присутствовать в боевом режиме.
                                                                            • +1

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

                                                                              • +2
                                                                                Это понятно. Речь же про идеал. :)
                                                                                Мы можем сколько угодно рассуждать о том, какие нубы сидят в ВК.
                                                                                Но по факту — все совершают ошибки. По разным причинам.
                                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                              • 0

                                                                                Ну я просто предположил. Был код для отладки, который брал телефон из запроса, программист сам подставлял тестовый телефон для отладки и по какой-то причине запулили в продакшен. При корректных данных тесты проходит. Но это всего лишь версия) ничем не обоснованная

                                                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                                          • +3
                                                                            norver, размер вознаграждения (2к$) прокомментировать можете? Чем больше, и эмоциональнее, тем лучше.
                                                                            • +2
                                                                              Считаю, что выплата нормальная. Да, это меньше чем за тот же тип уязвимости у Facebook, но лучше чем ничего. Все-таки если очень хочется денег намного выгоднее такие уязвимости вообще не раскрывать. Спокойно ломать страницы «девочек» по заказу «мальчиков» беря при этом 10 тыс. за страницу. Мне кажется, что при такой работе шанс спалить уязвимость стремится к нулю, можно еще и маскироваться под фишинг. Но тут уже этическая сторона вопроса.
                                                                            • 0

                                                                              Скажите пожалуйста, а каким образом вы считали кол-во возможных вариантов для 4х значного кода без находящихся рядом одинаковых цифр? У вас получилось ~6500
                                                                              Что я упускаю?


                                                                              10^4 = 10000 - кол-во всех вариантов.
                                                                              10^3 = 1000 - кол-во вариантов где одинаковые цифры стоят рядом.
                                                                              10000 - 1000 = 9000 - кол-во вариантов где одинаковые цифры не стоят рядом.

                                                                              Кол-во вариантов где одинаковые цифры стоят рядом считал таким образом, т.к. в 4х значном коде только 3 места по 2 цифры и кол-во значений на одно место — 10.

                                                                              • +1
                                                                                Могу сказать, что всего возможных 4-х значных кодов точно 9000. Т.к. на первом месте могут находится все цифры кроме 0, а на трех других местах любые цифры, т.е. 9 * 10 * 10 * 10. А количество чисел в которых цифры не стоят рядом я считал вот так:
                                                                                count = 9000
                                                                                
                                                                                for i in range(1000, 10000):
                                                                                    numstr = str(i)
                                                                                    for j in range(len(numstr) - 1):
                                                                                        if numstr[j] == numstr[j + 1]:
                                                                                            count -= 1
                                                                                            break        
                                                                                            
                                                                                print(count)
                                                                                
                                                                                • +1
                                                                                  на первом месте могут находится все цифры кроме 0

                                                                                  аааа.




                                                                                  Ну в общем перебором)


                                                                                  Может кто знает как решить данную задачу с помощью комбинаторики?) Стало очень интересно

                                                                                  • +6
                                                                                    Для первой цифры нам подходят 9 чисел (1-9)
                                                                                    Для каждой следующей тоже 9 (все, кроме такой же, как и предыдущая)

                                                                                    Получаем через комбинаторное перемножение: 9*9*9*9 = 6561
                                                                                    • +1

                                                                                      Спасибо большое!

                                                                                    • +1
                                                                                      9^4=6561.

                                                                                      На первом месте стоит что угодно от 1 до 9, то есть 9 цифр, на втором что угодно, кроме цифры, попавшей на первое, то есть 9 цифр, на третьем — что угодно, кроме цифры, попавшей на второе, то есть… в итоге для кода длиной N имеем 9^N вариантов. Это рассуждение, кстати, очевидно из написанного выше кода цикла.
                                                                                • 0
                                                                                  Хм. А на чьем еще аккаунте вы это тестировали? :)

                                                                                  Как раз последние 2-3 дня постоянно приходили коды восстановления на телефон, хотя я ничего не запрашивал. Писал в саппорт, те сказали, что все ок, переживать не стоит.
                                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                                  • 0
                                                                                    к примеру само приложение mail.ru почта вообще не проверяет сигнатуру на бекенде(месяца 2 назад писал почтового бота)
                                                                                    спс за статью.
                                                                                    • +3
                                                                                      Автор, вы молодец. Достойная награда. Продолжайте изучать инструменты и совершенствовать навыки.
                                                                                      • +1
                                                                                        Автор да, молодец, но достойная награда? Больше похоже на сарказм.
                                                                                        • +1

                                                                                          120 тыщ для начинающего, тем более для 11-классника, это вполне себе неплохая награда.

                                                                                          • 0
                                                                                            Там еще за ICQ 60 тыс. доплатили.
                                                                                            • +4
                                                                                              А, вон оно чё, в возрасте дело…
                                                                                              Ну тогда и на bag bounty надо ограничения всякие ставить по этой логике, регистрация с 18 лет, выплаты за баги с 20, 0-day уязвимости рассматриваем только в преклонном возрасте… главное не победа, а участие.
                                                                                              • –1

                                                                                                Я имел в виду, с точки зрения самого начинающего. Ограничение на возраст тут ни при чем, это ваша логика, а не моя.

                                                                                        • –3
                                                                                          Как же глубоко в мозг нам засадили этот номер 88005553535 :)
                                                                                          Его же давно не рекламируют?
                                                                                          • 0
                                                                                            Объясните причину отрицательной оценки моего комментария. Разве никто не заметил номер на скриншоте?
                                                                                            • 0
                                                                                              Скорее, никто шутку не оценил просто
                                                                                          • 0
                                                                                            А уязвимость точно устранили? Судя по всему, по этой схеме, меня взломали сегодня утром
                                                                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                                                              • 0
                                                                                                СМС не приходила. Только извещение на почту, что пароль успешно изменен. А при попытке восстановить/изменить пароль сообщение: что Вы уже воспользовались восстановлением, попробуйте позже. Куда, кому и как пришел сброс пароля — не понятно!

                                                                                                Дополнительно сообщу, что поддержка Вконтакте отреагировала на этот комментарий и пароль удалось восстановить на привязанный телефон (вне очереди). В логах есть два захода с Androida с разных IP (при том, что мобильным приложением давно не пользуюсь).
                                                                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                  • 0
                                                                                                    Я и написал, что возможно — судя по всему. Так как других версий просто нет! Тем не менее, кто-то воспользовался восстановлением пароля на телефон (при этом самой SMS на моем телефоне нет, я даже на сайте оператора логи проверил).

                                                                                                    IP разные из Германии, но одного провайдера. Никаких мобильных клиентов соцсетей нет на телефоне, кроме FB. Установка из внешних источников запрещена. Самим ВК с телефона последний раз пользовался полгода назад, за это время пароль менялся 3 раза.

                                                                                                    Пароль был сброшен и заходили в аккаунт в 3 часа утра (и повторно в 10), когда телефон не мог находится в интернете (был выключен и компьютер). В общем, все это меня не смутило бы, если бы не выглядело странным.
                                                                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                      • 0
                                                                                                        На самом деле мистика какая-то. Вы уверены, что было восстановление именно по телефону, уточняли это у тех. поддержки? Все же не думаю, что кто-либо будет использовать подобные уязвимости на аккаунте обычного пользователя.
                                                                                                        • 0
                                                                                                          Восстановление идет только на ТЕЛЕФОН (даже если я указываю привязанную почту). Только что проверил для убедительности.
                                                                                                          Было именно восстановление, так как я не мог воспользоваться повторным восстановлением (лимит 24 часа), кто-то получил/перехватил каким-то образом СМС!
                                                                                                          • 0
                                                                                                            Но если не было SMS в детализации у оператора, то по вашей вине перехватить его точно не могли. Сразу вспоминается история, когда ФСБ совместно с оператором отключили прием сообщений у оппозиционеров для доступа к их переписке в Telegram.
                                                                                                        • +1

                                                                                                          Как вариант. Если у них отправляется не напрямую из кода, а через очередь, то возможно SMS просто не успела отправиться. Сначала запрашиваем код на свой номер, вводим в поле, потом с тем же session_id на нужный номер, и сразу же отправляем форму. Код восстановления принимается и стирается из базы. Через N миллисекунд подходит очередь на отправку, а отправлять уже нечего.


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

                                                                                                  • 0
                                                                                                    Судя по тайм-лайну на HackerOne — да, устранили.
                                                                                                    К тому же, запрещено публиковать пост о найденной уязвимости ранее 30 дней после её устранения.

                                                                                                    Так что да, данная уязвимость устранена, но не исключена возможность того, что существуют другие.
                                                                                                    • +1
                                                                                                      Я и пытаюсь обратить на это внимание поддержки Вконтакте, так как мой случай весьма показательный. Комментарий michael_vostrikov выше (про стирание смс в очереди) весьма кстати. Видимо где-то что-то упустили из виду.
                                                                                                  • +4
                                                                                                    Я согласен со многими, что парень молодец.
                                                                                                    Выпендреж, что $3к не деньги вызывает улыбку. Оставим за скобками, что даже в Европе и США это хорошие деньги, а уж для выпускника школы это очень круто. Можно и на отдых сгонять и железа прикупить.
                                                                                                    Что касается script-kiddie, не согласен. Делал автор сам, недостаток опыта компенсировал перебором кое-где. Ну и нормально. Не все же сразу становятся Ионеску или lokihardt. Всем задравшим нос предлагаю вспомнить себя в таком возрасте.

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

                                                                                                    Все двери открыты. Я автору желаю успехов и дальнейших побед.

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