Конкурс Как я нашёл уязвимость в хорошо защищённом web приложении

Конкурс: Встречаем 2020 статьями по инфобезу.

Вступление
В данной статье хотел бы рассказать о том, как я искал уязвимости в web приложении. Речь пойдёт о довольно не популярной уязвимости - Denial of Service. Эксплуатируя уязвимости данного типа можно "парализовать" сервер, не позволяя ему обрабатывать запросы клиентов.
Всё началось с того, что около месяца назад я получил приглашение приватной компании на одной из Bug Bounty платформ. Меня это заинтересовало, так как программа была довольно свежая, в скоупе был всего один домен, но с другой стороны, это позволяет посмотреть весь функционал за несколько дней и двигаться дальше.

Web приложение
После нескольких часов поиска интересного функционала, я понял, что будет не так просто найти хоть что-то в этом приложении - для авторизации оно использовало Wordpress, а в качестве прокси - Cloudflare. Бесплатного функционала было немного, а само приложение использовалось для управления сайтами на Wordpress.
Первым делом я решил проверить настройки аккаунта, здесь было больше всего шанса что-то найти, но, как я потом понял, я ошибался. Для изменения настроек использовалось API, но проблема была в том, что для каждого аккаунта эндпоинты были разными:
endpoints.png


Это сразу исключило большинство типов уязвимостей, таких как IDOR. Единственное, что я нашёл на тот момент - неправильную конфигурацию CORS, но применение этому я найти не смог.

Уязвимость
Во время теста меня заинтересовал функционал добавления API токенов, при создании тебе отправлялось значение, похожее на хеш. С помощью специально подготовленного python скрипта я пытался вызвать Race Condition в надежде увидеть что-то необычное, но ничего изменить не удалось и токены отправлялись корректно. Поставив скрипт в цикл я пошёл проверять другой функционал.
Спустя весь день я не нашёл ничего интересного, и собирался заканчивать. Последний раз взглянув на вкладки Burp Suite, я решил сделать запрос к API, который возвращает все существующие токены. К моему удивлению после минуты ожидания я увидел ошибку 504 Gateway Timeout. Это произошло из-за того, что поставленный мною скрипт создал слишком много токенов, а сервер не имел никаких инструкций на этот счёт и пытался обработать запрос. Я сразу понял, что это может привести к DoS. Немного изменив прошлый скрипт, я сделал 100 одновременных запросов к этому API эндпоинту со своего приватного сервера. Во время этого с ноутбука я делал запросы к сайту, после 10 секунд задержки я решил отменить всё запросы, так как наносить вред мне не хотелось. В итоге сервер не был способен обрабатывать запросы в течение 13 секунд.
timeout.png


Крайне не рекомендуется делать PoC для DoS при этичном хакинге, только при необходимости и с согласия компании.

Другие возможности вызвать Denial of Service
После этого я решил задержаться ещё на пару дней с этой программой. И нашёл ещё две потенциальные уязвимости подобного рода:
1. Запрос с очень большим заголовком вызывал 504 Gateway Timeout с минутой ожидания:
header.png
2. Повторный запрос к одноразовому коду аутентификации вызывал эту же ошибку:
code.png
Приведу ещё немного сторонних примеров, чтобы побольше осветить эту тему:
1. Сайт позволяет изменять размер изображения, example.com/image?x=100&y=100 - в таком cлучае мы можем попробовать изменить x и y до больших значений, что вызовет DoS - .
2. Есть возможность изменять цвет используя hex, в таком случае можно попробовать вызвать reDoS, то есть DoS с regex, указав неправильный цвет по типу #000...(много нулей)00abcdfe - .

Заключение
На самом деле вызвать такую уязвимостей не так и сложно, нужно только заставить сервер делать что-то тратя очень много вычислительных ресурсов.
На этом всё. Эта статья не задумывалась как полное руководство по Server Side DoS, но надеюсь, что она помогла вам разобраться в этом типе уязвимостей.
 
