Порушена авторизація на рівні об’єкта
Змініть один ідентифікатор в URL-адресі та прочитайте запис незнайомця.
Що таке Порушена авторизація на рівні об’єкта?
Порушена авторизація на рівні об’єкта, яку також називають BOLA або IDOR, є найпоширенішою вразливістю API. Кінцева точка повертає об’єкт, названий ідентифікатором у запиті, не перевіряючи його належність до абонента. Жетон чесний. Ви зміните одне число в URL-адресі by-id, прочитаєте запис незнайомця, а потім уведете послідовні ідентифікатори в груповий збір. Виправлення порівнює власника запису з автентифікованим сеансом і повертає 404, а не 403, тому неможливо підтвердити існування відхиленого ідентифікатора.
Що ви дізнаєтесь у Порушена авторизація на рівні об’єкта
- Розпізнати порушену авторизацію на рівні об’єкта: дійсний сеанс читання об’єкта іншого користувача, оскільки кінцева точка перевіряє, хто телефонує, але не перевіряє, чи належить повернутий запис йому
- Відрізняйте це від порушеної авторизації на рівні функції (роль досягає функції, яку вона може не викликати) і від ескалації привілеїв підробки токенів (підробка ваших власних облікових даних); тут маркер є чесним, кінцева точка дозволена, а перевірка об’єкта відсутня
- Подивіться, як послідовні або вгадані ідентифікатори об’єктів перетворюють одне неавторизоване читання на повний перелік, і чому ідентифікатори, які неможливо вгадати, зменшують цей ризик, але не контролюють доступ
- Застосуйте виправлення: після завантаження об’єкта порівняйте його власника з ідентифікатором із автентифікованого сеансу, а не з тим, що надсилає абонент, і відмовляйтеся, якщо вони не збігаються
- Надавайте перевагу не знайденому над забороненим для відхиленого об’єкта, щоб відхилений ідентифікатор було неможливо відрізнити від відсутнього, закриваючи оракул існування та перевіряючи кожне зчитування побічного ідентифікатора на наявність однакового проміжку
Порушена авторизація на рівні об’єкта — Кроки навчання
-
Звичайний вершник
Larkway — це програма для замовлення поїздок, яка дозволяє будь-якому пасажиру ввімкнути особистий API Trips для експорту власних квитанцій про поїздки для звітів про витрати. Боб зареєструвався як звичайний гонщик, з одноразовою ідентичністю, і ввімкнув його. У його обліковому записі немає нічого особливого: звичайне крісло водія з токеном, на якому вказано його власні поїздки. Він відкриває консоль розробника, щоб побачити, що дає йому API.
-
Ідентифікатори поїздок – це лише цифри
Власні поїздки Боба перераховані з їхніми ідентифікаторами, а посилання на API показує, як отримати будь-яку окрему квитанцію про поїздку за її ідентифікатором. Дві речі виділяються в цих ідентифікаторах.
-
Привезти свою подорож
Спочатку Боб викликає кінцеву точку так, як вона призначена для використання: він запитує одну зі своїх власних поїздок за її ідентифікатором, маючи власний маркер водія в заголовку авторизації, як це робить додаток.
-
Його поїздка, як і очікувалося
Сервер повертає саме те, що повинен: власну подорож Боба, тому що ідентифікатор, який він запитав, належить йому.
-
Змініть одне число
Боб надсилає той самий запит із тим же маркером і змінює лише ідентифікатор, на один нижче його власного. Якщо сервер перевіряє, що поїздка належить абоненту, це не має повертати нічого. Якщо він лише перевірить, чи його сеанс дійсний, він відповість.
-
Чужий проїзд
Воно відповіло. Власний токен водія Боба щойно зробив поїздку, яка не має до нього нічого спільного.
-
Пройдіть послідовність
Один незнайомець - це курйоз. Боб продовжує зменшувати ідентифікатор, і кожне значення повертає реальну квитанцію. Він тягнеться до іншого, щоб підтвердити візерунок.
-
Кожен вершник, у масштабі
Ідентифікатори запускаються послідовно, і кожен відповідає. Це перетворює один витік на врожай.
-
Перевірка знань
Ви щойно спостерігали, як дійсний водій читає подорожі незнайомців, змінюючи ідентифікатор в URL-адресі. Зафіксуйте чому.
-
Тривога приземляється
Ви володієте API Trips для пасажирів від Larkway. Протягом ночі моніторинг помітив один токен користувача, який виконував тисячі поїздок, які не належали йому. Відділ безпеки надіслав вам деталі електронною поштою.
Охоплення стандартів безпеки
OWASP API Top 10
- API1:2023 Broken Object Level Authorization
CWE
- CWE-639 Authorization Bypass Through User-Controlled Key
- CWE-862 Missing Authorization
CIS Controls
- CIS 16 Application Software Security
NIST CSF
- PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
- PR.PS Platform Security