Порушена авторизація на рівні функцій
Увійти не означає мати дозвіл. Захистіть адміністративні маршрути.
Що таке Порушена авторизація на рівні функцій?
API підтверджує, що користувач увійшов у систему, а тоді виконує будь-яку функцію, яку той попросить, не перевіряючи, чи може його роль її викликати. Привілейовані елементи керування приховані в інтерфейсі, але самі ендпоінти не перевіряють роль, тож до них дістається будь-який дійсний токен. Ви скористаєтеся чесним токеном аналітика лише для читання, щоб отримати повний список клієнтів і поставити в чергу велику виплату, і кожен запит отримає відповідь 200. Потім ви розгорнете на роутері перевірку authorize('admin') , яка повертає 403: адміністративна поверхня стане «закритою за замовчуванням», а нові маршрути успадкують перевірку.
Що ви дізнаєтесь у Порушена авторизація на рівні функцій
- Розпізнавайте порушену авторизацію на рівні функцій: дійсна сесія дістається до привілейованої функції, бо ендпоінт перевіряє, хто звертається, але не перевіряє, чи може його роль її викликати
- Відрізняйте її від порушеної авторизації на рівні об'єктів (зміна ідентифікатора об'єкта) і від підвищення привілеїв підробкою токена (підміна власних облікових даних): тут токен чесний, із низькими привілеями, а бракує саме перевірки функції
- Усвідомлюйте, що приховування адміністративного елемента в інтерфейсі чи відсутність маршруту в документації не є контролем доступу, бо клієнти звертаються до API напряму, і ендпоінт усе одно відповідає
- Застосовуйте виправлення: забезпечуйте авторизацію на сервері для кожної привілейованої функції, беріть роль того, хто звертається, з автентифікованої сесії, а не із запиту, і віддавайте перевагу перевірці за принципом «закрито за замовчуванням» на межі роутера, щоб нові маршрути успадковували перевірку
- Перевіряйте кожен адміністративний, внутрішній і службовий ендпоінт на відсутню перевірку ролі, особливо там, де привілейовані й звичайні функції живуть в одному автентифікованому API
Порушена авторизація на рівні функцій — Кроки навчання
-
Обліковий запис лише для читання
Fennmark — платіжна платформа, і кожен, хто зареєструється, може отримати обліковий запис розробника із самообслуговуванням. Боб отримав такий, зареєструвавшись із вигаданими даними. Його роль — Analyst: лише читання, доступ тільки до пісочниці, нічого чутливого. Він відкриває консоль розробника, щоб розібратися, що це за обліковий запис і що пропонує API.
-
Адміністративні функції — на видноті
Роль Боба — лише читання, тож адміністративні елементи керування в інтерфейсі від нього приховані. Довідник API, однак, не прихований: він перелічує всі службові функції поруч із тими, які Бобу дозволено викликати.
-
Що каже токен
Перш ніж торкатися чогось привілейованого, Боб перевіряє, яку особу засвідчує його власний токен. У «Тестері API» він указує ендпоінт облікового запису й надсилає токен сесії в заголовку Authorization — так само, як це робить застосунок.
-
Чесний аналітик
Сервер підтверджує саме те, чого Боб очікував. Токен справжній і прямо каже, ким Боб є.
-
Викличте адміністративну функцію
Боб залишає той самий запит і той самий токен лише для читання, а в URL змінює тільки ресурс — на функцію, яку довідник позначив як службову: повний список клієнтів. Якщо API лише перевіряє, що сесія дійсна, а роль не перевіряє, воно відповість.
-
Увесь список клієнтів — аналітикові
Адміністративна функція відповіла. Токен пісочниці лише для читання щойно витягнув клієнтські записи платформи.
-
Переведіть гроші
Читати дані — одне. Тепер Боб викликає функцію, що змінює стан: ендпоінт виплат, який ставить виплату в чергу. Він надсилає запит із тим самим токеном аналітика й указує як отримувача рахунок, який контролює сам.
-
Виплату в чергу поставив обліковий запис пісочниці
Функція, що рухає гроші, теж спрацювала. Без адміністратора, без схвалення, без особливих облікових даних.
-
Перевірка знань
-
Надходить сповіщення
Ви відповідаєте за API бек-офісу Fennmark. Уночі моніторинг помітив, що обліковий запис розробника із самообслуговуванням звертається до службових ендпоінтів. Центр моніторингу безпеки надіслав вам подробиці електронною поштою.
Охоплення стандартів безпеки
OWASP API Top 10
- API5:2023 Broken Function Level Authorization
CWE
- CWE-285 Improper Authorization
- 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