Последнее редактирование:
Сомнительно. Скорее всего ты задосил собственный канал TCP ESTABLISHED соединениями. Проверяй работоспособность на другом ресурсе. Например 2ip
 
Сомнительно. Скорее всего ты задосил собственный канал TCP ESTABLISHED соединениями. Проверяй работоспособность на другом ресурсе. Например 2ip
Он же написал, что запросы спамились с приват.сервака, а проверял с ноута. Два разных устройства и, скорее всего, две разных сети. Вряд ли в этом дело.
 
Он же написал, что запросы спамились с приват.сервака, а проверял с ноута. Два разных устройства и, скорее всего, две разных сети. Вряд ли в этом дело.
Я вижу курл с того же сервака что и запрос слал. Смотри скрин.
 
  • Нравится
Реакции: Aleks Binakril
Сомнительно. Скорее всего ты задосил собственный канал TCP ESTABLISHED соединениями. Проверяй работоспособность на другом ресурсе. Например 2ip
Как я и писал, многократные подключения проводил с VPS. И чтобы исключить риск плохого интернета параллельно делал запросы к другому сайту.

Ссылку на свой reports скиньте, посмотрим, тогда и комментарии могут быть излишни.
Да с радостью бы, но как я и писал, программа приватная :(

Я вижу курл с того же сервака что и запрос слал. Смотри скрин.
Я не стал прикриплять скрины с сервера, но дабы развеять все сомнения, скину зацензуренный скрин прямо с видео PoC. Справа терминал с ssh на сервер
 

Вложения

  • image.png
    image.png
    647,5 КБ · Просмотры: 748
Я не стал прикриплять скрины с сервера, но дабы развеять все сомнения, скину зацензуренный скрин прямо с видео PoC. Справа терминал с ssh на сервер
Опять же не информативно. Запусти атаку, а я в этот момент проверю через 2ip живучесть ресурса. Вот это будет железобетонно (или сделай сам это) И второй момент о какой приватности программы может идти речь, если ты уже выложил вектор, если твой вектор верный, то написать утилитку на коленке, которая в цикле пошлет овердофига токенов сможет любой человек который прочитал первые 100 страниц любого учебника по Питону.
 
Опять же не информативно. Запусти атаку, а я в этот момент проверю через 2ip живучесть ресурса. Вот это будет железобетонно (или сделай сам это) И второй момент о какой приватности программы может идти речь, если ты уже выложил вектор, если твой вектор верный, то написать утилитку на коленке, которая в цикле пошлет овердофига токенов сможет любой человек который прочитал первые 100 страниц любого учебника по Питону.
Я бы не стал писать статью об уязвимости в этой программе, если бы она была ещё не пофикшена. С другой стороны, если то, что ты утвержаешь верно, то они бы не приняли репорт и не стали бы её фиксить.
 
Я бы не стал писать статью об уязвимости в этой программе, если бы она была ещё не пофикшена. С другой стороны, если то, что ты утвержаешь верно, то они бы не приняли репорт и не стали бы её фиксить.
Ну а есть хотя бы скрины общения с техподдержкой?
 
  • Нравится
Реакции: g00db0y
Ну а есть хотя бы скрины общения с техподдержкой?
Как такогого общения не было, спросил по почте можно ли сделать DoS PoC, записал видео и отправил. Пофиксили в тот же день, просто забанили мой аккаунт и ограничили количество токенов...
 

Вложения

  • image.png
    image.png
    8,4 КБ · Просмотры: 584
Эээм сомнительная бага, по очень длинным параметрам в пост\гет не удивить, такое часто найти можно, еще вложенные массивы типа access_token[][][][][]=123, то что на генерацию токена большой таймаут, странновато, ну ок как вариант можно сканить и такую багу. Вот по генерации картинки часто угараю по параметрам типа -999999 и 9999999 но кривых генераторов еще не находил, тема интересна. Есть еще схожее с генератором банера с выводом текста\цвет. +можно дудосить скрипты которые js склеивают и выводят
 
  • Нравится
Реакции: Debug
Мы в соцсетях:

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