Комментарии 144
Данная уязвимость позволяла взломать большинство аккаунтов в социальной сети, в безопасности были только аккаунты с двухфакторной авторизацией (у них нельзя делать восстановление по номеру телефона).
Ну, на самом деле не только они — взятую наугад случайную незнакомую страницу вы так скорее всего не взломаете. Но уязвимость очень серьёзная, что-то маленькая выплата за неё.
Эта библиотека сделана в лучших традициях security through obscurity, весь код надежно обфусцирован.
OMG… кто-то ещё такое использует в наши дни. Чего ради??? Чтобы потом это сломал школьник и VK с Mail.ru стало стыдно?
С чего Вы это взяли?
Я говорю "школьник" потому, что судя по упоминанию ЕГЭ в статье это сделал именно школьник. И какими бы умными не были школьники, квалификация людей профессионально занимающихся безопасностью обычно намного выше. Так что мой вопрос вполне уместен — если эта "защита" не в состоянии сдержать школьника, то хакера она тем более не сдержит — и зачем она тогда нужна вообще? Все остальные и так не будут пытаться подделывать HTTP-запросы.
Проблема в том, что от такой реализации "безопасности" больше вреда, чем пользы: на самом деле она ни от чего не защищает, но создаёт у разработчиков ложное чувство безопасности — якобы параметрам запроса можно доверять, раз они корректно подписаны. А доверять им, разумеется, нельзя, и код будет намного безопаснее, если об этом никто из разработчиков не будет забывать ни на секунду.
Это в начальных классах еще дети, в старших — вполне уже личности и специалисты.
Может, конечно. Я сам таким был. Но суть вопроса ведь не в этом. Всё описанное в статье по сложности реализации доступно и понятно начинающим разработчикам под андроид. Добавляем к этому желание взломать и хакерский склад ума — и всё, "защита" моментально обходится. Если начинающий разработчик может обойти эту защиту — зачем её вообще делали? Против кого, собственно? Где целевая аудитория хакеров, которые хотят это сломать, но не смогут этого сделать из-за недостатка квалификации/времени/средств? Кто и для чего придумывает глупости вроде этой "подписи" параметров HTTP, выполняемой кодом на клиенте, который контролирует хакер? Я бы ещё понял, если бы они этот код вынесли в C-шную библиотеку набитую антиотладочными приёмами — тоже не сильно поможет, но было бы видно, что они хотя бы пытались поднять планку требуемой квалификации для взлома. А в текущем виде это просто профанация.
Даже отсылка к Facebook не будет актуальной, потому что там совсем другая уязвимость и он её в ВК не нашел. Он нашел в ВК совсем другую уязвимость, уникальную, которую сам и разобрал. ПРи этом четко понимания что и зачем делает.
Где тут хоть один пункт совпадения с той огромной цитатой, что вы привели?
Здесь перебора нет. Попробовал одну уязвимость, в процессе увидел другую.
Удачи!
А собрать открытую информацию — много ума не надо. Это никак не показывает ваш уровень навыков. ;)
Тем более ладно бы ломали человека, который пытаеться анонимность изображать. Я не изображаю и никогда о себе ничего не скрывал, о мой бог, как много вы обо мне знаете. :))))
UPD: Ну или хотя бы сайт, который висит на деромохостинге и весь дырявый, даже https нет. лол. Справитесь?
Запустить вашу демку я конечно соглашусь. Поэтому у меня песочницы под qemu. Винда с UE не имеет доступа ни к каким из моих аккаунтов. Ну так уж повелось, что не верю я винде с тех пор как десятка вышла. ;)
Подсудного дела нет. Я вам официально разрешаю сломать сайт. Как я уже сказал — это персональная страничка давно протухшая. Велкам.
Её дефейс будет для всех здесь прекрасным доказательством вашей правоты. Вы же здесь для этого? Обосновать свою позицию. Вот и попробуйте.
Мне не 13 чтобы кому то что то доказывать.
Ну вы ж не поленились потратить некоторое время чтобы в гугле посмотреть результаты по запросу с моей почтой? :)
Это уже говорит о том, что доказывать вам есть что. Не противореьте сами себе, этож палево.
Мне и не нужны ваши аккаунты, я бы просто зашифровал вам диск.
Это бы вам ничего не дало, во первых хрен бы вы чего зашифровали. :)
Во вторых — у меня быкапы на защищенном от постороннего доступа сервере. :))
Судя по вашей безалаберности в сети.
Слушайте, ну воспользуйтесь хоть одним пунктом по безалаберности в сети? По вашему я дырявый идиот, ломаться должен за меньшее время, чем «граф на 2000 вершин» составлять. ;)
Вы вообще не следите за безопасностью в своей системе.
Бла-бла-бла
Хорошо что хоть аккаунт в avast есть.
Не, я не пользуюсь антивирусами. Лет уже так 10.
Вот сайт который я делал четыре года назад.
Можете смело делать что предлагали мне Велкам!
Я разработчик игр, что вы мне предлагаете. :))
Хотя боюсь вас посадят, несмотря на Велкам.
Значит вы все таки боитесь, что я на вас настучу.
Давайте я вам официальную бумажку с подписью и печатью дам, где разрешаю меня сломать? Естественно без причинения ущерба.
Тогда зачем интересуешься?
Хотя видимо ты ждешь ответа с числами, ок.
Моя зарплата 3200$ в месяц.
Мне придется работать почти весь месяц по 5 дней в неделю по 8 часов.
Но все равно не настолько чтобы кому то завидовать.
Я рад что у нас есть такие таланты, побольше бы таких.
Серьёзно, что он написал такого, матов не было, чего-то запрещённого законом РФ тоже…
И да, отвечу тому парню: я вообще-то даже не спрашивал, какая у тебя зарплата…
Все что делаю обсуждаю нашу беседу в телеграм с друзьями безопасниками.
И веселю их степенью вашего маразма.
И жду когда же разработчики хабр исполнят мою заявку и удалят мой аккаунт.
По закону о персональных данных.
Так что наша беседа останется в прошлом, и надеюсь вы вынесите из нее хоть крупицу полезной информации.
Кстати, вся переписку у меня сохранена.
Как думаете, куда выложить?
Очевидно вне юрисдикции РФ, чтобы комрад опять свой позор не потребовал удалять.
Кстати, вся переписку у меня сохранена.
И не только у вас :)
https://sohabr.net/habr/post/332684/#comment_10306258
https://web.archive.org/web/20170712063507/https://habrahabr.ru/post/332684/#comment_10306258
Лучше посмотреть на это с другой стороны:
1) уменьшения безопасности конкретно вся эта обфускация и "подписывание" запросов не создаёт
2) разумные разработчики понимают, что всё, что сформировано на клиенте, не является доверенным и подлежит проверке — поэтому их это не запутает
3) небольшой препон к реверсу библиотеки и протокола это создаст
итого — вреда нет, польза, пусть и маленькая, есть, почему бы не сделать, раз есть такая возможность, причём почти бесплатная?
К сожалению, разумные разработчики не настолько разумные, как нам бы хотелось. И психология этих разумных разработчиков не отличается от других людей. И работают они каждый над своим участком кода, зачастую не имея ни времени ни желания вникать в то, как что-то устроено на другой стороне или в следующем слое абстракции. Так что когда они видят не просто обычный набор параметров, а подписанный набор параметров — они обычно считают, что раз подпись есть, то она должна что-то да значить, в частности что параметрам можно верить (ведь зачем-то такую необычную подпись кто-то добавил… а разработчики, как известно, разумные, так что добавлять совершенно бессмысленную подпись они бы не стали :)). Да и просто подсознательно подписанным данным доверия всегда больше. Так что проверять подписанные параметры разработчики если и будут вообще, то совсем не так тщательно, как обычно.
Итого — вред есть, и значительный. Начиная с затрат времени на разработку и поддержку бессмысленного функционала, и заканчивая ослаблением безопасности из-за психологического фактора. А самое плохое то, что такой бессмысленный функционал часто со временем попадает в категорию "магическая хреновина, никто не знает зачем она нужна, но её нужно обязательно поддерживать в рабочем состоянии иначе неизвестно что может поломаться".
Куда поступать планируешь?)
Не понял, а 97 баллов за что, за "базу"?
Общая сумма с учетом Информатики какая?
На счет вуза сильно не переживай, если захочешь учится то везде сможешь стать спецом.
Кроме вузов есть еще и Академия современного программирования, она тоже не плохо поможет.
Не теряй лучшие годы своей жизни слушая пердунов которым на тебя накласть. За пять лет можно и нужно запустить стартап, стать оверквалифаед, свалить на доллары или хотя бы евро, взять ипотеку и Теслу. Может меня и заминусят, но я ни разу не пожалел что свалил с первого курса. Потом ко мне приходили выпустившиеся одногруппники, а я не мог их взять потому что они, потратив на "образование" пять лет, знали меньше школьника с одним годом реального опыта. И знали меньше как практики так и теории, т к теория без практики это просто хлам, а занимаясь практикой теорию усваиваешь на порядок быстрее.
Стартап за 10 лет так и не смог построить, потому что разрпаботчик, а не бизнесмен, а карьеру строить и трактор снаряжать — отсутствие образования мешает.
Теоретически все оно так, но, например, не все могут запустить стартап. А при приеме на работу и во многих других ситуациях прежде всего смотрят на бумажку. Ну, так устроены люди. Им обязательно нужна какая-то простая метрика, по которой можно сравнивать кандидатов и людей вообще. Особенно умиляют кадры, которые хвастаются 2-3 образованиями. А с первого раза не дошло что-ли?
Кроме того, лично я никуда переезжать не собираюсь. Но если бы захотел переехать в почти любую другую страну, то отсутствие бумажки затрудняет процесс на порядок.
Пять лет опыта при приеме нормальную компанию дают больше шансов чем корочка. Сегодняшние воротилы начиная с Билла Гейтса — почти все забили на учебу. Вылетел из универа -> добился успеха, это на столько частая формула наблюдаемая на практике, что я даже и не знаю как нужно смотреть на мир чтобы ее не заметить, особенно в ИТ. В общем конечно каждому самому решать и все такое. Но те кто закончил за редким исключением будут говорить или учиться, потому что не признавать же себя неудачниками слившими молодость. Она один раз бывает, а жизнь и так коротка.
Мне кажется, что это все же слишком сильное упрощение. Я хочу обратить внимание, что у диплома есть очень весомые преимущества. В частности, мобильность. Как писал в изначальном комментарии, переехать в другую страну без диплома — чрезвычайно сложная задача. Может быть, оно и не надо. Но если вдруг приспичит, то придется локти кусать и преодолевать весьма серьезные препоны. Тогда как с дипломом (если не врач, конечно), задача становится элементарной для многих стран.
Есть преимущества и недостатки и у того и у другого. Кроме того, учиться — это не равноценно прожиганию времени. Можно и знания получить, и связи, и полноценно жить в это время.
Вылетел из универа -> добился успеха, это на столько частая формула наблюдаемая на практике, что я даже и не знаю как нужно смотреть на мир чтобы ее не заметить, особенно в ИТ.
Типичная ошибка выжившего. Вы просто не замечаете, что существует гораздо большее число вылетевших / не поступивших, и ничего серьёзного не добившихся.
Единственное что, подобные воротилы — сперва добились успеха, а потом уже частично забили на учебу из-за недостатка времени. Причем подавляющее большинство из них угрохали все свое «незамутненное детство» на то, чтобы освоить какие-то технологии (а не на дотку и танчики) причем на таком уровне, что уже учась в универе смогли создать бизнес, дающим им бОльшие перспективы, чем корочка.
Опять же, сравните требования к разработчику в 90-е и сейчас — в последнее время я все чаще и чаще даже на простых проектах наблюдаю необходимость в вузовской математике.
1) разрабатывали систему активного шумоподавления для телевизоров. Я вообще не врубался о чем говорили товарищи про матрицы, частоты, волны, разбор это все по фурье и так далее.
2) Вы проходили во втором классе сложность алгоритмов? Можете сходу сказать сложность алгоритма обычной пузырьковой сортировки, и объяснить ее второкласснику?
3) Битовые операции, and/or/xor/not, и циклические сдвиги — это в принципе можно попробовать пояснить. Но вот когда начинаешь использовать это на практике для работы с графикой (банального отрисовывания спрайтов поверх других спрайтов) — мне школьного образования и интуитивного понимания не хватило, пришлось почитывать отдельно.
4) Принципы работы ssh-ключей на достаточном уровне, чтобы вообще понимать как оно работает? Как и почему работает https, что именно содержится в ключах и сертификатах?
Это только за минуту накидал из личной практики.
P.S. А я ведь даже не программист, а девопс. Просто приходится немного bash/java/c++/python/php/js ковырять на базовом уровне.
За 20 лет ни разу не было необходимости что-то сложнее второго класса использовать
Не знаю, как можно работать со всякими OpenGL и при этом не знать аналитическую геометрию.
OpenGL со всей геометрией выражается при помощи системы уравнений. Синусы хоть и проходят в седьмом классе, это просто соотношение сторон, что есть второй класс.
Мне кажется, что вы — гений (непризнанный)
Я вот в геймдеве работаю, математики тоннами. Причем сейчас я работаю с UNreal Engine, казалось бы — там вся математика уже написано. А вот фиг, всё равно приходится много математики использовать.
Ок. Не геймдев.
Делал платежный терминал… Контрольную сумму чтобы посчитать — надо полиномы знать!
Ок. Можно использовать готовую формулу. Формулы для расчета контрольных сумм всегда есть в документации к API.
Но:
1) Много стоит специалист, который работает с чужим кодом как с черным ящиком? Вот вы говорите, что норм так работается. А вот я таких людей специалистами не считаю.
2) Если что-то пойдет не так, не зная как строится таже примитивная контрольная сумма — по логу ошибку понять сложнее.
Впрочем разницы нет, ваши советы все равно непригодны, в первом случае — потому что гении и так знают как им поступать, а во втором случае- потому что ценность нулевая.
а геймдев, бухгалтерия, системное, бакенд, бд — в прошлом
лол
Даже комментировать не буду
В движках ее усложняют
лол x2
Никто её намеренно не усложняет, разве что для эффективности.
в последнее время я все чаще и чаще даже на простых проектах наблюдаю необходимость в вузовской математике.
Вообще говоря, её можно и самому изучить при достаточном желании.
У вас в начале написано, что «выплатили $15000», а в конце «выплатили 2000$». Общественность переживает, куда «утряслись» остальные $13000?
Мне тоже так показалось сначала, но на самом деле нет — сервер посылает на каждый номер код к его аккаунту, но сам код для двух аккаунтов (жертвы и хакера) одинаковый, если он запрошен в одной и той же (веб? или как его назвать для приложения)-сессии.
Действительно круто! Остается только догадываться, сколько мошенники нагрели денег за взломы, из-за того, что кое-где программисты занимаются непонятно чем =)
Я думаю перемудрили с повторными запросами кода смс. Когда клиент нетерпиливый и запрашивает код повторно, когда первый еще в пути, чтобы код был одинаков и клиент лихорадочно не вводил все подряд)) тут и вкралась ошибка, скорее всего телефон для отправки брали не из базы сервера, а из запроса. Возможно кто-то не закоментил отладочный код))
Тут согласен, но ситуации могут быть разные. Очень часто в продакшен код уходит по давлением дедлайнов, начальства и т.п. тут и вылазять ошибки
Ну я просто предположил. Был код для отладки, который брал телефон из запроса, программист сам подставлял тестовый телефон для отладки и по какой-то причине запулили в продакшен. При корректных данных тесты проходит. Но это всего лишь версия) ничем не обоснованная
Скажите пожалуйста, а каким образом вы считали кол-во возможных вариантов для 4х значного кода без находящихся рядом одинаковых цифр? У вас получилось ~6500
Что я упускаю?
10^4 = 10000 - кол-во всех вариантов.
10^3 = 1000 - кол-во вариантов где одинаковые цифры стоят рядом.
10000 - 1000 = 9000 - кол-во вариантов где одинаковые цифры не стоят рядом.
Кол-во вариантов где одинаковые цифры стоят рядом считал таким образом, т.к. в 4х значном коде только 3 места по 2 цифры и кол-во значений на одно место — 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)
на первом месте могут находится все цифры кроме 0
аааа.
Ну в общем перебором)
Может кто знает как решить данную задачу с помощью комбинаторики?) Стало очень интересно
Для каждой следующей тоже 9 (все, кроме такой же, как и предыдущая)
Получаем через комбинаторное перемножение: 9*9*9*9 = 6561
На первом месте стоит что угодно от 1 до 9, то есть 9 цифр, на втором что угодно, кроме цифры, попавшей на первое, то есть 9 цифр, на третьем — что угодно, кроме цифры, попавшей на второе, то есть… в итоге для кода длиной N имеем 9^N вариантов. Это рассуждение, кстати, очевидно из написанного выше кода цикла.
Как раз последние 2-3 дня постоянно приходили коды восстановления на телефон, хотя я ничего не запрашивал. Писал в саппорт, те сказали, что все ок, переживать не стоит.
спс за статью.
120 тыщ для начинающего, тем более для 11-классника, это вполне себе неплохая награда.
Ну тогда и на bag bounty надо ограничения всякие ставить по этой логике, регистрация с 18 лет, выплаты за баги с 20, 0-day уязвимости рассматриваем только в преклонном возрасте… главное не победа, а участие.
Его же давно не рекламируют?
Дополнительно сообщу, что поддержка Вконтакте отреагировала на этот комментарий и пароль удалось восстановить на привязанный телефон (вне очереди). В логах есть два захода с Androida с разных IP (при том, что мобильным приложением давно не пользуюсь).
IP разные из Германии, но одного провайдера. Никаких мобильных клиентов соцсетей нет на телефоне, кроме FB. Установка из внешних источников запрещена. Самим ВК с телефона последний раз пользовался полгода назад, за это время пароль менялся 3 раза.
Пароль был сброшен и заходили в аккаунт в 3 часа утра (и повторно в 10), когда телефон не мог находится в интернете (был выключен и компьютер). В общем, все это меня не смутило бы, если бы не выглядело странным.
Было именно восстановление, так как я не мог воспользоваться повторным восстановлением (лимит 24 часа), кто-то получил/перехватил каким-то образом СМС!
Как вариант. Если у них отправляется не напрямую из кода, а через очередь, то возможно SMS просто не успела отправиться. Сначала запрашиваем код на свой номер, вводим в поле, потом с тем же session_id на нужный номер, и сразу же отправляем форму. Код восстановления принимается и стирается из базы. Через N миллисекунд подходит очередь на отправку, а отправлять уже нечего.
С другой стороны, раз говорят что пофиксили, возможно где-то в другом функционале есть похожая уязвимость с session_id. Или пофиксили на фронт-сервере, а они знают адрес внутреннего сервера, куда пересылается запрос. Ну или криво пофиксили) Можно много чего нафантазировать.
К тому же, запрещено публиковать пост о найденной уязвимости ранее 30 дней после её устранения.
Так что да, данная уязвимость устранена, но не исключена возможность того, что существуют другие.
Выпендреж, что $3к не деньги вызывает улыбку. Оставим за скобками, что даже в Европе и США это хорошие деньги, а уж для выпускника школы это очень круто. Можно и на отдых сгонять и железа прикупить.
Что касается script-kiddie, не согласен. Делал автор сам, недостаток опыта компенсировал перебором кое-где. Ну и нормально. Не все же сразу становятся Ионеску или lokihardt. Всем задравшим нос предлагаю вспомнить себя в таком возрасте.
Про универ. На мой взгляд очень правильная мысль была про помощь диплома при переезде. Там вверху кто-то писал про отстуствие диплома и релокацию. Хотелось бы подробнее узнать. Вроде как в некоторых странах годы опыта засчитывают, но далеко не везде. Также это может сказаться на типе визы и условиях пребывания в стране. Если еще полезно время проводить, то есть шанс реального опыта набраться.
Все двери открыты. Я автору желаю успехов и дальнейших побед.
Уязвимость ВКонтакте: отправляем сообщение с кодом восстановления страницы на чужой номер