Broken Object Level Authorization

Материал из Неолурк, народный Lurkmore
Перейти к навигации Перейти к поиску

Broken Object Level Authorization (BOLA) — известная разновидность уязвимости в веб-приложениях, самая часто встречающаяся из-за криворукости разработчиков.

Описание[править]

В современных системах часто применяется механизм API для взаимодействия сервисов. Там же производится авторизация юзеров, чтобы восраться и заниматься своими делами могли только корректные персонажи. Но иногда бывает специфическая ошибка в определении прав доступа, из-за чего кто попало после проверки данных может… капитально так… накуролесить…

Уязвимости типа IDOR были известны ещё в начале 2000-х годов. С ростом популярности API (особенно REST и GraphQL) проблема вышла на новый уровень. По данным нынешних исследований, BOLA встречается в примерно 80 % тестируемых API и является причиной значительного числа реальных инцидентов.

Смысл прост. Сервер получает идентификатор объекта в параметрах запроса и использует его для выборки данных из базы. Если сервер проверяет только аутентификацию пользователя (что он вошёл в систему с верным паролем), но не проверяет, имеет ли этот пользователь право работать с запрошенным объектом, возникает уязвимость BOLA.

Уязвимость часто усугубляется использованием предсказуемых последовательных идентификаторов (1, 2, 3…), что позволяет автоматизировать перебор. Например, тупо долбиться по базе данных номеров некоторого параметра и собирать данные пользователей, так как API позволяет произвольные действия делать, если уж имеешь к нему доступ.

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

Подобным атакам подвергались системы Uber, Shopify, Twitter.

Movax1010h.png Глубокий смысл скрыт в этих неестественных языках
Языки программированияПромышленные: BATC#CC++JavaJavaScript (AJAX) • PascalPerlPHPPythonRubyABAPАссемблерВасикFortran (Профессор)
Эзотерические: BrainFuckHQ9++ErlangForthHaskellLISP (My other car) • PrologTclΤΕΧOracleMySQLGolangВ++ScalaH и Ё+
ПрофессииБыдлокодерПрограммистТестировщикХакерХеллоуворлдщикIT-звёздыПрограммист (существо)Тернарный операторUnreal MCPИсходный кодSingle-Page ApplicationGiteaForgejoCephIDEДжуниор
Методы и стилиReverse EngineeringАнти-паттернВыстрелить себе в ногуГрязный хакКод (индусский) • КостыльМетод научного тыкаПомолясьСвистелки и перделкиОчередьСпортивное программированиеОбфускацияБета-тестАльфа-тестШаблоныRegReplaceФреймворкБыдлокодIndex.phpОхота за жукамиКуМирКлеточный автоматПроцедурное программированиеПоиск файлов в Unix по содержимомуPetoohФункция активации нейронаПерегрузка операторов в PythonЗерокодинг
Средства разработкиSublime TextПодсветка синтаксиса кодаUnstable DiffusionAPIPythonTutorCodeWarsDataCampUnity3DКнижный PythonMallocСвязный списокSOLIDООПУказательNULLWeLang++XenonRecompFuse.jsОптимизацияТестированиеAmbreon866Реверс-инжинирингКроссплатформенностьJSON
ЛюдиИлья КанторЮрий КлючевскийЭдуард ЛаасЭдвард СноуденСеймур Пейперт
Прочее++i + ++iДедлайн%s640 килобайтCMSDummy modeЕГГОГFoobarGod is real, unless explicitly declared as integerGOTOIfconfigKISSRegExpSICPsql.ruXyzzyДискетаИнжалид дежицеКОИ-8ЛогМанРекурсияСУБДТест ТьюрингаУмение разбираться в чужом кодеФаза ЛуныФатальный недостатокПроблема 2000ТаймстампКэшЗапись в файл без кэша (Perl)Танцы с бубномКодачХукCurl cffiВибе-кодингFlutterАппликативный оператор