Копейка рубль бережёт, а Low — баунти копит

Всем привет! Подвёл итоги выходных — так сказать, снова на страже Сетки)

За два дня получилось найти и отправить 4 уязвимости Low-уровня, две из которых уже приняли.

Недавно мы обновили большую часть функционала и визуала проекта pentester-dashboard что позволило по максимум оценить его в работе по исследование через структуру записей и как видно по 1 скрину успешно, а пример подхода видно на втором скрине.

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

Смысл подхода довольно простой: когда перед глазами лежит не пачка разрозненных HTTP-запросов, а целый функциональный флоу, становится проще задавать главный вопрос в багхантинге: “А что будет, если?..”

И как раз один такой вопрос привёл к одному из четырёх отчётов.

Представим функционал отзывов о товаре. Пользователь сначала оставляет первое впечатление о покупке, а спустя какое-то время может дополнить его вторым отзывом — уже после реального использования товара.

Для обоих текстов установлен лимит в 500 символов. По API это условно выглядит так: ① POST /v1/add/product-recall-first → создаёт первый отзыв ② POST /v1/add/product-recall-two → добавляет второй отзыв

Если тестировать каждый эндпоинт отдельно, всё выглядит нормально. Первый не принимает больше 500 символов. Второй тоже не принимает больше 500 символов.

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

То есть через запрос создания первого отзыва можно передать поле второго. А через запрос добавления второго — изменить поле первого.

И здесь появляется уже другой сценарий: - обычный параметр → лимит работает - недокументированный параметр → лимит не вызывается

В результате через «чужое» поле получилось передать значение значительно больше установленного ограничения. При дальнейшей обработке это приводило к ошибкам 500 и позволяло создавать повышенную нагрузку на сервер.

Получается довольно интересный паттерн: два безопасных по отдельности эндпоинта → пересекающиеся модели данных → недокументированные параметры → другой флоу валидации

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

Low но зато ещё один паттерн поиска в копилку. А копейка, как известно, рубль бережёт :)

#AppSec #BugBounty #Setka #CyberSecurity #Pentest #standoff365

Копейка рубль бережёт, а Low — баунти копит | Сетка — социальная сеть от hh.ru Копейка рубль бережёт, а Low — баунти копит | Сетка — социальная сеть от hh.ru