Broken Object Level Authorization
Broken Object Level Authorization (BOLA) — известная разновидность уязвимости в веб-приложениях, самая часто встречающаяся из-за криворукости разработчиков.
Описание[править]
В современных системах часто применяется механизм API для взаимодействия сервисов. Там же производится авторизация юзеров, чтобы восраться и заниматься своими делами могли только корректные персонажи. Но иногда бывает специфическая ошибка в определении прав доступа, из-за чего кто попало после проверки данных может… капитально так… накуролесить…
Уязвимости типа IDOR были известны ещё в начале 2000-х годов. С ростом популярности API (особенно REST и GraphQL) проблема вышла на новый уровень. По данным нынешних исследований, BOLA встречается в примерно 80 % тестируемых API и является причиной значительного числа реальных инцидентов.
Смысл прост. Сервер получает идентификатор объекта в параметрах запроса и использует его для выборки данных из базы. Если сервер проверяет только аутентификацию пользователя (что он вошёл в систему с верным паролем), но не проверяет, имеет ли этот пользователь право работать с запрошенным объектом, возникает уязвимость BOLA.
Уязвимость часто усугубляется использованием предсказуемых последовательных идентификаторов (1, 2, 3…), что позволяет автоматизировать перебор. Например, тупо долбиться по базе данных номеров некоторого параметра и собирать данные пользователей, так как API позволяет произвольные действия делать, если уж имеешь к нему доступ.
Часто она всирается из-за того, что доступ проверяется на уровне клиента, а юзер может сформировать в обход произвольные запросы.
Подобным атакам подвергались системы Uber, Shopify, Twitter.