Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
IDOR — самый опасный зверь в лесу OWASP. Даже один экземпляр, попавший не в те руки, может дорого обойтись компании нашего инженера, поэтому он использует все возможности, доступные в его белом ящике, чтобы обогнать на этой охоте пентестеров, багхантеров и злоумышленников.
info
По просьбам выживших все имена были изменены. Из уважения к погибшим остальные события были отображены именно так, как они происходили.
Майское утро, солнце начинает освещать верхушки деревьев, поют соловьи. Комната с двухэтажной кроватью и рабочим столом с двумя мониторами и ноутбуком, по углам разбросаны игрушки, кубики Lego затаились, чтобы напасть на зазевавшуюся босую ногу, дверь заперта изнутри.
На столе стоит кружка кофе, от нее поднимается струйка ароматного пара. В инбоксе по баг‑баунти‑алертам одно новое сообщение.
Дмитрий: Да что там еще, неужто опять принесли пачку учеток сотрудников со стилеров, не надоедает же им…
Рамсель: Вот вам IDOR в подтверждении заказа, можно получить имя, адрес, телефон ваших клиентов и корзину, на скрине — данные произвольного клиента.
Дмитрий: О, неплохо, но у нас же там UUID везде в идентификаторах, где ты вообще взял этот ID?
Рамсель: Бро, а ты зацени веб‑архив по вашему домену!
Дмитрий: Да, валидное. Надо бы поискать у нас по логам все такие места.
Роман: Всё есть, сходи в ClickHouse, возьми аксесс‑логи по внешним балансирам.
Итак, у нас есть аксесс‑логи приложения, стоит фильтрануть по нашим доменам, по response status < 300 и, возможно, только по авторизованным пользователям (чтобы убрать мусор со сканеров).
Уже в скрипте отфильтруем статику.
Заменим параметры path
и query
заглушками и сгруппируем по полученному пути, чтобы в результате остались только уникальные ручки.
Обязательно оставим примеры сырых данных, они пригодятся дальше.
В результате из трафика у нас получится CSV.
Далее мы можем в этом файле отфильтровать результаты по колонкам path
и args
. Нам нужно оставить только те значения, где будут наши заглушки для всего похожего на токены или идентификаторы объектов: {uuid}
, {hex}
, {code}
или {int}
. К этому фильтру вполне можно добавить уже известные нам названия чувствительных идентификаторов, допустим тот же order_id
, или auth_token
, или еще что‑нибудь.
Дальше для отфильтрованных подозрительных ручек можно взять сырые значения идентификаторов из path_example
и args_example
, предусмотрительно сохраненные нами, склеить их обратно в полный путь и списком скопировать в словарик (Simple list) для Burp Intruder, подставив к своему GET-запросу с актуальными тестовыми кредами (или вообще без них).
Там, где в ответе нам вернется что‑то, кроме 403, — повод посмотреть, отдает ли сервер чужие данные и что в коде эндпоинта авторизации.
Аккуратно собрав с десяток ручек, ответивших валидными данными на запросы, Дмитрий пошел искать правильных разработчиков и заводить тикеты на исправления.
И надо поднять выплату Рамселю, много нашли проблем благодаря его репорту.
Прошло две недели. Офис, рабочая встреча в Zoom, все смотрят бесконечный флоу онбординга, и только одинокая муха, ползущая по схеме на мониторе, кажется, понимает, как ей стать клиентом компании.
Источник: xakep.ru