• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Статья 2Fa bypass и account takeover в дикой природе

2fa (1).jpg

Дисклеймер

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


Резюме

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

В этой статье я затрону насколько плохим может быть отношение к безопасности на примере довольно крупной компании в СНГ по доставке азиатской пищи. Пытаюсь зарепортить уязвимости. Описываю доказательство концепции. Надеюсь, статья будет интересна для вас.



Введение

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

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

Все уязвимости этого рода классифицированы OWASP в одной категории и занимают 7 место в owasp top ten .

Более подробно ознакомится с механизмами авторизации и байпасов можно тут .



PROOF OF CONCEPT

Для начала поймем как в этом приложении устроен механизм авторизации. Вводим номер телефона в форму, отправляем. В перехватчике burp видим, что на ендпоинт /user/phone/validate отправились значения в JSON формате. Этот запрос указывает что надо сгенерировать код и отправить на указанный номер. Отправляем этот запрос в burp repeater, он нам еще пригодится.

1.png


Теперь сама авторизация. В том же формате отправляем на ендпоинт /user/register_or_auth четырехзначный код, полученный из смс, и если он вилидный получаем JSON ответ с данными об аккаунте. Очень удобно для злоумышленника - парсить ничего не нужно, но об этом в дальнейшем.

2.png


Из информации полученной выше сразу напрашивается закономерный вопрос, а что если попробовать подобрать код подтверждения? Всего 4 цифры и десять комбинация для каждой
цифры, и того 10^4 = 10000 комбинаций. При хорошем времени отклика сервера данный процесс займет считанные секунды. Отправляем наш прошлый запрос в intruder.


3.png


Оборачиваем в $ наше значение ключа "code". На это место будет подставляться полезная нагрузка. Настраиваем payload на numbers, range устанавливаем на from 0 to 9999, step указываем 1, min и max integer digits ставим на 4 что бы всегда было 4 цифры независимо от нулей и уложится в формат.

4.jpeg


Переходим в options, grep-ать будем от обратного - строка "code_invalid", которое выдается в ответе на неправильный код. Теперь все сообщения, содержащие такую строку, будут с галочкой. Нам нужно отслеживать сообщения без галки.

5.jpeg


Ресурс пул устанавливаем максимальный - 10 потоков. Запускаем атаку.

6.png


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

8.png



Импакт

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


Эксплуатируем со скоростью звука

Добавим немного ракетного топлива в движок нашего эксплоита. Помните наш первый запрос, где на ендпоинт /user/phone/validate отправлялись параметры "phone" и "number"? Опытным путем было определено, что значение ключа number определяет количество цифр в отправляемом коде подтверждения. Теперь установив данное значение на 1 нам придёт на подтверждение всего одна цифра! А это же в 1000 раз быстрее нашего прошлого метода! Теперь процесс подбора одного аккаунта занимает меньше секунды.

burn1.png


burn2.png


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


Распространение уязвимости

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

ru.png


ua.png



Бонус

При сканировании r был найден интересный заголовок x-forwarded-host , содержимое
которого отображается на странице. Немного пофазив его была обнаружена отраженная xss иньекция.


xss1.png


Вот так это выглядит в браузере.

xss2.png


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


Былинный сказ о том как Каджит уязвимость репортил

А никак не репортил. Данной опции у них не предусмотрено. Попытка выйти на ответственных людей через сотрудников компании не увенчалась ничем. Форма для заявок в отдел качества просто не работает - не отправляет ничего. Было решено писать в онлайн форму на одном из доменов компании. Там мне ответила девушка Виктория которая отправила меня в ту самую форму, которая не работает. Далее на скриншотах:

1.jpeg

2.jpeg

3.jpeg

4.jpeg

5.jpeg

7.jpeg

Вы очень помогли, Виктория, спасибо что хоть не цыкаете и глаза не закатываете! Или нет... Но это уже останется за кадром:ROFLMAO:

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


email_redacted_2.png

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

Итог

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

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


Всех с наступающими праздниками, новых знаний и достижений. Искренне ваш, Каджит в белой шляпе.
 
Последнее редактирование модератором:

INPC

Grey Team
21.08.2019
77
162
BIT
187
Занимательная статья, печально, что компания так "ответственно" относится к своей безопасности и в первую очередь - к пользователям. К слову, сама уязвимость имеет место быть во многих сервисах, например, несколько лет назад подобная уязвимость была у инстаграмма
 

Khadjit_anonymous

Well-known member
26.04.2021
45
58
BIT
0
Занимательная статья, печально, что компания так "ответственно" относится к своей безопасности и в первую очередь - к пользователям. К слову, сама уязвимость имеет место быть во многих сервисах, например, несколько лет назад подобная уязвимость была у инстаграмма
Только инстаграм репорты принимает и баунти выплачивает
 
  • Нравится
Реакции: INPC

clevergod

Platinum
22.04.2017
119
674
BIT
11
Статья структурирована хорошо, читается тоже легко.
Оч рекомендую замазать на скринах доменные имена и не упоминать контору, как бы не пекло, кто знает поймёт.
Надеюсь скоро компании поймут плюсы вознаграждения за выявление уязвимостей аля bug bounty и будут людей благодарить и в Рашке и в других бывших совковых странах ибо когда нет злого умысла а администрация или бизнес владельцы не в состоянии этого осознать
 
Последнее редактирование:

INPC

Grey Team
21.08.2019
77
162
BIT
187
Опа, пока ответ писал, комментарий уже почистили)))
 

clevergod

Platinum
22.04.2017
119
674
BIT
11
Опа, пока ответ писал, комментарий уже почистили)))
Да ладно, не хочу разведения токсичности к статье автора, свой коммент так же подправил. Надеюсь мой посыл ясен, а тебе спасибо за понимание ситуации
 

BEPA

New member
23.12.2021
1
0
BIT
0
Спасибо за статью, она – хорошая. Про обход 2фа в мобильных приложениях было бы очень интересно почитать.

на скрине с reflected xss, думаю, тоже стоит замазать название вкладки :)
 

Khadjit_anonymous

Well-known member
26.04.2021
45
58
BIT
0
Спасибо за статью, она – хорошая. Про обход 2фа в мобильных приложениях было бы очень интересно почитать.

на скрине с reflected xss, думаю, тоже стоит замазать название вкладки :)
В мобильном приложении будет то же самое как тут, тот же json и примерно такой же формат сообщений. За исключением что вместо сессии будет jwt, скорее всего. Но я видел реализацию приложений на джаваскрипте, там уже вообще может практически не отличаться от классического пентестинга.

Скриншот подправил, спасибо :)
 

Сrusher

New member
21.05.2019
4
0
BIT
49
кстати часто заказываю там роллы:)но очень жаль что так халатно относятся к данным пользователей
 

r0hack

DAG
Platinum
29.09.2017
522
1 088
BIT
0
XSS в данном случае Self. Как собираетесь с помощью XSS в заголовке захватывать админский аккаунт ? :D:D
 

Brendan Castaneda

One Level
18.02.2020
5
2
BIT
12
Когда-то я обнаружил "баг" в получении лицензионного электронного ключа для активации Windows в учётной записи Microsoft.
Я подумал это отличная идея рассказать им об этом в программе баунти, но подходящей категории там не было.
Я написал им письмо, но они не захотели обговаривать условия выплат и даже проверять как-либо подлинность слов. Они просто хотели узнать способ того как я это сделал.
Конечно я ничего им бесплатно не стал рассказывать. Они так видимо и забили на это...
Думаю и по сей день существует данная уязвимость., тестировал только на Windows 10 в году 2021 последний раз.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!