Перейти к содержимому

Поиск по платформе

API BOLA: Доступ к чужим заказам

Broken Object Level Authorization (BOLA): API возвращает заказы любого пользователя по ID без проверки владельца.

Автор: Hack & Fix
Освоишь: scope-based authrate limitpagination guard
Средне+60 XP ~35 мин golang
CWE-284 · A01:2021 Pro
Обложка: API BOLA: Доступ к чужим заказам Обложка: API BOLA: Доступ к чужим заказам
Задача
# BOLA: Broken Object Level Authorization в API заказов ## Сценарий Вы — клиент сервиса доставки гаджетов **МерчЛаб** и заодно аудируете его JSON API. У сервиса есть REST-эндпоинт: список заказов конкретного пользователя по идентификатору в пути. Команда уверена в безопасности — эндпоинт закрыт аутентификацией. Внутренний аудит знает больше: в системе заведён служебный заказ администратора с конфиденциальной меткой, и его реально прочитать, имея лишь обычную учётную запись. ## Цель 1. Изучите URL-схему эндпоинта заказов: где передаётся идентификатор пользователя и кто его контролирует. 2. Не обходя аутентификацию, добудьте заказы другого пользователя — только изменением параметров запроса. 3. Найдите среди чужих заказов служебную запись с флагом. ## Теория BOLA (Broken Object Level Authorization, №1 в OWASP API Security Top 10) — IDOR в мире JSON API: эндпоинт проверяет, что запрос аутентифицирован, но не проверяет, что запрашивающий владеет объектом. Идентификатор из URL напрямую попадает в запрос к базе. Ответ API структурирован и предсказуем, поэтому перебор идентификаторов автоматизируется в пару строк. **Уязвимый паттерн:** ```go // идентификатор из URL уходит в SQL без проверки владельца userID := r.PathValue("id") rows, _ := db.Query("SELECT ... FROM orders WHERE user_id=?", userID) ``` Механика атаки: аутентификация подтверждает, кто отправил запрос, но выборка читает заказы того, чей идентификатор стоит в пути. Достаточно подставить чужой последовательный ID — и API отдаст чужие записи. Защита — объектная авторизация: сервер сверяет идентификатор из пути с владельцем сессии до всякого обращения к данным. ## Точка входа атаки `GET /api/users/{id}/orders` — JSON-список заказов пользователя `{id}`; требуется валидная сессия. Свой идентификатор подскажет соседний эндпоинт `GET /api/me`. * Обычный пользователь: `demo` / `demo`

Похожие лабораторные (2)

другие лабы по этой уязвимости
Обложка лабы: API Mass Assignment: Повышение привилегий через PUT Обложка лабы: API Mass Assignment: Повышение привилегий через PUT
API

API Mass Assignment: Повышение привилегий через PUT

encoding/json декодирует PUT-запрос в map[string]interface{}, а self-service switch ошибочно разрешает role наряду с fullname и avatar_url.

+60 XP
Go Pro
Exploit Fix
Обложка лабы: API Rate Limit: Brute-force логина без ограничений Обложка лабы: API Rate Limit: Brute-force логина без ограничений
API

API Rate Limit: Brute-force логина без ограничений

Отсутствие rate limiting на эндпоинте логина позволяет brute-force пароля администратора.

+60 XP
Go Pro
Exploit Fix