Вся представленная информация размещена исключительно в образовательных и исследовательских целях. Автор не рекомендует использовать полученные знания для взлома, нанесения вреда или ущерба. Будьте благоразумны и не нарушайте законы.
Резюме
Различные приложения уже давно слились с нашей повседневностью. В них наши персональные,банковские,личные и другие данные, и их утечка может обойтись очень дорого.
В этой статье я затрону насколько плохим может быть отношение к безопасности на примере довольно крупной компании в СНГ по доставке азиатской пищи. Пытаюсь зарепортить уязвимости. Описываю доказательство концепции. Надеюсь, статья будет интересна для вас.
Введение
Двухфакторная авторизация была придумана для дополнительной безопасности, и помимо стандартного ввода логина и пароля предполагает так же и ввод дополнительного элемента: код из полученного смс, получить звонок, биометрическое подтверждение, ввести кодовое слово и так далее. Но при неправильной настройке двухфакторка упрощает получение доступа к аккаунту для злоумышленника вместо своей прямой функции.
В рассматриваемом приложении отсутствует классический метод авторизации в виде пароля, но я все равно рассматриваю уязвимость с точки зрения обхода 2Fa.
Все уязвимости этого рода классифицированы OWASP в одной категории и занимают 7 место в owasp top ten
Ссылка скрыта от гостей
.Более подробно ознакомится с механизмами авторизации и байпасов можно тут
Ссылка скрыта от гостей
.PROOF OF CONCEPT
Для начала поймем как в этом приложении устроен механизм авторизации. Вводим номер телефона в форму, отправляем. В перехватчике burp видим, что на ендпоинт /user/phone/validate отправились значения в JSON формате. Этот запрос указывает что надо сгенерировать код и отправить на указанный номер. Отправляем этот запрос в burp repeater, он нам еще пригодится.
Теперь сама авторизация. В том же формате отправляем на ендпоинт /user/register_or_auth четырехзначный код, полученный из смс, и если он вилидный получаем JSON ответ с данными об аккаунте. Очень удобно для злоумышленника - парсить ничего не нужно, но об этом в дальнейшем.
Из информации полученной выше сразу напрашивается закономерный вопрос, а что если попробовать подобрать код подтверждения? Всего 4 цифры и десять комбинация для каждой
цифры, и того 10^4 = 10000 комбинаций. При хорошем времени отклика сервера данный процесс займет считанные секунды. Отправляем наш прошлый запрос в intruder.
Оборачиваем в $ наше значение ключа "code". На это место будет подставляться полезная нагрузка. Настраиваем payload на numbers, range устанавливаем на from 0 to 9999, step указываем 1, min и max integer digits ставим на 4 что бы всегда было 4 цифры независимо от нулей и уложится в формат.
Переходим в options, grep-ать будем от обратного - строка "code_invalid", которое выдается в ответе на неправильный код. Теперь все сообщения, содержащие такую строку, будут с галочкой. Нам нужно отслеживать сообщения без галки.
Ресурс пул устанавливаем максимальный - 10 потоков. Запускаем атаку.
Всего чуть более 7к запросов и цели мы достигли. Код подобран и сервер связал нашу сессию с нашим тестовым юзером 1666 года рождения. Больше ничего делать не надо, просто рефрешим страницу браузера и мы внутри.
Импакт
Мы выяснили, что ~30 секунд достаточно что бы захватить любой аккаунт. Уязвимость легка в эксплуатации и автоматизации.Аккаунты хранят в себе персональные данные и геолокации. Если будет захвачен аккаунт с повышенными привилегиями есть шанс компрометации всего приложения. Но ~30 секунд всё еще слишком много на подбор...
Эксплуатируем со скоростью звука
Добавим немного ракетного топлива в движок нашего эксплоита. Помните наш первый запрос, где на ендпоинт /user/phone/validate отправлялись параметры "phone" и "number"? Опытным путем было определено, что значение ключа number определяет количество цифр в отправляемом коде подтверждения. Теперь установив данное значение на 1 нам придёт на подтверждение всего одна цифра! А это же в 1000 раз быстрее нашего прошлого метода! Теперь процесс подбора одного аккаунта занимает меньше секунды.
Теперь уязвимость приобретает максимально критичный характер, ведь пол часа времени займет написать скрипт на питоне который автоматизирует процесс отправки значений и их подбора. Можно скачать базу снг номеров и настроить несколько проксей, и все пользовательский данные будут скомпрометированы массово. Да и наверняка среди всех аккаунтов попадется с повышенными привилегиями.
Распространение уязвимости
Методом научного nmapa было установлено, что приложение имеет множество экземпляров для каждого города где есть эта сеть и, скорее всего, хостятся на одной машине. Для каждого домена первого уровня своя машина со своими экземплярами в зависимости от страны. И, судя по всему, все экземпляры уязвимы, кроме мобильного приложения, там всё немного по другому, но там у меня авторизоваться вообще не получилось, возможно в будущем проведу для него отдельный аудит.
Бонус
При сканировании
Ссылка скрыта от гостей
r был найден интересный заголовок x-forwarded-host , содержимоекоторого отображается на странице. Немного пофазив его была обнаружена отраженная xss иньекция.
Вот так это выглядит в браузере.
Отличный способ получить админский аккаунт. Для успешного експойта придется, скорее всего, иметь выделенный сервер и купить доменное имя похожее на домен испытуемого.
Былинный сказ о том как Каджит уязвимость репортил
А никак не репортил. Данной опции у них не предусмотрено. Попытка выйти на ответственных людей через сотрудников компании не увенчалась ничем. Форма для заявок в отдел качества просто не работает - не отправляет ничего. Было решено писать в онлайн форму на одном из доменов компании. Там мне ответила девушка Виктория которая отправила меня в ту самую форму, которая не работает. Далее на скриншотах:
Вы очень помогли, Виктория, спасибо что хоть не цыкаете и глаза не закатываете! Или нет... Но это уже останется за кадром
Далее на просторах интернета, все таки был найден е-меил того самого отдела качества, у которого форма не работает. Попросил у них контакты ответственных людей, получил какую-то стандартную отписку а потом и вовсе игнор. Сразу видно заинтересованность компании.
Так же отписался всем причастным людям в линкедине но получил закономерный игнор.
Итог
На момент публикации уязвимость скорее всего не закрыта, но может в скором времени закроют, ведь руководство компании в курсе (спасибо вам, Виктория, за ваш самоотверженный труд в нерабочее время).
Вы увидели все отношение компании к своим клиентам и сохранности их данных, поэтому настоятельно не рекомендую пользоваться их приложением, надеюсь хоть качество кухни повыше. Но хоть шапку новогоднюю на сайте сделали, а это сейчас главное, ведь скоро новый год.
Всех с наступающими праздниками, новых знаний и достижений. Искренне ваш, Каджит в белой шляпе.
Последнее редактирование модератором: